Tenemos un modelo de objeto que se utiliza en tres aplicaciones. Dos programas recopilan datos, otros lo leen y generan informes. El sistema está muy desconectado, por lo que no podemos tener una sola base de datos con la que todos los programas hablen.¿Quiero un ORM?
En este momento, los programas solo usan una biblioteca común para rellenar un modelo de objetos y serializar/deserializar en el disco. Específicamente, estamos usando la serialización XML.
Hay un par de problemas con este modelo. 1) XML podría considerarse un desperdicio. Los archivos pueden ser grandes y difíciles de manejar. Honestamente, el tamaño del archivo no es una gran preocupación en este momento. 2) Mi mayor preocupación es la huella de memoria. El archivo completo se carga en un modelo de objetos, se opera y luego se guarda.
Espero haber transmitido mi preocupación, en algún momento nos encontraremos con problemas de memoria con esta aplicación durante el tiempo de ejecución. Se recopilarán suficientes datos en una sola "base de datos" (archivo xml) que no se pueden cargar en la memoria de una sola vez.
Lo que me gustaría tener, es el acceso a mi modelo de objetos respaldado por el almacenamiento de archivos en lugar de la memoria. Quiero que los cambios en el modelo de objetos sean mínimos. Cuando se accede a un objeto, proviene del disco y, cuando está configurado, se guarda (automáticamente, si es posible).
Hemos examinado NHibernate con SQLite, SQL Compact 4.0 y EF 4, y LINQ to XML (brevemente). También he usado db4o en el pasado para almacenar en caché los objetos en el disco, pero ese era un proyecto no relacionado.
Antes de bucear y dedicar tiempo a aprender uno de estos, me gustaría saber si mi idea tiene sentido. ¿Puedo tener un modelo de objetos que caché "mágicamente" en un medio de almacenamiento en lugar de simplemente hinchar la huella de mi memoria infinitamente? ¿Cuál es el camino más corto para hacer esto, incluso si no es el más elegante?
¿Hay otras tecnologías que podrían ayudarme? Archivos mapeados en memoria, linq-to-sql, Lazy (T) (solo para recuperar objetos de archivos cuando sea necesario).
Me doy cuenta de que esta es una pregunta abierta. Estoy buscando una respuesta de imagen completa y detalles si alguien tiene experiencia en el mundo real al hacer esto. Los enlaces serían útiles ...
Gracias.
¿Tiene problemas de memoria porque trabaja con dispositivos móviles? Lo pregunto porque veo sql-server-ce como una etiqueta. –
No móvil en este momento, mirando SQL Server Compact porque se puede incrustar en mi aplicación (como SQLite). Si vamos con EF, SQL Compact será considerado como el back-end DB. Las preocupaciones de memoria se deben al hecho de que es una aplicación de 32 bits, por lo que el límite de 2 GB en el proceso. – Nate
¿Es su aplicación una aplicación independiente? Parece que no quieres una base de datos centralizada. ¿Es la aplicación mulit-usuario? ¿Con qué frecuencia haces actualizaciones? ¿Cuánta información se realiza en contra de la aplicación? Estos son los tipos de preguntas que son importantes para hacer su elección. – Andrew