Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance SQLite在修改大文件时速度如何如此之快?_Performance_Sqlite - Fatal编程技术网

Performance SQLite在修改大文件时速度如何如此之快?

Performance SQLite在修改大文件时速度如何如此之快?,performance,sqlite,Performance,Sqlite,所以,我一直在玩2GB的SQLite数据库文件,我真的很好奇如何修改数据库数据执行得这么好。如果我插入、更新或删除一些数据,这些数据将在大约0.5s内保存到数据库文件中—保存到(机械)硬盘上的2GB文件中 我一直认为,要在文件中插入一个字节,需要移动所有后续字节,但我的HDD的速度远不及在0.5s内处理如此大的文件所需的速度 有人知道SQLite是如何实现这一黑魔法壮举的吗?这不是它的工作原理。文档中有详细的说明,但总而言之,新行通常会追加到表中,并且在任何情况下,数据库文件中的页面都可以随机排

所以,我一直在玩2GB的SQLite数据库文件,我真的很好奇如何修改数据库数据执行得这么好。如果我插入、更新或删除一些数据,这些数据将在大约0.5s内保存到数据库文件中—保存到(机械)硬盘上的2GB文件中

我一直认为,要在文件中插入一个字节,需要移动所有后续字节,但我的HDD的速度远不及在0.5s内处理如此大的文件所需的速度


有人知道SQLite是如何实现这一黑魔法壮举的吗?

这不是它的工作原理。文档中有详细的说明,但总而言之,新行通常会追加到表中,并且在任何情况下,数据库文件中的页面都可以随机排列。(有趣的是数据库如何找到和读取数据。)


这0.5秒中的大部分是事务开销(强制数据到磁盘,并等待写入完成)。您可以通过启用或。

酷,我想我大致了解到了:在末尾插入行,删除时只需将范围标记为空闲,更新只会覆盖某些字节,但不会影响后续行。不过,这可能过于简单化了。我想所有的数据库都有同样的问题需要解决,而且可能以类似的方式解决。本质上,一切都是如此。