La mejor manera de almacenar gran cantidad de datos de stock en la memoria (variable)

StackOverflow https://stackoverflow.com/questions/9475179

  •  13-11-2019
  •  | 
  •  

Pregunta

Estoy tratando de almacenar una cantidad significativa de mercado de valores de cotización de los datos en una variable para consultas en la memoria.Necesito ser capaz de encontrar rápidamente los más recientes datos de mercado para un ID de stock, y la consulta específica de las longitudes de la historia para una acción específica.

Por ejemplo, yo podría recibir datos de ID de stock 5342 (siempre numérico) cada pocos segundos...mi idea original es construir una matriz de SortedDictionary, con el SortedDictionary clave es la DateTime de la cita, y su valor de ser mi costumbre estructura de los datos de mercado.A continuación, el exterior de la matriz sería de los IDs de stock...por lo que yo podría llamar:

RecentPrice = PriceData[StockID].Values.Last();

O podría recorrer hacia atrás a través de que acciones SortedDictionary hasta que me golpeó una clave mayor que el intervalo de tiempo que estoy buscando.

Sin embargo, me siento como tiene que ser mejor (más eficiente) método.Alguna idea?

Editar: En lugar de una matriz de SortedDictionaries...un Diccionario de SortedDictionaries podría ser mejor.Por ejemplo:

public static Dictionary<int, SortedDictionary<DateTime, StockData>> PriceData = 
    new Dictionary<int, SortedDictionary<DateTime, StockData>>();

entonces:

RecentPrice = PriceData[StockID].Values.Last();

Gracias!

¿Fue útil?

Solución

Diccionarios, y tablas hash en general, son buenas para coincidencias exactas.Pero cuando quiera "la primera fecha / hora no anterior a x", una lista ordenada se desempeñará mejor, porque la búsqueda es una búsqueda binaria.Especialmente, ya que solo usted solo está anexando los datos, y no lo inserta.

Otros consejos

Si su StockID los valores son contiguas, y empezar en cero, la matriz es suficiente.En el mundo real, me imagino que probablemente no está, por lo que un diccionario de diccionarios es bueno.Los he usado con frecuencia para este tipo de problema.

¿Has pensado en usar una pila en lugar de un clasificado?Algunos especie de implementación personalizada podrían funcionar bien si sus datos siempre se insertan en el orden correcto.Tal vez una lista vinculada.

Si sus datos vienen secuencialmente, ¿por qué no lo almacenar simplemente en una matriz?De esa manera, puede usar una búsqueda binaria para converger rápidamente en el rango de fechas que desee y su operación de inserción también es muy rápida.Sin embargo, pierde un poco de memoria ...

Si puede asegurarse de que los nuevos datos de cosquillas sean en orden temporal, la lista de clasificación es una mejor opción.Consume menos memoria y más rápido para la inserción y eliminación de datos ordenados.

También si necesita una variedad de consultas de los datos.Una base de datos en memoria es una mejor opción.Utilizo SQLLite para hacer la función similar en uno de mis proyectos y maneja diferentes requisitos muy bien porque puedo usar SQL.

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