Ads 468x60px

##EasyReadMore##

23 1月, 2017

SQlite In-Memory DB

SQlite In-Memory DB 分為兩種

一、In-Memory DB

SQLite 通常是將資料庫儲存在一個檔案中。但是在某些狀況下,您可能希望將其儲存在記憶體中。
要讓 SQLite 將 DB 完全存在記憶體中,可在開啟資料庫時,使用特殊檔名「:memory:」來做為檔案名稱。在 shell 進入 In-Memory DB 的方式有以下兩種:
ATTACH DATABASE ':memory:' AS aux1;
ATTACH DATABASE 'file::memory:' AS aux1;
此時,SQLite 不會在磁碟上開啟任何檔案,而是在記憶體中建立一個新的 DB。而當資料庫連線關閉後,該 DB 就會消失。每一個 :memory: 資料庫都是唯一、各自獨立的。所以,如果用檔案名稱「:memory:」開啟兩個 DB 連線,則會建立兩個新的 in-memory DB(並各自擁有自己的 private cache)。
如果希望在同一個 process、兩個以上的 DB 連線開啟同一個 in-memory DB,則可以使用下列的方式:
  ATTACH DATABASE 'file::memory:?cache=shared' AS aux1;
同樣地,當最後一個 DB 連線關閉時,此 DB 會被刪除、記憶體會被回收。
如果希望在同一個 process、兩個以上的 DB 連線、各自開啟不同的 in-memory DB ,可以使用下列方式:
   ATTACH DATABASE 'file:memdb1?mode=memory&cache=shared' AS aux1;
   ATTACH DATABASE 'file:memdb2?mode=memory&cache=shared' AS aux2;
如果 in-memory DB 這樣命名,那各 DB 連線之間就可以共享其 cache。
In-Memory DB 可使用的 journal mode 只有「MEMORY」和「OFF」兩種。
網路技術趨勢觀測站: SQLite 學習筆記之二 - 其他特色 - https://goo.gl/rrOCbs

二、Temporary DB

如果檔案名稱「空字串」,那 SQLite 就會使用一個臨時檔來儲存該 DB:
 ATTACH DATABASE '' AS aux3;
就像 in-memory DB 一樣,每次使用這個指令,SQLite 就會建立不同的臨時檔案,連到不同臨時 DB 的兩個資料庫連線,各自擁有自己的 DB。當原來建立 DB 的連線關閉後,臨時 DB 就會自動被刪除。
即使 SQLite 會為每個臨時 DB 配置一個檔案,但實務上,臨時 DB 還是會先被儲存在記憶體的分頁 cache 之中,因此與 in-memory DB 稍有不同。差別在於:「in-memory DB」從頭到尾都一直存在記憶體之中,但「臨時 DB」在資料庫變大或記憶體不夠用時就會被寫入到磁碟。

0 意見:

張貼留言

 
Blogger Templates