我有一個使用SQLAlchemy和SQLite作爲後端的Pylons應用程序。我想知道是否每次讀取SQLite操作都會導致硬盤讀取(與RAM相比,速度非常慢),或者某些緩存機制已經涉及到。SQLite是否總是讀取磁盤?
- SQLite是否在RAM中維護數據庫的子集以便更快地訪問?
- 操作系統(Linux)可以自動執行該操作嗎?
- 使用生產數據庫(MySQL或PostgreSQL)而不是SQLite可以達到多少加速比?
我有一個使用SQLAlchemy和SQLite作爲後端的Pylons應用程序。我想知道是否每次讀取SQLite操作都會導致硬盤讀取(與RAM相比,速度非常慢),或者某些緩存機制已經涉及到。SQLite是否總是讀取磁盤?
是,SQLite的有它自己的內存緩存。例如,檢查PRAGMA cache_size
。另外,如果你正在尋找加速,請檢查PRAGMA temp_store
。還有用於實現您自己的緩存的API。
SQLite數據庫只是操作系統的一個文件。沒有什麼是自動完成的。爲確保高速緩存確實發生,有sqlite.h
定義和運行時編譯指示設置。
這取決於,有很多情況下,你會得到放緩,而不是。
我是多麼的加速可以期待通過使用生產數據庫(MySQL或Postgres的),而不是SQLite的?
您是否在生產服務器環境中使用sqlite?你可能不應該是:
SQLite的通常會作爲後臺數據庫的網站正常工作。 但是,如果您的網站如此繁忙以致於您正在考慮將數據庫組件拆分到單獨的計算機上,那麼您應該考慮使用企業級客戶端/服務器數據庫 引擎而不是SQLite。
SQLite設計不好,而且從來沒有打算好好擴展; SQLite交易便利性能;如果性能是一個問題,你應該考慮另一個DBMS
您鏈接的頁面特別指出,SQLite *可以在每天高達100K到1000K點擊量的生產環境中正常工作(或者,正如他們所說的,99.9%的網站)。只有當您將數據庫移到獨立於Web服務器的服務器上時,它們纔會建議實際的數據庫服務器。 –
在#2上,你的意思是說,sqlite實際上告訴操作系統不要使用磁盤緩存? –
@Mechanicalsnail我的意思是操作系統不會「自動」爲SQLite數據庫做任何事情,它不會爲任何其他文件做任何事情。 – hamstergene
但不會讀取(和寫入)被緩存? –