sqlite具有非常大的数据库文件的性能特征是什么?

前端之家收集整理的这篇文章主要介绍了sqlite具有非常大的数据库文件的性能特征是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道sqlite不能很好地与极大的数据库文件,即使他们是支持的(以前是在sqlite网站上的注释说,如果你需要文件大小高于1GB,你可能要考虑使用企业rdbms。找不到了,可能与旧版本的sqlite相关)。

然而,为了我的目的,我想知道在我考虑其他解决方案之前它是多么糟糕。

我在谈论sqlite数据文件在多GB的范围,从2GB起。
任何人都有这方面的经验?任何提示/想法?

所以我做了一些测试与sqlite非常大的文件,并得出一些结论(至少对我的具体应用)。

测试涉及具有单个表或多个表的单个sqlite文件。每个表有大约8列,几乎所有的整数,和4个索引。

想法是插入足够的数据,直到sqlite文件大约50GB。

单表

我试图插入多个行到一个只有一个表的sqlite文件。当文件是大约7GB(对不起,我不能具体的行计数)插入花费太长时间。我估计我的插入我的所有数据的测试将需要24小时左右,但即使在48小时后也没有完成。

这使我得出结论,单个,非常大的sqlite表将有插入问题,以及可能的其他操作。

我猜这不奇怪,随着表变大,插入和更新所有的索引需要更长的时间。

多个表

然后我尝试按时间分割数据在几个表,每天一个表。原始1表的数据被分割为〜700表。

这个设置没有插入问题,它不需要更长的时间进展,因为一个新的表创建每一天。

真空问题

正如i_like_caffeine指出的,VACUUM命令是一个问题,sqlite文件越大。随着更多的插入/删除完成,磁盘上文件的碎片将变得更糟,所以目标是定期VACUUM优化文件和恢复文件空间。

然而,正如documentation所指出的,数据库的完整副本是做一个真空,需要很长时间才能完成。所以,数据库越小,这个操作就越快完成。

结论

对于我的具体应用,我可能会拆分出几个数据库文件,每天一个,以获得最好的真空性能和插入/删除速度。

这使查询复杂化,但对我来说,这是一个值得折衷的能够索引这么多的数据。另一个优点是,我可以删除整个数据库文件删除一天的数据(我的应用程序的常见操作)。

我可能需要监视每个文件的表大小以及看到速度会成为一个问题。

这太糟糕了,似乎没有一个增量真空方法除了auto vacuum.我不能使用它,因为我的真空的目标是碎片整理文件(文件空间不是一个大事情),自动真空不做。事实上,文档声明它可能使碎片更糟,所以我不得不诉诸于定期对文件完全真空。

原文链接:https://www.f2er.com/sqlite/198526.html

猜你在找的Sqlite相关文章