我正在运行一个Python脚本,每分钟都会将数据插入到SQLite数据库中;数据库中有数百万行。
一旦数据库增长到某个大小,它是否有可能变得腐败(或效率低下),以至于无法插入更多数据?
例如,当我今天FTP到我的远程服务器时,我注意到数据库的大小为590,052,352字节。但是,当我几分钟后刷新时,数据库的大小没有增加(应该有)。
当查看数据库的“最后修改”时间戳时,我意识到没有插入超过40小时的数据。因此,我查看了错误日志,但没有任何内容表明存在任何问题。
然后我将数据库从data.db重命名为data-1521564403.db,并创建了一个名为data.db的全新数据库。执行此操作后,python脚本可以再次将数据插入此新数据库,而不会出现任何问题。
上周我注意到了类似的问题。在那个例子中,数据库达到了632 MB的大小,之后它开始向错误日志添加错误,说重复的数据被插入到具有UNIQUE约束的字段中。但是,我知道这是不可能的,因为python脚本确保检查没有插入重复数据。所以我遵循了重命名数据库然后创建新数据库的相同过程,问题得到解决,数据可以再次插入。
所以我的问题是,SQLite数据库在达到一定大小或包含一定数量的行后是否会停止工作(或变得效率低下)?
谢谢!
答案 0 :(得分:0)
reasons due to which SQLite database moves to non-accessible state:
文件覆盖操作 - >可以覆盖SQLite文件,因为这些文件是普通的磁盘文件,没有任何方法可以保护数据库免受此类操作的侵害。
文件锁定问题:为了协调并发进程,SQLite使用锁定数据库工具,其背后的原因是避免了两个不同进程对探索数据损坏的单个数据库所做的更改。
文件的多个链接:如果您已将SQLite数据库链接到具有网络连接的多个链接,那么它将再次显示损坏情况。 - 数据库同步失败:如果SQLite Server的sync命令扮演I / O障碍而不是真正的同步角色,那么任何失败都可能会让你觉得有进一步的回滚动作,你可以说它违反了ACID属性。在这种情况下,数据库将处于阻力模式。
闪存和磁盘驱动器故障:对于SQLite用户来说,硬盘和磁盘驱动器内容的变化可能非常烦人。
由于SQLite文件和数据库转移到无法访问的模式,因此内存损坏,操作系统中的其他问题以及SQLite错误也被列入关键原因。