hashed
El diccionario se almacena por completo en memoria en forma de tabla hash. Puede contener cualquier cantidad de elementos con cualquier identificador. En la práctica, el número de claves puede alcanzar decenas de millones de elementos.
La clave del diccionario es de tipo UInt64.
Se admiten todos los tipos de fuentes. Al actualizar, los datos (desde un archivo o una tabla) se leen íntegramente.
Ejemplo de configuración:
LAYOUT(HASHED())<layout>
<hashed />
</layout>Ejemplo de configuración con ajustes:
LAYOUT(HASHED([SHARDS 1] [SHARD_LOAD_QUEUE_BACKLOG 10000] [MAX_LOAD_FACTOR 0.5]))<layout>
<hashed>
<!-- Si el número de segmentos es mayor que 1 (el valor predeterminado es `1`), el diccionario cargará
los datos en paralelo, lo que resulta útil si tiene una gran cantidad de elementos en un
diccionario. -->
<shards>10</shards>
<!-- Tamaño de la cola de espera para los bloques en la cola en paralelo.
Dado que el cuello de botella en la carga en paralelo es el rehash, y para evitar
bloqueos porque un hilo está realizando el rehash, es necesario disponer de cierta
cola de espera.
10000 ofrece un buen equilibrio entre memoria y velocidad.
Incluso con 10e10 elementos, puede gestionar toda la carga sin inanición. -->
<shard_load_queue_backlog>10000</shard_load_queue_backlog>
<!-- Factor de carga máximo de la tabla hash; con valores más altos, la memoria
se aprovecha de forma más eficiente (se desperdicia menos memoria), pero el rendimiento de lectura
puede empeorar.
Valores válidos: [0.5, 0.99]
Predeterminado: 0.5 -->
<max_load_factor>0.5</max_load_factor>
</hashed>
</layout>sparse_hashed
Similar a hashed, pero usa menos memoria a costa de un mayor uso de CPU.
La clave del diccionario es de tipo UInt64.
Ejemplo de configuración:
LAYOUT(SPARSE_HASHED([SHARDS 1] [SHARD_LOAD_QUEUE_BACKLOG 10000] [MAX_LOAD_FACTOR 0.5]))<layout>
<sparse_hashed>
<!-- <shards>1</shards> -->
<!-- <shard_load_queue_backlog>10000</shard_load_queue_backlog> -->
<!-- <max_load_factor>0.5</max_load_factor> -->
</sparse_hashed>
</layout>También es posible usar shards para este tipo de diccionario y, de nuevo, es más importante para sparse_hashed que para hashed, ya que sparse_hashed es más lento.
complex_key_hashed
Este tipo de almacenamiento se utiliza con claves compuestas. Es similar a hashed.
Ejemplo de configuración:
LAYOUT(COMPLEX_KEY_HASHED([SHARDS 1] [SHARD_LOAD_QUEUE_BACKLOG 10000] [MAX_LOAD_FACTOR 0.5]))<layout>
<complex_key_hashed>
<!-- <shards>1</shards> -->
<!-- <shard_load_queue_backlog>10000</shard_load_queue_backlog> -->
<!-- <max_load_factor>0.5</max_load_factor> -->
</complex_key_hashed>
</layout>complex_key_sparse_hashed
Este tipo de almacenamiento está pensado para usarse con claves compuestas. Es similar a sparse_hashed.
Ejemplo de configuración:
LAYOUT(COMPLEX_KEY_SPARSE_HASHED([SHARDS 1] [SHARD_LOAD_QUEUE_BACKLOG 10000] [MAX_LOAD_FACTOR 0.5]))<layout>
<complex_key_sparse_hashed>
<!-- <shards>1</shards> -->
<!-- <shard_load_queue_backlog>10000</shard_load_queue_backlog> -->
<!-- <max_load_factor>0.5</max_load_factor> -->
</complex_key_sparse_hashed>
</layout>