Almacenar miles de millones de filas sin relación

Voy a recibir un gran grupo de archivos CSV todos los días. Además, tengo mil millones de registros de datos (de esos archivos CSV), pero no es un número fijo (1b registros diarios). Van a estar creciendo y necesito almacenarlos en una base de datos. También hay algunos puntos extra:

  1. no hay actualización
  2. No hay unión y relación.
  3. Seleccione un montón de filas y agrupe por
  4. La escritura intensiva es mucho más que la lectura
  5. No necesito normalización

Tenía un banco entre MySQL InnoDB y MyISAM. MyISAM fue mejor que InnoDB (porque no tengo normalización), pero MySQL no es un buen enfoque porque no tengo ninguna relación.

También revisé MongoDB, pero con 50 GB de datos CSV, ¡usaba 150 Gb de almacenamiento!

Sé que puedo usar archivos CSV pero necesito un enfoque de base de datos. Una base de datos tiene muchas herramientas (como consultas GROUP BY simples) y ventajas como actualizaciones, correcciones de errores, cosas de seguridad, rendimiento de lectura y escritura, replicación, etc.

Así que creo que necesito una base de datos NoSQL que pueda hacer escritura distribuida y soporte por encima de los puntos adicionales. Pero no sé cuál de los NoSQL es mejor para mí.

Estoy usando Linux (CentOS).

¿En qué sistema operativo se ha ejecutado? ¿Qué estás dispuesto a pagar? Edite su pregunta y tenga en cuenta el comentario de Thomas.
Siempre me sorprende lo mal que lee la gente. Le hicieron varias preguntas y se perdió una.
Independientemente de la herramienta que utilice, puede tener algunos archivos individuales realmente grandes. ¿Su sistema operativo manejará esos archivos enormes? ¿Es un sistema operativo de 64 bits? Esto suena como un proyecto interesante. Me pregunto cuánto tardaría una selección en 10 mil millones de registros.
@Bulrush, sí, es 64. Pero creo que la E/S es más lenta que la base de datos. y algunas herramientas pueden ayudar en una gran cantidad de datos.
@Masood. ¿Por qué cree que una base de datos de una sola tabla tiene un acceso más lento cuando ni siquiera tiene una sola combinación o relación con otra tabla? Las bases de datos están súper optimizadas para filtrar y seleccionar datos y la ausencia de relaciones significa que son aún más rápidas en este caso.
@Bulrush Entonces, creo que las bases de datos SQL se enfocan en la relación y las bases de datos NoSQL se enfocan en una estructura de menos relación (o sin relación).

Respuestas (2)

Solía ​​manejar información como esta.

Usé PostgreSQL, donde tienes la ventaja de una base de datos relacional y Nosql.
Puede almacenar en un solo registro, datos normalizados, como datos de importación, una identificación, etc. y una matriz, o un json, o incluso un Hstore.

Además: tiene compresión nativa.

Gracias, pero no necesito la normalización. PostgreSQL es relacional, como dije, no tengo ninguna relación.
@MasoodAfrashteh Entendí. Puede usar Postgresql sin normalización. Postgresql admite datos no estructurados. Desea almacenar un solo registro por línea CSV No hay problema, puede almacenarlo sin procesar o dividirlo en una matriz de texto. O json, estos son datos no estructurados con una base de datos estable real (incluso más rápido que mongo en su propio campo).

Sugeriría usar Pandas con la información .csv convertida al formato HDF5 probablemente por Pandas. HDF5 es generalmente más rápido que el esquema de estrella SQL.

No es una base de datos en sí misma. Pandas incluye búsquedas rápidas, selección, remodelación, agrupación, etc. y puede interactuar con una gran cantidad de bases de datos.

Pandas es gratuito, gratuito y de código abierto, y se mantiene activamente. Interactúa con herramientas como ipython, jupyter, matplotlib, etc., para una mejor manipulación y visualización de los datos.