SQLite数据库达到一定大小后是否容易损坏?

SQLite数据库达到一定大小后是否容易损坏?,sqlite,Sqlite,我正在运行一个Python脚本,每分钟将数据插入SQLite数据库;数据库中有数百万行 数据库一旦增长到一定大小,是否可能会损坏(或效率低下),导致无法插入更多数据 例如,当我今天用FTP发送到远程服务器时,我注意到数据库的大小是590052352字节。然而,当我几分钟后刷新时,数据库的大小并没有增长(它本应如此) 当查看数据库的“上次修改”时间戳时,我意识到40多小时没有插入任何数据。因此,我查看了错误日志,但其中没有任何问题 然后,我将数据库从data.db重命名为data-15215644

我正在运行一个Python脚本,每分钟将数据插入SQLite数据库;数据库中有数百万行

数据库一旦增长到一定大小,是否可能会损坏(或效率低下),导致无法插入更多数据

例如,当我今天用FTP发送到远程服务器时,我注意到数据库的大小是590052352字节。然而,当我几分钟后刷新时,数据库的大小并没有增长(它本应如此)

当查看数据库的“上次修改”时间戳时,我意识到40多小时没有插入任何数据。因此,我查看了错误日志,但其中没有任何问题

然后,我将数据库从data.db重命名为data-1521564403.db,并创建了一个名为data.db的新数据库。完成此操作后,python脚本能够再次将数据插入这个新数据库,而不会出现任何问题

上周我注意到了一个类似的问题。在该实例中,数据库的大小达到632MB,之后它开始将错误添加到错误日志中,表示重复数据被插入到具有唯一约束的字段中。但是,我知道这是不可能的,因为python脚本确保检查没有插入重复数据。因此,我按照相同的程序重命名数据库,然后创建一个新的数据库,问题得到解决,数据可以再次插入

所以我的问题是,SQLite数据库在达到一定大小或包含一定数量的行后是否会停止工作(或变得低效)

谢谢

 reasons due to which SQLite database moves to non-accessible state:
文件覆盖操作->可以覆盖SQLite文件,因为这些文件是普通磁盘文件,无法保护数据库免受此类操作的影响

  • 运行文件描述符:关闭并重新打开文件解密程序可能会覆盖在SQLite日志文件上管理的线程,在这种情况下,数据应该继续传输到服务器,然后被替换,并显示损坏
  • 事务处于运行模式时还原:在系统后端运行的备份进程可能会在事务未完成时尝试创建SQLite文件的备份。备份将保存以前状态的一些日志和以前事务的一些日志,最后事务id将不匹配,用户将看到损坏问题
  • 热日志删除:为了恢复数据库SQLite,请使用与数据库同名的辅助日志文件,只添加后缀-Journal或-wal。在SQLite数据库修复期间,如果服务器由于重命名、删除或文件移动而找不到日志文件,则自动数据库恢复将没有希望。
文件锁定问题:为了协调并发进程,SQLite使用了锁定数据库功能,其背后的原因是避免两个不同进程对单个数据库进行更改,从而导致数据损坏

  • 缺少锁详细信息:被视为锁定数据库的可靠来源的文件系统可能会有一些无法解决的错误,以及当任何数据库线程被锁定时,但这种系统的数据损坏的可能性会增加
  • Posix建议锁取消:对于默认锁定,在所有运行SQLite的UNIX系统中设置此功能非常重要,Close()系统调用经常会中断此操作,并进一步生成SQLite线程损坏。这种损坏背后的主要原因可能是链接SQLite数据库的多个副本 两种锁定协议的矛盾:SQLite3 vfs和SQLite3 open v2(),这两种协议在SQLite数据库处理方面是众所周知的,在使用这两种协议的SQLite的系统中,矛盾肯定会发生
  • 重命名或取消链接数据库:一旦您重命名一个SQLite数据库的文件,而该文件实际上并不存在于同一位置,那么这可能是取消链接或重新命名SQLite数据库或文件的结果,这也是一种不好的做法,因为它将导致SQLite数据库损坏
一个文件的多个链接:如果您已使用网络连接将SQLite数据库链接到多个链接,那么它将再次显示损坏情况。 -数据库同步失败:如果SQLite服务器的sync命令扮演I/O屏障的角色,而不是真正的同步,那么任何失败都可能会出现,导致进一步的回滚操作,可以说它违反了ACID属性。在这种情况下,数据库将处于抵抗模式

  • 不接受同步请求的磁盘驱动器:对于无序磁盘请求,SQLite没有任何内置方法,提交回滚可能会影响数据库的持久性,但实际上不会损坏数据库。要防止数据库同步操作失败,用户应使用SQLite WAL模式
  • 用于限制数据同步的杂注:通过将杂注同步设置设置设置为关闭状态,将忽略所有同步操作。此设置有助于提高SQLite数据库的性能,但不幸的是,当操作系统重新排序所有操作时,它显示出损坏。
闪存和磁盘驱动器故障:硬盘驱动器和磁盘驱动器内容的更改可能会让SQLite用户非常恼火

  • 不安全的闪存控制器:在硬盘未受电源保护的情况下,将数据库内容从一种文件格式转换或写入另一种文件格式是导致SQLite数据库中断的另一个已知原因
  • 没有更多的数据存储功能:当磁盘没有存储数据的空间时,您试图将某些内容写入其中,则可能会发生SQLite损坏。
内存损坏、操作系统中的其他问题和SQLi