我读到了关键字":memory:"从今天关于SQLite的一本书,但它只说它是什么,如何使用和解释太短。所以我在这里搜索了更多信息,但无法获得SQLite特定信息。
有什么好处':记忆:'模式有? (我什么时候需要这个?)
内存数据库的性能更快?
我是否仍需要在内存数据库中使用事务?
答案 0 :(得分:24)
SQLite in-memory database的主要优点是性能:它不是读写磁盘,而是将整个数据库保存在内存中。内存比磁盘快得多。对于旋转磁盘或负载较大的IO服务器,您会看到最大的性能提升,而使用SSD的情况则更少。
然而,这并不是写得不好的查询和表格的灵丹妙药。在找到内存数据库以提高性能之前,请务必优化表设计,查询和索引。
主要缺点是一旦进程关闭数据库就消失了。并且数据库不能大于可用内存。
提交可能更快,因为不需要写入磁盘,因此自动提交模式可能更快,但事务仍应用于数据完整性目的。
请注意,不会太大的临时SQLite数据库可能会存储在内存中。
由于它的缺点,并且因为内存比内存少得多,所以在提交到内存数据库之前,请尝试使用临时数据库。这是通过使用''
作为数据库文件名来完成的。这将写入临时文件,但缓冲内存缓存中的工作。它是两全其美的,你可以在不使用太多内存的情况下提高性能。
即使为每个临时数据库分配了磁盘文件,实际上临时数据库通常驻留在内存中的寻呼机缓存中,因此由“:memory:”创建的纯内存数据库与由空文件名创建的临时数据库。唯一的区别是“:memory:”数据库必须始终保留在内存中,而如果数据库变大或者SQLite受到内存压力,临时数据库的某些部分可能会刷新到磁盘。
对应用程序进行概要分析和基准测试,以确保它会带来性能改进,考虑优化查询和添加索引是否更好,并确保数据消失后即可。