Escenario de datos de tick de acciones interesantes

Bien, este problema me ha estado rompiendo el cerebro todo el día.

El problema: actualmente estoy recibiendo datos de tick de stock a una velocidad extremadamente alta a través de multidifusión. Ya he analizado estos datos y los estoy recibiendo en el siguiente formulario.

-StockID: Int-64
-TimeStamp: Microsegundos de Epoch
-Precio: Int
-Cantidad: Int

Cientos de estos paquetes de datos se analizan cada segundo. Estoy tratando de reducir el cómputo en mi almacenamiento almacenando estos datos en diccionarios / tablas hash codificadas por stockID (clave == stockID) (valor == conjunto de elementos [marca de tiempo, precio, cantidad]).

También quiero que cada diccionario represente marcas de tiempo dentro de un intervalo de 5 minutos. Cuando las marcas de tiempo de los datos entrantes superan el intervalo de tiempo de 5 minutos, quiero que estos nuevos datos entren en un nuevo diccionario que represente el siguiente intervalo de tiempo. Además, se codificará una clave especial en la clave -1 que indica a qué intervalo de 5 minutos en particular por día pertenece este diccionario (por lo que si recibe algo a las 12:32 a.m., debería ingresar al diccionario que tiene el valor 7 en la clave -1 , ya que esto representa el intervalo de tiempo de 12:30 a.m. a 12:35 a.m. para ese día en particular). Una vez que pasa el tiempo, el dict que ha expirado puede enviarse al dataWrapper.

Ahora, es posible que se te ocurran algunas ideas ahora mismo. Pero aquí hay una gran restricción. Las marcas de tiempo que están llegando no necesariamente están aumentando estrictamente; sin embargo, si uno espera unos 10 segundos después de que haya finalizado un intervalo, puede ser seguro asumir que todos los datos que ingresan pertenecen al intervalo actual.

La razón por la que estoy haciendo todas estas cosas complicadas es para reducir la computación en el lado del almacenamiento de mi aplicación. Con la configuración anterior, mi hilo del lado de almacenamiento puede simplemente iterar sobre todas las claves, pares de valores dentro del diccionario y almacenarlos en la misma ubicación en el sistema de almacenamiento sin tener que volver a abrir archivos, reasignar grupos o cambiar directorios.

¡Buena suerte! Apreciaré mucho CUALQUIER respuesta por cierto. :)

Preferiría que me pudieras enviar algo en Python (en eso estoy haciendo el proyecto), pero puedo entender perfectamente Java, C ++, Ruby o PHP.

Resumen

Estoy tratando de poner datos de stock en diccionarios que representan intervalos de 5 minutos para cada diccionario. La marca de tiempo que viene con los datos determina en qué diccionario en particular debe colocarse. Esto podría ser relativamente fácil, excepto que las marcas de tiempo no aumentan estrictamente a medida que ingresan, por lo que los diccionarios no pueden enviarse al contenedor de datos inmediatamente una vez que hayan transcurrido 5 minutos. las marcas de tiempo, ya que no se garantiza que no reciba más datos en 10 segundos, después de esto está bien enviarlo al contenedor.

Solo quiero cualquier tipo de ideas, algoritmos o implementaciones parciales que puedan ayudarme con la programación de esto. ¿Cómo podemos cambiar el uso actual de los diccionarios dentro de las marcas de tiempo (para los datos) y el tiempo real (el búfer de 10 segundos)?

Clarificación Editar

La ventana de 5 minutos debe estar impulsada por datos (basada en marcas de tiempo), sin embargo, el tiempo de espera de 10 segundos parece ser la hora del reloj.

Respuesta 1

Estoy ejecutando mi proyecto en NetBeans pero no puedo ejecutar el archivo .jar con éxito. 1) Estaba desarrollando mi proyecto usando la biblioteca de clases Java, y luego descubrí que hay algún problema en manifiesto ...

Estoy luchando tratando de googlear este tema. No debo estar usando los términos de búsqueda correctos. Tengo un oyente de ubicación, en Android, y generalmente anido al oyente dentro de la clase que lo estoy usando ...

¿Cuál es la principal diferencia entre el método windowActivated (implementado desde WindowListener) y windowGainedFocus (implementado desde WindowFocusListener)? La documentación de Java dice: ...

Tengo una cuenta regresiva que cuenta hasta una fecha específica. Cada marca (intervalo de 1 segundo) actualiza un cuadro de texto con los días / horas / minutos restantes hasta el evento. Mi problema es que los minutos (no sé ...