sqlite java性能,具有非常大的数据库文件的sqlite的性能特征是什么? [关闭]

所以我用sqlite对非常大的文件进行了一些测试,得出了一些结论(至少对我的具体应用来说) .

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

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

Single Table

我试图只用一个表将多行插入sqlite文件 . 当文件大约7GB(抱歉我不能具体说明行数)时,插入时间太长了 . 我估计我插入所有数据的测试需要24小时左右,但即使在48小时后也没有完成 .

这使我得出结论,单个非常大的sqlite表将存在插入问题,并且可能还有其他操作 .

我想这并不奇怪,因为表变大,插入和更新所有索引需要更长时间 .

Multiple Tables

然后我试着通过分割数据时间超过几张 table ,每天一张 table . 原始1表的数据被分成约700个表 .

这个设置没有插入问题,随着时间的推移,它不需要更长的时间,因为每天都会创建一个新表 .

Vacuum Issues

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

但是,正如documentation所指出的那样,数据库的完整副本是做真空的,需要很长时间才能完成 . 因此,数据库越小,此操作完成的速度就越快 .

Conclusions

对于我的特定应用程序,我可能会将数据分成几个db文件,每天一个,以获得最佳的真空性能和插入/删除速度 .

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

我可能不得不监控每个文件的表大小,以查看速度何时成为问题 .

它's too bad that there doesn'似乎是除了auto vacuum之外的增量真空方法 . 我可以't use it because my goal for vacuum is to defragment the file (file space isn'一个大问题,这是自动真空无法做到的 . 事实上,文档说它可能会使碎片变得更糟,所以我不得不求助于定期对文件进行全真空 .

SQLite 作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的很好。这篇文章介绍嵌入式数据库产品SQLite 的技术特点,并着重讨论研究与Java语言之间的接口,并以实例说明如何使用JAVA 开发基于SQLite 的应用程序。 正文: 通常我们采用各种数据库产品来实现对数据的存储、检索等功能,例如,Oracle,SQL Server, MySQL 等等。这些产品除提供基本的查询,删除,添加等功能外,也提供了很多高级特性,如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用,仅仅利用到了这些数据库产品的基本特性而已。而且在一些小型应用上,或者某些特殊场合的应用,比如桌面程序,这些数据库产品就明显有一些臃肿。在这些情况下,嵌入式数据库的优势就特别明显了。 嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API 去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式, 而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。 下面介绍的是开放源代码的嵌入式数据库SQLite。同时侧重研究如何应用Java 连接SQLite数据库,并开发基于SQLite 的应用程序。 ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值