Neo4j知識庫(三):Neo4j數(shù)據(jù)存儲概覽

【翻譯自:https://neo4j.com/developer/kb/understanding-data-on-disk/
【適用版本:3.0, 3.1, 3.2, 3.3, 3.4, 3.5】
【由Neo4j APAC授權(quán)編譯發(fā)布】

Neo4j知識庫

????????Neo4j數(shù)據(jù)庫文件可持久化存儲。通常,數(shù)據(jù)相關(guān)文件默認(rèn)存儲在data/databases/graph.db(v3.x +)的數(shù)據(jù)目錄。下面將為您解釋以neostore.*開頭的文件類型及其存儲的數(shù)據(jù):

nodestore* 存儲圖中節(jié)點(diǎn)數(shù)據(jù)
relationship* 存儲圖中創(chuàng)建和定義的關(guān)系數(shù)據(jù)
property* 存儲數(shù)據(jù)庫中的鍵/值屬性
label* 存儲圖中標(biāo)簽數(shù)據(jù)

????????我們知道,Neo4j是無模式的數(shù)據(jù)庫,我們使用固定長度來保存數(shù)據(jù),并通過文件偏移量在查詢中讀取數(shù)據(jù)。下表列出了Neo4j存儲的Java對象類型的固定大?。?/p>

Store File? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? Record size?? |? Contents
----------------------------------------------------------------------------------------------------------------------------
neostore.nodestore.db? ? ? ? ? ? ? ? ? | 15 B? ? ? ? ? ? ? |? 節(jié)點(diǎn)
neostore.relationshipstore.db? ? ? ? | 34 B? ? ? ? ? ? ? |? 關(guān)系
neostore.propertystore.db? ? ? ? ? ? ?| 41 B? ? ? ? ? ? ? |? 屬性
neostore.propertystore.db.strings? | 128 B? ? ? ? ? ?|? string屬性
neostore.propertystore.db.arrays? ?| 128 B? ? ? ? ? ?|? array屬性
IndexedProperty? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| 1/3 * AVG(X)|? 每個索引約為屬性均值的1/3

????????關(guān)于屬性的注意事項(xiàng):

1)屬性記錄的固定長度為32 bytes,分為四個8B block。block可以包含key或value,或者key+value;
2)key和type占3.5 bytes(key 4 bit,type 24 bit);
3)boolean,byte,short,int,char,float類型存放在同一block;
4)small long類型存放在block;
5)big long或double類型存放在單獨(dú)的block(該屬性使用的兩個block);
6)string或array類型的引用與key存放在同一block;
7)block中剩余的長度如果能夠容下short string或short array(包括key-block的剩余字節(jié)),則將其存儲在同一block;
8)long strings/arrays不能存在8B
9)blocks,我們將通過指向string/array(128B)的指針來存儲;
......其他類型

????????磁盤的數(shù)據(jù)都是以固定長度的記錄鏈表存儲。屬性以屬性的記錄鏈接存儲,每個屬性記錄都包含鍵和值,并指向下一個屬性。節(jié)點(diǎn)和關(guān)系指向其第一個屬性記錄,在關(guān)系鏈表中的節(jié)點(diǎn)指向其第一個關(guān)系。每個關(guān)系則指向開始和結(jié)束節(jié)點(diǎn),同時(shí),分別指向起始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)的上一個和下一個關(guān)系記錄。
????????簡單起見,我們假定屬性與屬性記錄的比率為1:1,也就是說一個屬性長度固定為41B。當(dāng)然,在實(shí)際場景中還需要具體考慮。
????????數(shù)據(jù)庫存儲空間估算的常見示例如下:

場景1

初始狀態(tài)
節(jié)點(diǎn)數(shù):4M節(jié)點(diǎn)
每個節(jié)點(diǎn)有3個屬性(共12M屬性)
關(guān)系數(shù):2M關(guān)系
每個關(guān)系有1個屬性(共2M屬性)

計(jì)算后的磁盤存儲大小為:
節(jié)點(diǎn):4,000,000x15B = 60,000,000B(60MB)
關(guān)系:2,000,000x34B = 68,000,000B(68MB)
屬性:14,000,000x41B = 574,000,000B(574MB)
總計(jì):703MB

場景2?

4倍增長 + 增加的屬性 + 所有屬性的索引
節(jié)點(diǎn)數(shù):16M節(jié)點(diǎn)
每個節(jié)點(diǎn)有5個屬性(共80M屬性)
關(guān)系數(shù):8M關(guān)系
每個關(guān)系有2個屬性(共16M屬性)

計(jì)算后的磁盤存儲大小為:
節(jié)點(diǎn):16.000.000x15B = 240.000.000B(240MB)
關(guān)系:8.000.000x34B = 272.000.000B(272MB)
屬性:96.000.000x41B = 3.936.000.000B(3936MB)
索引:4448MB
????????*?33%= 1468MB
總計(jì):5916MB

????????通過這兩個示例,您可以估算出磁盤存儲大小及其增長。

更多技術(shù)咨詢:
Email:yusonglin@we-yun.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容