Pregunta

Tengo muchos archivos de texto, su tamaño total es de aproximadamente 300 GB ~ 400 GB. Todos están en este formato

key1 value_a
key1 value_b
key1 value_c
key2 value_d
key3 value_e
....

Cada línea está compuesta por una clave y un valor. Quiero crear una base de datos que pueda permitirme consultar todo el valor de una clave. Por ejemplo, cuando consulto la clave1, se devuelven value_a, value_b y value_c.

En primer lugar, insertar todos estos archivos en la base de datos es un gran problema. Intento insertar algunos trozos de tamaño GBS en la tabla MySQL Myisam con sintaxis de infile de carga de carga. Pero parece que MySQL no puede utilizar los múltiples para insertar datos. Es tan lento como el infierno. Entonces, creo que MySQL no es una buena opción aquí para tantos registros.

Además, necesito actualizar o recrear la base de datos periódicamente, semanalmente o incluso diariamente si es posible, por lo tanto, la velocidad de inserción es importante para mí.

No es posible que un solo nodo haga la computación y la inserción de manera eficiente, para ser eficiente, creo que es mejor realizar la inserción en diferentes nodos en paralelo.

Por ejemplo,

node1 -> compute and store 0-99999.txt
node2 -> compute and store 10000-199999.txt
node3 -> compute and store 20000-299999.txt
....

Entonces, aquí viene el primer criterio.

Criterios 1. Velocidad de inserción rápida a la manera distribuida por lotes.

Luego, como puede ver en el ejemplo del archivo de texto, es mejor proporcionar múltiples la misma clave a diferentes valores. Al igual que los mapas Key1 a value_a/value_b/value_c en el ejemplo.

Criterios 2. Se permiten múltiples claves

Luego, tendré que consultar las claves en la base de datos. No se requiere una consulta de unión relacional o compleja, todo lo que necesito es una consulta simple de clave/valor. La parte importante es esa clave múltiple para el mismo valor

Criterios 3. Consulta de valor clave simple y rápida.

Sé que hay HBase/Cassandra/MongoDB/Redis ... y así sucesivamente, pero no estoy familiarizado con todos ellos, no estoy seguro de cuál se ajusta a mis necesidades. Entonces, la pregunta es: ¿qué base de datos usar? Si ninguno de ellos se ajusta a mis necesidades, incluso planeo construir las mías, pero requiere esfuerzos:/

Gracias.

¿Fue útil?

Solución

He estado en una situación similar y recomiendo investigar MongoDB o HBase para sus necesidades. Los otros (Cassandra/Redis) también son buenos, pero HBase y MongoDB se han probado en entornos grandes, tienen una gran comunidad, buena documentación (MongoDB es mejor) y generalmente cumplen los tres requisitos que está buscando.

Otros consejos

  • ¿Qué tan grandes son las llaves?
  • ¿Qué tan grandes son los valores?
  • ¿Llegarán los datos "continuamente", o esta es una carga única?
  • Veamos todas las consultas representativas. Solo has mencionado

SELECT val FROM tbl WHERE key = 'constant';

¿Hay otros?

En general, las tiendas de valores clave apestan a lo grande. Pero tal vez podamos hacer que su caso especial funcione de manera no demasiado bancaria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top