Necesito realizar operaciones cronológicamente en grandes series temporales implementadas como IList. Los datos finalmente se almacenan en una base de datos, pero no tendría sentido enviar decenas de millones de consultas a la base de datos.Implementación IList de archivo mapeado en memoria, para almacenar conjuntos de datos grandes "en la memoria"?
Actualmente, el IList en memoria desencadena una excepción OutOfMemory cuando intenta almacenar más de 8 millones de objetos (pequeños), aunque tendría que tratar con decenas de millones.
Después de algunas investigaciones, parece que la mejor manera de hacerlo sería almacenar datos en el disco y acceder a ellos a través de un contenedor IList.
Memory-mapped files (presentado en .NET 4.0) parece la interfaz correcta para usar, pero me pregunto cuál es la mejor manera de escribir una clase que debe implementar IList (para facilitar el acceso) y tratar internamente un archivo mapeado en memoria.
¡También tengo curiosidad por saber si conoce otras formas! Pensé, por ejemplo, en un contenedor IList utilizando datos de db4o (someone mentionned here usando un archivo mapeado en memoria como IoAdapterFile, aunque el uso de db4o probablemente agrega un costo de rendimiento frente a tratar directamente con el archivo mapeado en memoria).
Me he encontrado con this question pedido en 2009, pero no dio respuestas útiles o ideas serias.
son las operaciones que realiza de forma secuencial? ¿o estás operando con todos los datos a la vez? – Yahia
El acceso debe ser secuencial (iterar sobre la colección para realizar una actualización), y también necesito poder eliminar/eliminar objetos en el otro extremo. –
Una base de datos es la herramienta adecuada para este trabajo. Actualice los datos en lotes para evitar demasiadas llamadas a la base de datos. También podría estar interesado en el procesamiento de estilo map-reduce para acelerar un poco las cosas. – dtb