我从一位离开公司的同事那里继承了一个项目。在检查他的代码时,我感到困惑。在他从服务器收到大量数据后,他将这些数据保存到客户端的数据库中,然后他继续在db上处理这些数据。数据在应用程序开始时收到一次。我无法理解的是,为什么他不只是使用内存中的数据而是需要将其存储在db上?
在应用程序内部有许多内存密集型操作,比如使用Quartz查看大型pdf文件等等,但不是sqlite的大小也算作应用程序的内存使用量?我的意思是你认为这可能是什么优势?
答案 0 :(得分:6)
SQLite在加载自身(~250-400Kb)时占用空间非常小。当SQLite使用磁盘数据库时,由于它没有内存开销,它甚至不测量文件的大小(默认情况下,数据库可以在其表中保存大约1Tb的数据)。正如你所说,它是持久的数据存储。
如果是内存数据库存储,您的应用程序将消耗
memory = database file size + small overhead
对于你可以在内存数据库中执行的查询,你会得到一些限制(我不记得我在街上的时间,但你不能使用事务和真空)
将SQLite与磁盘数据库结合使用,与尝试使用文件存储数据集相比,您将获得更快的数据访问速度和更小的占用空间
答案 1 :(得分:4)
使用SQLite,您可以快速轻松地查询特定数据,而无需将整个数据集加载到内存中并对其进行迭代。
答案 2 :(得分:1)
基本上,如果将它保留在本地文件系统上并按需将其加载到内存中,那么与始终将所有数据加载到内存中相比,这将始终具有更低(或相等)的内存占用。如果你把所有内容保存在文件系统上,这将节省内存,因为你不必一次加载所有内容(进入内存),即使加载某些东西,它也会快速关闭。这样做的缺点是访问时间较慢,转化为在非常重的负载下降低的实际性能。
另一方面,如果将所有内容保存到内存中,它将具有更高的内存占用,并通过更快的数据库访问时间进行补偿。在非常高的负载下,您将获得更好的实际性能(假设您可以容纳内存使用情况),但内存占用更多。
您的选择应基于您所操作系统的需求和规格。如果您不确定,请尝试将所有内容加载到内存中,并查看在负载过重期间服务器上是否存在问题。如果它不起作用,请返回硬盘驱动器。