我正在基於pdo的數據庫類,使用的數據庫是一個mysql數據庫,但我想緩存數據庫以獲得更多的性能。將數據庫緩存在SQlite內存數據庫中並對其執行SELECT操作(並在INSERT,UPDATE,... db上更新數據庫)是否是個好主意? 但是,當我寫「cache = new PDO('sqlite:memory');」它會創建一個新的還是使用現有的數據庫?另外,如果一臺服務器託管多個網站,那麼如何使用不同的內存數據庫呢?PHP:數據庫緩存(與SQLite內存中)
1
A
回答
2
每個SQLite內存數據庫都是連接特定的。即使在同一進程中打開兩個連接到:內存:,也會創建兩個單獨的內存數據庫。所以答案是總是會創建一個新的數據庫,並且它永遠不會使用現有的數據庫。
請謹慎使用正確的名稱來創建內存數據庫。任何其他名稱比:內存:(如:memorry:或內存或/:內存:)並不實際創建內存數據庫,但一個普通的文件基礎數據庫。這種情況默默地發生。
用建議的緩存獲得的性能增益可能很小。如果你在MySQL上選擇並且計算機有足夠的內存,由於操作系統磁盤緩衝,數據可能已經存在於RAM中。因此,以SQLite內存數據庫的形式添加另一層內存將無濟於事。
如果系統不是隻讀的,則建議的緩存容易導致複雜或不正確的緩存邏輯。如果某個進程執行了數據更新,則必須更新其緩存,更新MySQL數據庫,並且還必須創建一些機制,以告知其他進程它們的緩存不再有效,並且它們必須從MySQL讀取數據。否則你的數據很快就會變得混亂。並且想想當兩個進程決定同時更新相同數據但發生不同值時會發生什麼?你有衝突。
爲了獲得更多性能,我首先調整服務器和MySQL。如果它不夠,我會添加一個像Memcached這樣的緩存,它不是應用程序特定的,而是一個單獨的進程。即使這樣,您也必須小心構建應用程序邏輯,以便數據在更新上保持一致。如果你只使用MySQL並且使用InnoDB進行正確的事務處理,那麼MySQL就是爲你做的。
相關問題
- 1. 由於SVN緩存的SQLite數據庫
- 2. 照亮數據庫內存緩存
- 3. SQLite中內存數據庫的優點
- 4. 在內存中的SQLite數據庫
- 5. 如何將緩存數據保存到sqlite數據庫(android)
- 6. 緩存數據與寫入內存表
- 7. .Net 4.0在SqlServer數據庫中緩存數據相當於內存緩存
- 8. 用於縮略圖存儲的Sqlite數據庫和內存緩存
- 9. 具有私有緩存的SQLite WAL模式,內存中數據庫?
- 10. 內存中緩存 - SQLite vs System.Data.DataTable
- 11. 內存中的Python SQLite緩存
- 12. Android:在內存中緩存SQLite實體
- 13. SQLite緩存與應用程序緩存
- 14. 內存內存緩存數據集
- 15. 緩存內存中的數據庫內容以提高性能
- 16. 在php中使用sqlite別名內存數據庫
- 17. 如何用PHP PDO刪除內存中的SQLite數據庫?
- 18. 緩存數據庫
- 19. 數據庫緩存
- 20. sqlite備份內存數據庫C++
- 21. SQLite:數據庫錯誤,「內存不足」
- 22. SqLite在內存數據庫和NHibernate
- 23. sqlite內存數據庫和多線程
- 24. TransactionScope與SQLite內存中的數據庫和NHibernate
- 25. 緩存數據庫數據
- 26. 在內存中緩存數據共享
- 27. 緩存內存中的大量數據
- 28. 緩存或存儲在數據庫中?
- 29. 分配給SQLite內存數據庫的內存大小
- 30. 使用ADM-ZIP(Node.js)將SQLite存儲到內存數據庫中
你知道mysql有內存引擎,對吧? – 2012-04-07 14:19:29
但SQlite是本地的,mysql可能是遠程的( - >慢) – joschua011 2012-04-07 14:23:21