如何决定SQLite数据库与内存中的使用情况
我从一个离开公司的同事那里inheritance了一个项目。 在检查他的代码的时候,我被某些东西弄糊涂了。 在从服务器收到大量数据后,他将这些数据保存到客户端的数据库中,然后继续在db上使用这些数据。 数据在应用程序开始时被接收一次。 我无法理解的是,为什么他不只是使用内存中的数据,而是需要将其存储在数据库?
在应用程序内部有许多内存密集型的操作,比如使用Quartz查看大的pdf文件等,但是不是sqlite的大小也算作应用程序的内存使用量? 我的意思是你认为这样做的好处是什么?
加载本身时(〜250-400Kb),SQLite的占用空间非常小。 当SQLite使用磁盘数据库时,没有内存开销,因为它甚至没有文件大小(默认数据库可以容纳大约1TB的数据)。 正如你所说,这是持久的数据存储。
在内存数据库存储的情况下,你的应用程序将消耗
memory = database file size + small overhead
你也可以在内存数据库上执行一些查询,以获得一些限制(我不记得在大街上的时间,但你不能使用交易和真空)
使用SQLite和磁盘上的数据库,你将获得更快的数据访问和更小的脚印比尝试使用文件来存储数据集
使用SQLite,您可以快速轻松地查询特定数据,而无需将整个数据集加载到内存中并对其进行迭代。
基本上,如果将它保存在本地文件系统上,并按需将其加载到内存中,则与始终将所有数据加载到内存中的情况相比,内存总占用空间将减less(或相等)。 如果你把所有的东西都放在文件系统上,这样可以节省内存,因为你不必一下子把所有东西都加载到内存中,即使加载了东西,它也能快速closures。 其缺点是访问时间较慢,这意味着在非常重的负载下实际性能下降。
另一方面,如果将所有内容都加载到内存中,将会有更高的内存占用量,并由更快的数据库访问时间进行补偿。 在非常高的负载情况下(假设您可以适应内存使用情况),您将获得更好的真实世界性能,但会占用更多的内存空间。
您的select应基于您所使用系统的需求和规格。 如果您不确定,请尝试将所有内容加载到内存中,并在重负载期间查看您的服务器是否有问题。 如果不工作,请返回到硬盘驱动器。