Almacenamiento de datos y Big Data

Estoy diseñando un sistema de Data Warehouse. Necesito un programa que obtenga: múltiples tipos de datos, los une y luego realiza consultas rápidas sobre ellos.

Dado que las fuentes son del orden de 250 GB (por tabla), supongo que estamos en el área de Big Data.

No puedo saber de antemano los tipos de consultas que se realizarán en este sistema, por lo que necesitaría algo sin esquema. Además, este sistema debe tener en cuenta el hecho de que tenemos instantáneas diarias y, por lo tanto, debería poder consultarlas de manera razonable (más información aquí ).

Conozco Apache Drill, pero no puede consultar instantáneas diarias (vea el ejemplo en la pregunta vinculada).

Respuestas (2)

Al leer esta publicación y su otra publicación, no entiendo muy bien por qué siente que debe ser sin esquema. Sin esquema es generalmente un término que se usa con big data (Hadoop en particular) donde tiene datos provenientes de múltiples fuentes que desea cargar en un almacén de datos para su uso posterior. A continuación, configure el esquema cuando esté listo para utilizar los datos.

Para sus grandes conjuntos de datos, menciona tomar instantáneas diarias y, si bien esto funcionará, terminará con una sobrecarga masiva en el volumen de datos. Una mejor opción es activar la captura de datos modificados (CDC). CDC registrará solo los cambios en los datos en lugar de tomar una instantánea completa de todo lo que contiene. Por lo tanto, no está desperdiciando espacio para todos los registros sin cambios. La mayoría de los motores de bases de datos modernos admiten alguna forma de CDC, pero también existen herramientas de terceros que pueden hacerlo.

Le recomiendo encarecidamente que busque el asesoramiento de una empresa consultora externa que se especialice en almacenamiento de datos para que le ayude a gestionarlo. Lo que busca es experiencia y recomendaciones de software.

No obtendrá uniones (normales) en una base de datos como MongoDB, por lo que está fuera de discusión, pero ¿por qué la incapacidad de conocer las consultas de antemano necesariamente implica que no hay esquema? ¿Sus datos tienen alguna estructura después de todo?

Desde el enlace a otra pregunta, parece que necesita búsquedas de texto rápidas (¿ME GUSTA/ME GUSTA?).

Bueno, para eso, las nuevas versiones de Postgres encajarían perfectamente, siempre que haga uso de la pg_trgmextensión ( http://www.postgresql.org/docs/9.1/static/pgtrgm.html ). Implementa búsquedas de índice (a diferencia del escaneo secuencial) con el operador LIKE/ILIKE con comodines.

Gracias a esta extensión he logrado crear un motor de búsqueda fenomenalmente rápido en una base de datos PG de tamaño ~TB.

También he escrito un motor de consulta de tipo booleano utilizando el pyparsingmódulo de Python que tiene los operadores y palabras clave típicos correspondientes a las columnas ( ANDindexadas ). Traduce la consulta de alto nivel a SQL (en realidad SQLAlchemy Core SQL Expressions). De esta manera, puede consultar la base de datos de una manera bastante flexible y obtener resultados muy rápidamente. No sé si lo que necesita es una funcionalidad similar a la de un motor de búsqueda, pero estoy seguro de que se podría desarrollar una gramática para esto con bastante facilidad utilizando .ORNOTpg_trgmpyparsing

Si necesita algo que involucre más computación numérica, PyTables es extremadamente rápido para operar en conjuntos de datos sin memoria (aunque los operadores de búsqueda de cadenas son algo rudimentarios allí).