SQLite是否总是读取磁盘?

问题描述:

我有一个使用SQLAlchemy和SQLite作为后端的Pylons应用程序。我想知道是否每次读取SQLite操作都会导致硬盘读取(与RAM相比,速度非常慢),或者某些缓存机制已经涉及到。SQLite是否总是读取磁盘?

  • SQLite是否在RAM中维护数据库的子集以便更快地访问?
  • 操作系统(Linux)可以自动执行该操作吗?
  • 使用生产数据库(MySQL或PostgreSQL)而不是SQLite可以达到多少加速比?

  1. 是,SQLite的有它自己的内存缓存。例如,检查PRAGMA cache_size。另外,如果你正在寻找加速,请检查PRAGMA temp_store。还有用于实现您自己的缓存的API。

  2. SQLite数据库只是操作系统的一个文件。没有什么是自动完成的。为确保高速缓存确实发生,有sqlite.h定义和运行时编译指示设置。

  3. 这取决于,有很多情况下,你会得到放缓,而不是。

+1

在#2上,你的意思是说,sqlite实际上告诉操作系统不要使用磁盘缓存? –

+0

@Mechanicalsnail我的意思是操作系统不会“自动”为SQLite数据库做任何事情,它不会为任何其他文件做任何事情。 – hamstergene

+0

但不会读取(和写入)被缓存? –

我是多么的加速可以期待通过使用生产数据库(MySQL或Postgres的),而不是SQLite的?

您是否在生产服务器环境中使用sqlite?你可能不应该是:

Appropriate Uses for Sqlite

SQLite的通常会作为后台数据库的网站正常工作。 但是,如果您的网站如此繁忙以致于您正在考虑将数据库组件拆分到单独的计算机上,那么您应该考虑使用企业级客户端/服务器数据库 引擎而不是SQLite。

SQLite设计不好,而且从来没有打算好好扩展; SQLite交易便利性能;如果性能是一个问题,你应该考虑另一个DBMS

+6

您链接的页面特别指出,SQLite *可以在每天高达100K到1000K点击量的生产环境中正常工作(或者,正如他们所说的,99.9%的网站)。只有当您将数据库移到独立于Web服务器的服务器上时,它们才会建议实际的数据库服务器。 –