37 votos

Uso del almacenamiento NoSQL en finanzas

Me pregunto si alguien ha utilizado NoSQL (mongodb, cassandra, etc.) para almacenar y analizar datos. Intenté buscar en la web pero no pude ver si las empresas financieras se habían metido en el uso de almacenamiento nosql.

Hasta ahora, incluso en este sitio, sólo he visto conversaciones sobre el uso de bases de datos SQL. Me imagino que NoSQL sería mucho más rápido.

Podría alguien arrojar luz sobre el tema de las soluciones NoSQL en el mundo de las finanzas. ¿has visto/escuchado a alguien usarlo? si es así, ¿por qué lo usan? si no lo usan, ¿por qué no?

22voto

Vitalik Puntos 184

Los sistemas de bases de datos NoSQL especializados se utilizan mucho para el almacenamiento de series temporales, sobre todo para los datos de ticks:

  • Kx / Kdb es una solución destacada; de Arthur Whitney et al que hizo A+ en Morgan Stanley
  • Onetick es otro participante más reciente, que se remonta a Goldman Sachs
  • Voltdb es algo del inventor de bases de datos en serie Michael Stonebreaker
  • SciDB es otro proyecto reciente de Stonebreaker, que intenta el "código abierto comercial", pero más para aplicaciones científicas (al menos por ahora )

Las ofertas comerciales suelen ser bastante caro y no he oído hablar del uso de bases de datos NoSQL estándar de la Web 2.0 en entornos comerciales. Algunos pueden, por supuesto hacer en lugar de hablar ...

0 votos

Gracias esto es muy útil. he usado nosql y me encanta (solo servía datos para los motores de búsqueda de las empresas). los datos se siguen almacenando en DB en el backend.

1 votos

Kdb+ y OneTick son almacenes orientados a columnas, lo cual es una tema frecuente aquí . La base de datos propia de Stonebreaker orientada a las columnas es Vertica que recientemente fue comprada por HP. (VoltDB está orientado a las filas y está pensado para aplicaciones OLTP, mientras que los productos orientados a las columnas aquí presentes están pensados para OLAP).

0 votos

Chris, gracias por ampliar la respuesta.. Además de Vertica, también se podría mencionar la oferta de Sybase en el área. Sin embargo, creo que SciDB también está orientado a las columnas y podría convertirse en un caballo negro. Hablan de soporte de R desde el principio.

16voto

urini Puntos 8233

La razón por la que las bases de datos NoSql "tradicionales" no tendrán mucha aceptación en las finanzas es que están diseñadas para resolver un problema diferente. La mayoría de las bases de datos NoSql del mundo web están diseñadas con dos parámetros centrales de diseño. En primer lugar, las búsquedas de claves deben ser muy rápidas. El segundo es que las operaciones deben ser atómicas a nivel de fila y no deben abarcar registros. Esto permite que la base de datos sea fragmentada de manera muy eficaz, ya que ninguna operación debe abarcar varias máquinas y, a su vez, esto les permite construir arquitecturas de escala. Estas bases de datos se construyen para cargas de trabajo con mucha escritura y para poder tener búsquedas rápidas de claves para renderizar páginas web. Si bien es posible utilizarlas para almacenar datos de garrapatas, no es realmente para lo que son buenas.

Los datos financieros tienden a ser pequeños en relación con los datos de las grandes empresas web. Por lo tanto, el escalamiento en las finanzas es menos importante. Además, los datos financieros tienden a dividirse bien (en el día, el símbolo o casi cualquier otra clave), por lo que la colocación de réplicas tiende a ser más explícita.

Map reduce es la forma típica de construir aplicaciones analíticas para estos almacenes de datos, ya sea usando hadoop (Cassandra) o map reduce interno (MongoDB tiene una API java script MR). Este no suele ser el paradigma ideal para analizar datos de series temporales.

Los almacenes tradicionales orientados a columnas con herramientas integradas de análisis de series temporales o plataformas construidas a medida seguirán siendo la forma preferida de almacenar y procesar datos de series temporales. No creo que haya (o deba haber) mucha convergencia entre las bases de datos construidas para ejecutar sitios web de muy alta escala y las bases de datos construidas para almacenar y analizar información de series temporales.

Dicho esto, utilizamos mucho mongodb para el almacenamiento de metadatos y como una especie de caché muy grande. Pero no lo utilizamos para almacenar o analizar datos financieros.

5 votos

"Los datos financieros tienden a ser pequeños en relación con los datos de las grandes empresas de la web"... sí, díselo a los 60 dvds de TAQ del Nasdaq que tengo ahora mismo en mi mesa (sólo datos de 2010). Todos comprimidos en un 95%.Los datos de tick e incluso los de 1 minuto de un gran número de empresas pueden ser bastante costosos en cuanto a datos. Además, si estás haciendo varios cálculos en varios periodos, las columnas estandarizadas de mysql pueden ser excesivas, cuando puedes simplemente añadir cualquier campo que necesites a un documento NoSql (Mongodb específicamente).

3 votos

ITCH, y OpenBook ULTRA, PITCH, etc... no se considerarían grandes para los estándares de las empresas web. OPRA es una gran fuente. 60 DVDs son algo menos de 300 GB comprimidos, lo cual es minúsculo. Hay muchas razones para usar NoSQL por la razón que mencionas, que es no tener un esquema. Sin embargo, es poco probable que veamos (o debamos ver) despliegues NoSql a gran escala (miles de máquinas en una instancia) en finanzas porque los datos simplemente no son tan grandes.

0 votos

Pero, ¿dirías que eso se debe al hecho de que el soporte/los empleados de NoSql son pequeños? ¿O es un problema de infraestructura de NoSql? Por ejemplo mongodb tiene uno de los más fáciles (por lo que he leído) mecanismos de sharding y replicación que lo hacen muy útil para la expansión de múltiples máquinas (una de las resiones más mencionadas para cambiar de SQL a MongoDb). Pero lo digo con la única experiencia de empezar un proyecto en el que estoy trabajando en mongo (estudiante universitario, sin experiencia legal).

6voto

En el mundo de las finanzas, la mayoría de los datos (sobre todo teniendo en cuenta que este foro es para monos Quant) son transaccionales y están sujetos a la presentación de informes reglamentarios.

NoSQL no es generalmente transaccional y dada la forma de, por ejemplo, los datos de riesgo, no hay ninguna razón de peso para desechar ACID y RDBMS.

Hay razones más mundanas: hay miles de informáticos que conocen los RDBMS. Cuando la gente de NoSQL se va, ¿dónde está la continuidad y el apoyo?

Soy parcial: Soy un especialista en bases de datos RDBMS que gestiona sistemas de riesgo/precio/comercio

2 votos

¿Qué pasa con los momentos en los que simplemente quieres almacenar y realizar un análisis de los datos? Yo diría que en este caso ir a RDBMS es más lento. por cierto, no estoy sesgado hacia uno u otro.

2 votos

En el mundo de las finanzas, la mayoría de los cuants utilizan el almacenamiento orientado a columnas. Esto es especialmente cierto para los datos de series temporales, como el historial de ticks.

0 votos

@chrisaycock: en base a mi experiencia en TI de Derivados, todos están en RDBMS convencional. O Excel.

5voto

Ted Percival Puntos 3712

Cassandra es la opción obvia. Con MongoDB o cualquier RDBMS, mantendrá todos los ticks en una tabla (colección en el lenguaje de Mongo) e indexará por ticker. Esto significa que cuando quieras recuperar los datos de un ticker, los datos no estarán almacenados de forma contigua, y tendrás un masiva uso de índices y lecturas aleatorias. Incluso con los SSDs esto es lento. Para 500k ticks en Python desde Mongo me lleva más de 200 segundos en un solo I7 equipado con 16GB SSD. Sí se puede hacer un cluster, pero el punto de partida es pobre. ¿Imagina si necesitas traer 100 tickers?

Con Cassandra, todo se almacena en familias de columnas. Grandes dictos de dictos, básicamente. Consigues un almacenamiento totalmente secuencial de cada ticker, lo que significa que puedes volver a los HDs giratorios si quieres, pero con los SSDs grita positivamente la recuperación de datos. Estoy hablando de menos de 15 segundos para lo mismo que lo anterior. Ni siquiera voy a entrar en la facilidad con la que añadir nodos a Cassandra acelera esto. El promedio de 15 segundos es en un un solo ordenador . Muchas de las "razones para Cassandra" en la web hablan de su fácil escalabilidad usando múltiples nodos, y es cierto que esto lo hará aún más rápido / seguro, pero para mí este almacenamiento secuencial en columnas es lo que lo hace perfecto para las finanzas. Comienza orientado a las series temporales, mientras que Mongo no lo hace. El diseño le da al menos un orden de magnitud fuera de la caja antes de empezar a jugar con los clusters y / o la optimización. Si sabes Python, la analogía es sencilla. Cassandra es a Mongo (o un RDBMS) como Numpy es a las listas de Python. Punteros encadenados a puntos de datos dispersos en lugar de un gran trozo de datos contiguos.

Lo contrario, por supuesto, también es cierto. Si su caso de uso es un solo (pocos) registro(s) entre millones (típico en aplicaciones web), Mongo hace esto mucho más fácil que Cassandra. Cassandra es para big data, mientras que Mongo/RDBMS se adapta mejor a las cargas de trabajo del tipo web-userID. Parodójicamente, mientras que SQL, por ejemplo, se considera bastante rígido en comparación con "NoSQL", en mi opinión, Cassandra es incluso más rígido que las bases de datos relacionales. Pero vaya que se obtiene rendimiento si se aceptan sus estructuras.

BTW Hbase es otra opción columnar pero no tengo experiencia con ella. El mensaje principal es, olvídate de RDBMS o NoSQL "tradicional". Estas son malas opciones para múltiples series de tiempo. Lo que quieres es una base de datos de columnas, de la cual Cassandra es un excelente ejemplo.

0 votos

Estoy un poco confundido al llamar a Cassandra una "base de datos de columnas" mientras que también dices que es básicamente un "dict de dicts". Usando las analogías de Python, ¿no sería una "base de datos de columnas" adecuada para almacenar datos más o menos como lo hace un DataFrame de pandas?

0 votos

@Gustavo Bezerra: no, porque las filas de Cassanda no tienen por qué tener todas la misma longitud. Así que es más como un dict de dicts en la analogía de modelado de datos, y a diferencia de un array de numpy (que es lo que Pandas está por debajo) que siempre debe ser rectangular. Sin embargo, sigue almacenando cada fila de forma contigua - este es el punto esencial aquí, para que las consultas de rango sean ultra rápidas.

0 votos

¿Hay algún lugar en el que se puedan comprar los datos de las garrapatas?

4voto

kjv Puntos 2513

Mongodb parece ser una buena solución de código abierto para almacenar el histórico tic-tac. Lo estoy usando aquí y parece ser muy simple de usar.

1 votos

¿Qué hay de la parte analítica de las cosas? ¿Algún éxito o contratiempo del que pueda informar?

0 votos

Que puedo decir ! esta bien desarrollado usando boost y un enfoque moderno de c++ y si ! Es escalable y de alto rendimiento. Incluso el protocolo de transporte es rápido y está basado en JSON por lo que el mantenimiento de la base de datos es bastante simple. Y yo no estoy haciendo mercancía pero los chicos hicieron un buen trabajo. Y aún mejor se puede utilizar para implementar el patrón publish-subscribe +.+

4 votos

¿Soy el único cuyo instinto es que almacenar los datos de las garrapatas en una base de datos de documentos es una locura? ¿Qué tan bien comprime MongoDB los datos de ticks? ¿Hay alguna ordenación implícita en la que se pueda confiar para las consultas de series temporales?

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X