Pregunta

Estoy tratando de averiguar exactamente cuáles son realmente estos nuevos almacenes de datos falsos como bigtable, hbase y cassandra.

Trabajo con cantidades masivas de datos del mercado de valores, miles de millones de filas de datos de precios / cotizaciones que pueden agregar hasta 100s de gigabytes cada día (aunque estos archivos de texto a menudo se comprimen al menos en un orden de magnitud). Estos datos son básicamente un puñado de números, dos o tres cadenas cortas y una marca de tiempo (generalmente nivel de milisegundos). Si tuviera que elegir un identificador único para cada fila, tendría que elegir la fila completa (ya que un intercambio puede generar múltiples valores para el mismo símbolo en el mismo milisegundo).

Supongo que la forma más sencilla de asignar estos datos a bigtable (incluyo sus derivados) es por nombre de símbolo y fecha (que puede devolver una serie de tiempo muy grande, más de millones de puntos de datos no son desconocidos). Al leer sus descripciones, parece que se pueden usar varias teclas con estos sistemas. También estoy asumiendo que los números decimales no son buenos candidatos para las claves.

Algunos de estos sistemas (Cassandra, por ejemplo) afirman poder hacer consultas de rango. ¿Sería capaz de consultar eficientemente, por ejemplo, todos los valores para MSFT, para un día determinado, entre las 11:00 a.m. y la 1:30 p.m.?

¿Qué sucede si deseo buscar en TODOS los símbolos para un día determinado y solicitar todos los símbolos que tienen un precio entre $ 10 y $ 10.25 (así que estoy buscando los valores y quiero que se devuelvan las claves como resultado)?

¿Qué sucede si quiero obtener dos series de tiempo, restar una de la otra y devolver las dos series de tiempo y su resultado, tendré que hacer su lógica en mi propio programa?

La lectura de documentos relevantes parece mostrar que estos sistemas no son muy adecuados para los sistemas de series temporales masivas. Sin embargo, si sistemas como Google Maps se basan en ellos, creo que las series temporales también deberían funcionar. Por ejemplo, piense en el tiempo como el eje x, los precios como el eje y y los símbolos como ubicaciones con nombre; de ??repente, parece que la tabla grande debería ser la tienda ideal para series de tiempo (si se puede almacenar, recuperar toda la Tierra) , ampliado y anotado, los datos del mercado de valores deben ser triviales).

¿Puede algún experto señalarme en la dirección correcta o aclarar cualquier malentendido?

Gracias

¿Fue útil?

Solución

Todavía no soy un experto , pero he estado jugando con Cassandra durante unos días y tengo algunas respuestas para usted:

  1. No se preocupe por la cantidad de datos, es irrelevante con sistemas como Cassandra, si tiene $$$ para un gran clúster de hardware.
  

Algunos de estos sistemas (Cassandra, por ejemplo) afirman poder hacer consultas de rango. ¿Sería capaz de consultar eficientemente, por ejemplo, todos los valores para MSFT, para un día determinado, entre las 11:00 a.m. y la 1:30 p.m.?

Cassandra es muy útil cuando sabes cómo trabajar con teclas. Puede moverse rápidamente por las teclas muy rápidamente. Por lo tanto, para buscar MSFT entre las 11:00 y las 1:30 p.m., tendría que ingresar sus filas de esta manera:

MSFT-timestamp, GOOG-timestamp, ..etc Luego puede decirle a Cassandra que busque todas las claves que comienzan con MSFT-now y terminan con MSFT-now + 1hour.

  

¿Qué sucede si deseo buscar en TODOS los símbolos para un día determinado y solicitar todos los símbolos que tienen un precio entre $ 10 y $ 10.25 (así que estoy buscando los valores y quiero que se devuelvan las claves como resultado)?

No soy un experto, pero hasta ahora me di cuenta de que Cassandra no busca en absoluto los valores. Entonces, si desea hacer lo anterior, tendrá que hacer otra tabla dedicada solo a este problema y diseñar su esquema para que se ajuste al caso. Pero no será muy diferente de lo que describí anteriormente. Se trata de nombrar sus claves y columnas. ¡Cassandra puede encontrarlos muy rápidamente!

  

¿Qué sucede si quiero obtener dos series de tiempo, restar una de la otra y devolver las dos series de tiempo y su resultado, tendré que hacer su lógica en mi propio programa?

Correcto, toda la lógica se realiza dentro de su programa. Esto no es MySQL. Esto es solo un motor de almacenamiento. (Pero estoy seguro de que las próximas versiones ofrecerán este tipo de cosas)

Recuerda que soy un novato en esto, si me equivoco, no dudes en corregirme.

Otros consejos

Si se trata de una base de datos de series temporales masivas, los estándares son:

Estos no son baratos, pero pueden manejar sus datos de manera muy eficiente.

Alguien a quien respeto me recomendó la base de datos de Open Time Series. En particular, que el esquema era el mejor que había visto nunca.

http://opentsdb.net/

'Estoy parado frente a la misma montaña. Mi principal problema con cassandra es que no puedo obtener una secuencia en el conjunto de resultados, por ejemplo, en forma de iterador.

Ya estoy mirando arriba y abajo los documentos y la red, pero nada.

No puedo obtener todas las claves y luego obtener las filas, ya que miles de millones de filas lo hacen imposible.

El DataStax Java Driver permite la paginación automática para que transmita los resultados como un iterador y todo está incorporado. Esto está en Cassandra 2.0.1 por cierto - http://www.datastax.com/dev/blog/client-side-improvements-in-cassandra -2-0

Solo por completar la lectura de esto en 2018, ahora hay una base de datos especial solo para datos de series de tiempo llamada TimescaleDB

http://www.timescale.com/

Vale la pena leer este blog, explica por qué es superior a soluciones como Cassandra para ese caso especial y por qué decidieron construirlo sobre la base de datos relacional de PostgreSQL

https://blog.timescale.com/time-series-data-why-and-how-to-use-a-relational-database-instead-of-nosql-d0cd6975e87c

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