Sqlite

多個並發連接到網路共享上的同一個大型 SQLite 文件

  • April 10, 2019

我有一個 7GB 的 SQLite 文件,我正在從雲中的不同虛擬機對其執行多個查詢。一些查詢使用內置的 sqlite3 包在 Python 中執行,而其他查詢則源自在 DB Visualizer 中執行的 SQL 查詢。該文件本身位於網路共享上(出於政策原因,無法在本地複制)。

這些並發查詢會互相拖慢嗎?

我可以在網路共享上多次複製 SQLite 文件,並將每個並發查詢連接到它自己的文件副本。那會加快速度嗎?

我可以想像 sqlite3 Python 驅動程序和 DBVisualizer 都首先將數據庫文件複製到本地臨時儲存中(或複製到記憶體中),在這種情況下,沒有獲得加速,或者他們沒有。

並發不是問題,只要你只讀。SQLite 不允許寫入並發,因為它從來不是為此而設計的。我不知道 python 驅動程序和 DBVisualized 的內部結構,但希望 smb、你的作業系統和任何中間件都能自動記憶體文件的至少一部分,因為除非有要求,否則它會自動完成以加快文件系統訪問。詳細資訊將取決於作業系統配置和訪問詳細資訊。

我想評論一些你沒有問過的東西,這是你的架構的契合:

  • 您需要通過網路訪問數據庫
  • 你需要有一定程度的並發
  • 您需要控制訪問,因為政策原因(可能其中一些政策原因可能是備份)
  • 您對性能有期望
  • 您需要以更細粒度的方式控制記憶體中的內容和磁碟上的內容
  • 您的數據庫已經超出了微不足道的規模

(這些只是從您的問題中感知到的那些)

SQLite 是一款很棒的軟體,但請考慮它是否適合您,因為這幾乎是何時不使用它的典型案例。當然,您可以創建一個循環設備並將其複製到記憶體中,您可能會得到一些改進,但您也可以遷移到具有集成記憶體系統的分佈式系統(就像任何其他多使用者關係數據庫一樣)並讓技術解決所有這些問題都給你。

使用網路共享訪問 sqlite 確實是一種 hack,並且已知網路文件系統由於其對寫入一致性的限製而導致數據失去。

引用自:https://dba.stackexchange.com/questions/234461