所以,我一直在玩一个2GB的SQLite数据库文件,我真的很好奇如何修改数据库数据表现得那么好。如果我插入,更新或删除一些数据,数据将在大约0.5秒内保存到数据库文件中 - 放入(机械)HDD上的2GB文件中!
我一直认为要在文件中插入一个字节,你需要移动所有后续字节,但是我的硬盘驱动器远远没有达到这个大文件在0.5秒内实现这一目标所需的速度。
任何人都知道SQLite如何实现这一黑魔法的壮举?
答案 0 :(得分:2)
这不是它的工作原理。详细记录了file format,但总而言之,新行通常附加到表中,并且在任何情况下,数据库文件中的页面都可以随机排列。 (有趣的是数据库如何设法查找和读取数据。)
大部分0.5秒是事务开销(将数据强制转发到磁盘,等待写入完成)。您可以通过启用WAL mode或disabling the rollback journal completely来减少此操作。