最近在测试项目是否可以采用SQLite数据库来做DB,昨天跑了一晚上程序,向单表
写入了2075981(两百万)条数据,总占用空间2,147,483,648byte(2G),然后就不能插入数据。
这个没什么参考价值
我使用的是win64,文件系统是NTFS,理论上最大支持2T的单文件,所以应该不是我的文件系统的问题。然后就只有SQLite本身的问题了,它可能对单库或者单表做了什么限制,于是查阅文档:
对每页,单表行数,单表,单库的限制如下:
可以看到单表单库的最大大小远远不止2个G,所以不知道问题出在哪儿,请各位大神指教 ~<_>~
最新找到的异常如下:
另外有朋友提到了SQLite文件损坏的问题,我执行了命令:
PRAGMA integrity_check;
显示结果完好:
错误信息是什么?另外不建议在关键位置或者是数据量较大的情况下使用sqlite,哪天文件损坏了欲哭无泪
错误信息如下:database disk image is malformed
@小白一只726: 恭喜贺喜,在下觉得这个错误是因为sqlite文件已经损坏了。不过有办法修复,你去查查官网,看执行啥命令个。有的sqlite工具有修复的功能。我说了,这玩意很坑,除了移动端,最好不要用。
@小白一只726: https://stackoverflow.com/questions/22623865/sqlite-database-disk-image-is-malformed。用sqlite你就等着入坑吧,建议使用mysql等成熟稳定的数据库。
@会长: 好的,我研究一下如何修复sqlite文件。
@会长: 我们项目是使用的Oracle,现在要临时存一些数据,可以理解为缓存数据。同时项目占用的内存被限制不能超过某个阈值,如果使用mysql或者是redis的话,要单独启动进程,占用的内存一下就上去了。
@小白一只726: 我看我电脑上启动的mysql内存还没到4m呢,在不执行sql的时候。与其这样,还不如升级一下硬件
@会长: 我的需求是:一个线程一直往数据库写,一秒50条左右;另外一个线程每隔两个小时检测数据库数据量是否超过100万,如果超过100万会清除部分数据,让数据库数据维持在100万;同时该数据库每几秒就会被甲方的程序调用查询数据;最后我们的程序是部署到甲方的服务器上,甲方的服务器对我们的程序占用的内存和CPU资源有严格的限制,如果因为我们的程序导致out of memory让他服务器上的其他程序崩了的话,我们就哦豁了~<_>~。
一看就知道你用的是老版本, 不是最新的, 你下载一个最新的来用, 老版本就是有限制的, 你看一下你的版本号就知道
Manifest-Version: 1.0
Created-By: 1.5.0_14 (Sun Microsystems Inc.)
这个版本算老吗?
@小白一只726:
2.74以前都是2G, 要3以后的版本才支持2TB, 1开始的版本, 比老爷还老
请问博主,您的问题解决了吗?能分享下方法吗
最后没有解决database disk image is malformed这个问题,我升级了SQLite的Java驱动,repaire了db文件都没有解决。
– 小白一只726 5年前项目还是采用的SQLite来存数据,因为我们目前的业务是到100万的时候会清除数据,只要DB的大小不超过2G,还是可以用的。