Cómo decidir entre la database SQLite y el uso en memory

Henetworkingé un proyecto de un colega que dejó la empresa. Al examinar su código, me confundí algo. Después de que recibe una gran cantidad de datos del server, guarda estos datos en una database en el cliente y luego pasa a trabajar con estos datos en db. Los datos se reciben una vez al comienzo de la aplicación. Lo que no pude entender es, ¿por qué no usa los datos de la memory sino que los almacena en db?

Dentro de la aplicación hay muchas operaciones intensivas de memory como ver files PDF grandes usando Quartz y, por lo tanto, pero ¿no es el tamaño del sqlite también contado como el uso de memory de la aplicación? Me refiero a qué crees que podría ser la ventaja de esto?

SQLite tiene una huella muy pequeña cuando se carga (~ 250-400Kb). Cuando SQLite funciona con la database en el disco, no hay sobrecarga de memory debido a ello, ni siquiera mide el tamaño del file (la database pnetworkingeterminada puede contener aproximadamente 1Tb de datos en sus tablas). Y como dijiste, es un almacenamiento de datos persistente.

En caso de almacenar en la database en memory, su aplicación se consumirá

memory = database file size + small overhead 

También obtendré algunas limitaciones con las consultas que puede realizar en la database en memory (no puedo recordar por el time en la calle, pero no puede usar transactions y vacío)

Use SQLite con la database en el disco y obtendrá un acceso de datos más rápido y un espacio networkingucido que tratar de usar files para almacenar un set de datos

Con SQLite puede consultar rápida y fácilmente datos específicos sin tener que cargar todo el set de datos en la memory e iterar sobre él.

Básicamente, si lo mantiene en el sistema de files local y lo carga en la memory a demanda, esto siempre tendrá una huella de memory menor (o igual) que si TODOS los datos se cargan en la memory en todo momento. Si guarda todo en el sistema de files, esto ahorrará memory porque no tiene que tener todo cargado (en la memory) a la vez, e incluso cuando se carga algo, se cierra rápidamente. La desventaja de esto son los times de acceso más lentos, lo que se traduce en una disminución del performance real bajo cargas muy pesadas.

Por otro lado, si mantiene todo cargado en la memory, tendrá una huella de memory mucho más alta, compensada por un time de acceso a la database mucho más rápido. Tendrá un mejor desempeño en el mundo real con cargas muy altas (suponiendo que pueda acomodar el uso de la memory), pero con una huella de memory mucho más alta.

Su elección debe basarse en las necesidades y especificaciones del sistema en el que está operando. Si no está seguro, intente cargar todo en la memory y vea si tiene problemas en su server durante períodos de gran carga. Si no funciona, regrese al disco duro.