15 votos

La mejor manera de almacenar cada hora/diario de las opciones de datos para fines de investigación

Hay bastante un par de discusiones aquí acerca del almacenamiento, pero no puedo encontrar lo que estoy buscando.

Estoy en la necesidad de diseñar una base de datos para almacenar (en su mayoría) de datos de la opción (huelgas, las primas de bid / ask, etc.). El problema que yo veo con RDBMS es que dado el gran número de huelgas tablas va a ser enormemente largo y, por lo tanto, resultado de un lento proceso. Aunque soy reacio a usar MongoDB o similar NoSQL solución, por ahora parece una muy buena alternativa (rápida, flexible, escalable).

  1. No hay necesidad de garrapatas de datos, será por hora y cierre diario de precios y cualquier otro tipo de parámetros que me gustaría añadir. Así que, sin necesidad de que se actualiza con frecuencia y velocidad de escritura no es importante.

  2. El principal requisito de desempeño está en utilizarlo para la minería de datos, estadísticas y de investigación, por lo que debe ser lo más rápido posible (y preferiblemente fácil) para sacar y agregar los datos de la misma. I. e., pensar de 10 años backtest que realiza ~100 transacciones semanales sobre diversos tipos de opciones o el cálculo de la volatilidad de intercambio durante algún período de tiempo prolongado. Así que cuanto más rápido es mejor.

  3. Hay un montón de datos históricos existentes, que serán transferidos a la base de datos, y será actualizado sobre una base diaria. No estoy seguro de cuánta memoria es exactamente lo que va a tomar, pero AFAIK la memoria no debe ser una restricción en absoluto.

  4. El apoyo popular de los lenguajes de programación y paquetes (C++, Java, Python, R) es muy preferible, pero no sería un interruptor.

Alguna sugerencia?

7voto

Timothy Carter Puntos 7079

Recomiendo a optimizar su implementación SQL en lugar de ir en busca de NoSQL, y lanzar hardware más costoso en el problema.

  1. Siempre punto de referencia en primer lugar. La razón por la que digo esto es que he visto MS SQL Server escala perfectamente bien para las opciones de datos de la magnitud que describes y "gran número de huelgas tablas será enormemente largo y, por lo tanto, el resultado en el lento procesamiento" no es una buena manera de juzgar.
  2. Redis es una muy mala idea para lo que estamos tratando de lograr. Por lo que puedo ver en el otro post, todo lo que tiene a su favor es que tiene R enlaces. Pero, francamente, casi todo lo que tiene multi-lenguaje de enlaces de hoy en día que es una forma inactiva en el punto de venta. Redis está diseñado para el comercio fuera de la consistencia y durabilidad de la velocidad. Mongo es similar (no es que no hay durabilidad, tendría que buscar Vals para recuperar y esto es bastante incompleto, pero eso es otro tema). Para poner esto en perspectiva:

    • Este trade-off se convierte en un mal necesario si usted está haciendo FB social ad métricas, registro de 30 millones de eventos por segundo en tiempo real. Pero si eres de registro de 2000 opciones * 50 registros por hora = 28 registros por segundo en lote, usted no necesita los trade-offs. Los riesgos son asimétricas: Si usted pierde sus datos de mercado, tendría que buscar un proveedor, pagar, y pasar el tiempo de ajuste de la reposición a su propio formato de almacenamiento. Si FB echa de menos un par de clics para las estadísticas de usuarios para entregar los requisitos de latencia, todo lo que sigue, se mueve a lo largo sin problemas. Así que usted tiene que trabajar alrededor de esto, configurar la persistencia de los servidores. La persistencia de los servidores separados (por ejemplo, la pondrías en NY2/NY4) en caso de una falla localizada. Se resume a ser mucho más costoso que el reflejo de sus discos.

    • Usted necesita tener una gran cantidad de memoria. Esto es menos un problema si usted es anfitrión de todo en la nube (pero esto viene con otros temas, y lo más probable es que no). 16 núcleos y 244 GB de memoria, una Redis esclavo por núcleo y a 15 GB de memoria. Ver: https://moot.it/blog/technology/redis-as-primary-datastore-wtf.html

    • NOTA: Los problemas mencionados anteriormente son diferentes de la gestión de las preocupaciones que ver NoSQL ser limitado en las empresas establecidas, estos últimos generalmente son equivocadas.

6voto

Markus Olsson Puntos 12651

Un columnar o base de datos No-SQL solución puede ser su mejor opción.

Depende del sistema operativo de destino, lo que a su latencia y el rendimiento son los requisitos y si usted mira a persistir todos los datos o no y, finalmente, cómo el gran tamaño de sus datos, se espera que sea. Obviamente, si sólo se ven a la tienda de horas/días de datos, a continuación, incluso una base de datos que consta de un año de todas las opciones de datos de la SPX500 activos subyacentes pueden caber en la memoria y si ese es el caso, usted definitivamente debe mirar RedisDB. Puede conservar los datos de la instantánea, pero en general los carga en la memoria.

Si el tamaño de los datos es una limitación para el montaje en la memoria, a continuación, otra solución como RavenDB (bien escrito .Biblioteca de red), o de otros non-.net la solución, dependiendo de los requisitos, tales como Mongo o el Sofá db puede adaptarse a una gran cantidad mejor. Por favor, añadir más requisitos y estoy feliz de editar mi post y agregar información, dado que creo que puedo aportar valor.

Editar:

De acuerdo a la información actualizada recomiendo a mirar más de cerca a Redis : No sólo hay bibliotecas para casi cualquier lenguaje de programación y OS imaginables (yo lo uso en mi .Net framework con la BookSleeve API). Usted también consigue un gran apoyo en R. Se puede volcar, literalmente, de la serie de tiempo con millones de elementos, tienen que permanecer en la memoria (también puede persistir) pero puede increíblemente rápido acceso a los datos de R. yo no sé una manera más rápida de acceder a datos de series de tiempo de R para ser honesto, más la indexación de los paquetes le dará una gran descriptor de acceso de la biblioteca. Si usted busca algo rápido, eficiente y buscamos el perfil ideas o datos, que alude a R de uso, a continuación, RedisDB Es lo que quieres. Por supuesto, esto no debería ser una solución de datos grandes requisitos, pero usted mencionó específicamente a lidiar con cada hora/diario de datos y para ese propósito, incluso una máquina con 16 gb de memoria del procesador ejecutar código de 64 bits será suficiente así, ciertas sugerencias que redis obligará a invertir en indignante hardware son injustificadas. Si usted mira fuertemente el perfil de los datos en R o python u otros idiomas y desea un rápido acceso, a continuación, redis es tu solución. Si eres más información sobre el almacenamiento a largo plazo y están dispuestos a aceptar las latencias de acceso a disco entonces no hay necesidad para una memoria caché basada en db y en lugar de buscar en el documento u otra clave/valor o columnar almacenes de datos.

Otras soluciones pueden funcionar también, pero si usted mira a resolver todos sus requerimientos, que no te obligan a sentarse durante días sólo de pensar en esquemas y las relaciones de la tabla sólo con el fin de obtener un SQL solución que va a continuación, os recomiendo mirar en la dirección de Redis o enfoques similares y no SQL. Columnas de bases de datos también pueden trabajar a pesar de que las soluciones de código abierto son más bien entorpecen el trabajo y yo diría que no muy bien pensado, en términos de facilidad de uso y extensibilidad. (Ejemplo: HDM5, a pesar de su más de un formato de archivo de una base de datos, pero hasta el 2013, los chicos aún no han logrado activar dinámicas de tamaño de los datos en hdf5 archivos. Usted puede eliminar el contenido, sino el espacio asignado no es devuelto. Lo que la gente me diga acerca de la NASA o de otras organizaciones de usarlo, me instalé la historia en la forma en que esas son las grandes organizaciones con fuerte participación del gobierno en los que la financiación y los recursos en muchas áreas que no son de prioridad puede llegar a ser extremadamente escasos. No creo que cualquier organización grande iba a funcionar en la década de 1990 tipo de bases de datos si tenían suficientes fondos para trabajar en el desarrollo de mejores. Esa es la razón por ciertas organizaciones de usar, pero no me parece un punto que habla en favor del uso de la base de datos Berkeley o HDF5; he usado ambos y que les sea muy limitado en muchos aspectos, además de que el rendimiento no ser que gran.

Resumen: selección de su arma de elección, en columnas de bases de datos podría ser la solución si usted está dispuesto a trabajar en torno a veces extraño las limitaciones de la api de núcleo o estructura de datos, pero son para tratar con datos de series de tiempo. O eligió no SQL soluciones, ya sea de una memoria/memoria caché basada en soluciones o puramente persistió queridos. Pero yo le aconsejo que no vaya con SQL. Generalmente es un regalo de un principiante o de la persona joven cuando se le preguntó la base de datos que se utilizan para el tiempo de almacenamiento de la serie y viene la respuesta que el uso de MySQL, MySQL o SQL incrustado soluciones. Aquellos que simplemente no están diseñados para manejar datos de series de tiempo también.

3voto

akmad Puntos 7059

Usted necesita ingresar algunos datos, y luego utilizarlo para su análisis. Me atrevería a sugerir que acaba de añadir los valores a un conjunto de archivos? Usted puede cargar los datos después de tus carreras, y la memoria caché de todo lo necesario con frecuencia. Francamente, la compra de un SSD y copiar los archivos a que antes de ejecutar el análisis debe resolver su problema, y no se había lastimado.

3voto

Zolomon Puntos 250

Echa un vistazo http://discretelogics.com/teafiles/. Se resuelve el gran huella en la memoria mediante el uso de los archivos asignados en memoria.

1voto

Ted Percival Puntos 3712

Para cualquier información que no es estrictamente tabular y invariables en el esquema, se debe descartar SQL soluciones. Opción de fijación de precios se ajusta a esa descripción en mi experiencia, porque de alta liquidez acciones, divisas, bonos, tendrán una mayor conjunto de las huelgas y los vencimientos de menor liquidez de los instrumentos. Así, en una base de datos relacional usted tendrá que tener columnas para las huelgas y los vencimientos, con torpe une a todas partes, mientras que en NoSQL como Mongo, usted puede tener un atomizado "documento" que tiene todos los datos asociados con una marca de tiempo, que es muy rápido a la consulta, y también es flexible para el meta-datos. Quien no ha encontrado la necesidad de meta datos, incluso en tiempo financiero de la serie? Usted será capaz de volver atrás y de forma sistemática añadir nuevas estructuras y subestructuras a sus datos sin estropear todo el esquema.

Mi propia experiencia con Mongo es muy positivo. Una vez que se han familiarizado a sí mismo con su JSON basado en la sintaxis de la consulta, es fácil y muy rápido en hardware económico. Es enormemente fácil a la instalación. Eso definitivamente no es el caso para las bases de datos relacionales en el hardware equivalente. Otra ventaja es que usted va a aprender JSON - una muy útil y ampliamente utilice el formato de datos que permite exportar "plana" de datos CSV de estilo, pero también puede hacer jerárquica de anidación que puede ser realmente útil, sin llegar a la exageración que es xml.

Si los extremos de la consistencia se lo que es necesario, a continuación, SQL es su apuesta. Cosas como: este salario DEBE estar vinculado a una EXISTENTE empleado que NO , en un año sabático. Este tipo de regla puede ser incrustado en la base de datos, que va a hacer cumplir la coherencia, a diferencia de la más flexible (y, por tanto, más peligroso) NoSQL productos donde estos tipos de regla debe ser realizado en el terminal. Pero cuando estamos hablando de atomizada de datos con dependencias no como un vol de la superficie, esta consistencia de ejecución es, probablemente, ni siquiera va a ser utilizado. El diseño de "ajuste" de SQL es una exageración y viene con cargas pesadas. Recordemos que SQL se ha diseñado para la lógica de negocio en los años 70.

No creo que los que dicen que Mongo o de otros NoSQL no es fiable cuando se trata de la seguridad de los datos. Lo que es falso. Existen todas las herramientas usuales para garantizar escribe un diario, servidores redundantes, todo lo que necesite para múltiples capas de seguridad, incluyendo la copia de seguridad incremental a la nube. Redis, por supuesto, podría ser problemático en ese sentido. Pero el establecido las bases de datos NoSQL son seguros y fiables, de hecho posiblemente más seguro, si usted no tiene un experto DB administrador que sabe cómo obtener un complejo sistema de SQL y ejecuta de nuevo en caso de error.

Finalmente, si su caso de uso es la única máquina, a continuación, considerar seriamente HDF5. Este se superan y se adapta mejor a una gran financieros de minería de datos de la aplicación de cualquiera de las tecnologías de base de datos. Se ha diseñado exactamente para lo que necesite (masivo rápido, flexible, consultas y esquemas) pero por supuesto que no es tan fuerte como para compartir.

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