ArangoDB 儲存引擎(RocksDB)

2021-08-15 04:26:58 字數 2463 閱讀 1767

儲存引擎位於arangodb資料庫的最底層。儲存引擎負責將文件儲存在磁碟上,在記憶體中儲存副本,提供索引和快取以加快查詢速度。

3.1版本之前,arangodb僅支援記憶體對映檔案(mmfiles)作為唯一的儲存引擎。從3.2之後,arangodb開始支援可插拔的儲存引擎。第二個支援的引擎是來自facebook的rocksdb。

mmfiles

rocksdb

預設可選的

資料集需要適合記憶體

盡可能多地處理磁碟上的資料

記憶體中的索引

記憶體熱設定,磁碟上的資料和索引

由於重建索引而導致重啟速度緩慢

快速啟動(不重建索引)

非易失性集合(僅在記憶體中,可選)

收集資料一直存在

集合級別鎖定(寫塊讀取)

併發讀取和寫入

部落格文章:comparing new rocksdb and mmfiles storage engines

rocksdb是乙個可嵌入的永續性key-value儲存。它是乙個日誌結構的資料庫,並針對快速儲存進行了優化。

mmfiles引擎針對資料放入主記憶體的用例進行了優化。它允許非常快速的併發讀取。但是,寫操作會阻塞讀操作,並且鎖定是在集合級別上的。索引始終在記憶體中,並在啟動時重建。這樣可以獲得更好的效能,但導致啟動時間更長。

rocksdb引擎針對大型資料集進行了優化,即使資料集比主記憶體大得多,也可以確保穩定的插入效能。索引始終儲存在磁碟上,但快取用於加速效能。rocksdb使用文件級別的鎖來允許併發寫入。寫入不會阻止讀取。讀取不會阻止寫入。

必須為整個伺服器/集群選擇引擎,不可以混合使用。事務處理和預寫日誌格式在各個引擎中是不同的,因此不能混合使用。

rocksdb是乙個非常靈活的引擎,可以配置為各種使用情況。

rocksdb的主要優點是

文件級鎖

支援大型資料集

永續性索引

注意事項

rocksdb允許併發寫入。但是,當寫入相同的文件時會產生寫入衝突。mmfiles引擎不會發生這種情況,因此將引擎切換為rocksdb要做好出現這種異常的準備。執行aql時可以專門鎖定集合。這將避免寫入衝突,但也阻止了併發寫入。

rocksdb是基於日誌結構的合併樹。下面是一些很好的介紹:

其基本思想是資料是按層次組織的,每個層次都比前乙個要素要大。新的資料將駐留在較小的級別,而舊的資料將下移到較大的級別。這允許在較長時間內支援高速插入。原則上不同的級別可能駐留在不同的儲存介質上。較小的放在快速的固態硬碟,大的級別就放在較大的機械硬碟。

rocksdb本身提供了許多不同的旋鈕來根據您的使用情況微調儲存引擎。arangodb支援使用下面的選項最常見的。

儲存引擎的效能報告可以在這裡找到:

arangodb選項

arangodb擁有乙個用於rocksdb中持久索引的快取。該快取的總大小通過該選項控制

--cache.size

rocksdb也有乙個儲存在磁碟上的塊快取。該快取的大小由該選項控制

--rocksdb.block-cache-size

arangodb預設在兩個快取之間平均分配可用記憶體。

arangodb為rocksdb中的各個級別選擇適合於通用應用程式的大小。

rocksdb日誌結構化的資料級別越來越大

mem: --

l0: --

l1: -- --

l2: -- -- -- --

...

新的或更新的文件首先儲存在記憶體中。如果這個memtable達到了給定的限制

--rocksdb.write-buffer-size

它將轉換為sst檔案並插入0級。

以下選項控制每個級別的大小和深度。

--rocksdb.num-levels n

將等級數限制為n.預設情況下,等於7,很少有理由改變這個。只有前乙個資料太多才會開啟乙個新的級別。

--rocksdb.max-bytes-for-level-base b

l0最多可以容納b位元組。

--rocksdb.max-bytes-for-level-multiplier m

每個級別最多是前乙個位元組的m倍。因此,l級的最大位元組數可以計算為

max-bytes-for-level-base * (max-bytes-for-level-multiplier ^ (l-1))

rocksdb對事務規模施加了限制。它經過優化,能夠非常有效地處理小型交易,但卻有效地限制了交易的總規模。

arangodb目前使用rocksdb的事務來實現arangodb事務處理。因此,在使用rocksdb引擎時,arangodb交易也有相同的限制。

我們將通過在未來版本的arangodb中引入分布式事務來改善這一點。這將允許處理大型交易作為一系列小型rocksdb交易,從而消除尺寸限制。

Mysql 儲存引擎之 MyISAM儲存引擎

myisam是預設儲存引擎。每個myisam在磁碟上儲存成三個檔案。frm檔案儲存表定義 myd檔案儲存資料 myi檔案儲存索引。要明確表示你想要用乙個myisam 請用engine表選項指出來 create table test myisam id int engine myisam 2 如下是m...

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...