簡體   English   中英

我是否可以始終在內存中保留整個ArangoDB集合?

[英]Can I always keep a whole ArangoDB collection in memory?

當我第一次將集合加載到內存中時,所有內容都在內存中(我可以在任務管理器中看到它),但是隨着時間的推移,我可以看到arangod進程僅占用了原始大小的一部分。 此外,當我執行查詢時,從該集合中檢索數據時,我可以看到磁盤使用率在短時間內不斷增長,並且已用RAM的大小也在不斷增長。

我想避免它。 我該怎么做? 我看到集合的屬性為isVolatile

isVolatile:如果為true,則收集數據將僅保留在內存中,並且ArangoDB不會將數據寫入或同步到磁盤。

這幾乎是我想要的,但是

卸載集合將導致集合數據被丟棄。 停止或重新啟動服務器也將導致集合中的數據完全丟失

我可以以某種方式將整個集合保留在內存中,但在卸載后不會丟失數據嗎?

確保集合位於RAM中的唯一方法是使用MMFiles引擎。 使用RocksDB無法保證。 兩次完整的集合掃描也應導致RocksDB集合被加載到RAM。 但是,當您耗盡內存時,一些數據將再次被卸載。

僅僅因為存儲數據回退,並不表示正在卸載收集數據。 這是關於MMF的Wikipedia文章: https : //en.wikipedia.org/wiki/Memory-mapped_file 因此,只要加載了集合(當您訪問它的數據或專門調用load方法時立即發生),它就駐留在RAM中。

關於數據丟失的問題:您有2種不同的策略將數據同步到磁盤,可以從以下兩種策略中進行選擇:wait-for-sync true或false。 可以在啟動時設置此參數-然后影響所有數據庫和所有集合-或在最初創建它們時基於每個集合進行設置。 顧名思義,它指的是數據點被視為已提交並報告給客戶端的點。 為了提高性能和降低安全性,可以將該值設置為false。 在這種情況下,如果計算機或磁盤突然斷電,則可能會丟失幾秒鍾的數據。

TLDR使用MMFiles,並且只要有剩余內存,您loaded集合就位於RAM中。 除此之外,您最終會陷入交換空間,從而對性能造成可怕的后果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM