【问题标题】:Advantages of an in-memory Database in SQLite [closed]SQLite 中内存数据库的优势 [关闭]
【发布时间】:2015-12-26 07:04:07
【问题描述】:

我今天从一本关于 SQLite 的书中读到了关键字“:memory:”,但它只说明了它是什么,如何使用,而且解释太短了。所以我在这里搜索了更多信息,但无法获得 SQLite 的具体信息。

  1. ':memory:' 模式有什么优势? (我什么时候需要这个?)

  2. 内存数据库的性能更快?

  3. 我还需要在内存数据库上使用事务吗?

【问题讨论】:

  • 主要优势,性能。当与数据库的连接关闭时,它就会消失。见stackoverflow.com/questions/849679/…
  • 谢谢,但我已经阅读了该主题,并不清楚性能。我还阅读了其他 DBMS 上的一些线程,例如 MySQL,那些说临时数据库并不快。这就是我在这里问的原因..
  • “临时数据库/表”和“内存数据库”是有区别的。临时的仍然可以在磁盘上。
  • 我不知道,谢谢!!那你说的对吗?性能更快??
  • 不一定快得多:stackoverflow.com/questions/764710/…YMMV

标签: database performance sqlite memory temporary


【解决方案1】:

SQLite in-memory database 的主要优势在于性能:它不会读写磁盘,而是将整个数据库保存在内存中。内存比磁盘快得多。您会看到旋转磁盘或重负载 IO 的服务器的性能提升最大,而 SSD 的性能提升较小。

但是,这并不是解决编写不佳的查询和表的灵丹妙药。在您使用内存数据库来提高性能之前,请务必优化您的表设计、查询和索引。

主要缺点是一旦进程关闭数据库就消失了。并且数据库不能大于可用内存。

提交可能会更快,因为不需要写入磁盘,因此自动提交模式可能会更快,但仍应出于数据完整性目的使用事务。

请注意,不会变得太大的临时 SQLite 数据库可能会存储在内存中。

由于它的缺点,而且您的内存比存储空间少得多,因此在提交到内存数据库之前,请尝试使用临时数据库。这是通过使用'' 作为数据库文件名来完成的。这将写入临时文件,但将工作缓冲在内存缓存中。这是两全其美的方法,您可以在不使用太多内存的情况下提高性能。

尽管为每个临时数据库分配了一个磁盘文件,但实际上临时数据库通常驻留在内存分页器缓存中,因此由 ":memory:" 创建的纯内存数据库和由空文件名创建的临时数据库。唯一的区别是“:memory:”数据库必须始终保留在内存中,而如果数据库变大或 SQLite 受到内存压力,则临时数据库的部分可能会刷新到磁盘。

对您的应用程序进行分析和基准测试,以确保它能够提高性能,考虑优化查询并添加索引是否会更好,并确保如果您的数据消失也没关系。

【讨论】:

  • 哇,谢谢!!!你也能回答3号吗?由于性能原因,我总是使用事务,这在使用内存数据库时也会有所帮助吗?
  • @Jenix 无论性能如何,您都应该始终将事务用于数据完整性目的。
猜你喜欢
  • 2011-06-11
  • 2013-05-01
  • 2020-05-22
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多