SQLite读取是否总是击中磁盘?

时间:2011-10-10 09:35:55

标签: python sqlite sqlalchemy

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

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

2 个答案:

答案 0 :(得分:3)

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

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

  3. 这取决于很多情况下你会慢下来。

答案 1 :(得分:0)

  

使用生产数据库(Mysql或postgres)代替sqlite可以获得多少加速?

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

来自Appropriate Uses for Sqlite

  

SQLite通常可以正常工作作为网站的数据库后端。   但是,如果你的网站太忙了,你正在考虑拆分   数据库组件关闭到一台单独的机器上,那么你应该   绝对考虑使用企业级客户端/服务器数据库   引擎而不是SQLite。

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