真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進行圖數(shù)據(jù)庫NebulaGraph的數(shù)據(jù)模型和系統(tǒng)架構設計

本篇文章為大家展示了如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名申請、虛擬空間、營銷軟件、網(wǎng)站建設、寶坻網(wǎng)站維護、網(wǎng)站推廣。

下面主要介紹 Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計。

有向?qū)傩詧D DirectedPropertyGraph

Nebula Graph 采用易理解的有向?qū)傩詧D來建模,也就是說,在邏輯上,圖由兩種圖元素構成:頂點和邊。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

頂點 Vertex

在 Nebula Graph 中頂點由標簽 tag 和對應 tag 的屬性組構成, tag 代表頂點的類型,屬性組代表 tag 擁有的一種或多種屬性。一個頂點必須至少有一種類型,即標簽,也可以有多種類型。每種標簽有一組相對應的屬性,我們稱之為 schema 。

如上圖所示,有兩種 tag 頂點:player 和 team。player 的 schema 有三種屬性 ID (vid),Name (sting)和 Age (int);team 的 schema 有兩種屬性 ID (vid)和 Name (string)。

和 MySQL 一樣,Nebula Graph 是一種強 schema 的數(shù)據(jù)庫,屬性的名稱和數(shù)據(jù)類型都是在數(shù)據(jù)寫入前確定的。

邊 Edge

在 Nebula Graph 中邊由類型和邊屬性構成,而 Nebula Graph 中邊均是有向邊,有向邊表明一個頂點( 起點 src )指向另一個頂點( 終點 dst )的關聯(lián)關系。此外,在 Nebula Graph 中我們將邊類型稱為 edgetype ,每一條邊只有一種edgetype ,每種 edgetype 相應定義了這種邊上屬性的 schema 。

回到上面的圖例,圖中有兩種類型的邊,一種為 player 指向 player 的 like 關系,屬性為 likeness (double);另一種為 player 指向 team 的 serve 關系,兩個屬性分別為 start_year (int) 和 end_year (int)。

需要說明的是,起點1 和終點2 之間,可以同時存在多條相同或者不同類型的邊。

圖分割 GraphPartition

由于超大規(guī)模關系網(wǎng)絡的節(jié)點數(shù)量高達百億到千億,而邊的數(shù)量更會高達萬億,即使僅存儲點和邊兩者也遠大于一般服務器的容量。因此需要有方法將圖元素切割,并存儲在不同邏輯分片 partition 上。Nebula Graph 采用邊分割的方式,默認的分片策略為哈希散列,partition 數(shù)量為靜態(tài)設置并不可更改。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

數(shù)據(jù)模型 DataModel

在 Nebula Graph 中,每個頂點被建模為一個 key-value ,根據(jù)其 vertexID(或簡稱 vid)哈希散列后,存儲到對應的 partition 上。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

一條邏輯意義上的邊,在 Nebula Graph 中將會被建模為兩個獨立的 key-value ,分別稱為 out-key 和 in-key 。out-key 與這條邊所對應的起點存儲在同一個 partition 上,in-key 與這條邊所對應的終點存儲在同一個 partition 上。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

系統(tǒng)架構 Architecture

Nebula Graph 包括四個主要的功能模塊,分別是存儲層、元數(shù)據(jù)服務、計算層和客戶端。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

存儲層 Storage

在 Nebula Graph 中存儲層對應進程是 nebula-storaged ,其核心為基于 Raft(用來管理日志復制的一致性算法) 協(xié)議的分布式 Key-valueStorage 。目前支持的主要存儲引擎為「Rocksdb」和「HBase」。Raft 協(xié)議通過 leader/follower 的方式,來保持數(shù)據(jù)之間的一致性。Nebula Storage 主要增加了以下功能和優(yōu)化:

  1. Parallel Raft:允許多臺機器上的相同 partiton-id 組成一個 Raft group 。通過多組 Raft group 實現(xiàn)并發(fā)操作。

  2. Write Path & batch:Raft 協(xié)議的多機器間同步依賴于日志 id 順序性,這樣的吞吐量 throughput 較低。通過批量和亂序提交的方式可以實現(xiàn)更高的吞吐量。

  3. Learner:基于異步復制的 learner。當集群中增加新的機器時,可以將其先標記為 learner,并異步從 leader/follower 拉取數(shù)據(jù)。當該 learner 追上 leader 后,再標記為 follower,參與 Raft 協(xié)議。

  4. Load-balance:對于部分訪問壓力較大的機器,將其所服務的 partition 遷移到較冷的機器上,以實現(xiàn)更好的負載均衡。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

元數(shù)據(jù)服務層 Metaservice

Metaservice 對應的進程是 nebula-metad ,其主要的功能有:

  1. 用戶管理:Nebula Graph 的用戶體系包括 Goduser , Admin , User , Guest  四種。每種用戶的操作權限不一。

  2. 集群配置管理:支持上線、下線新的服務器。

  3. 圖空間管理:增持增加、刪除圖空間,修改圖空間配置(Raft副本數(shù))

  4. Schema 管理:Nebula Graph 為強 schema 設計。

  • 通過 Metaservice 記錄 Tag 和 Edge 的屬性的各字段的類型。支持的類型有:整型 int, 雙精度類型 double, 時間數(shù)據(jù)類型 timestamp, 列表類型 list等;

  • 多版本管理,支持增加、修改和刪除 schema,并記錄其版本號

  • TTL 管理,通過標識到期回收 time-to-live 字段,支持數(shù)據(jù)的自動刪除和空間回收

MetaService 層為有狀態(tài)的服務,其狀態(tài)持久化方法與 Storage 層一樣通過 KVStore 方式存儲。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

計算層 Query Engine & Query Language(nGQL)

計算層對應的進程是 nebula-graphd ,它由完全對等無狀態(tài)無關聯(lián)的計算節(jié)點組成,計算節(jié)點之間相互無通信。**Query Engine **層的主要功能,是解析客戶端發(fā)送 nGQL 文本,通過詞法解析 Lexer 和語法解析 Parser 生成執(zhí)行計劃,并通過優(yōu)化后將執(zhí)行計劃交由執(zhí)行引擎,執(zhí)行引擎通過 MetaService 獲取圖點和邊的 schema,并通過存儲引擎層獲取點和邊的數(shù)據(jù)。Query Engine 層的主要優(yōu)化有:

  1. 異步和并發(fā)執(zhí)行:由于 IO 和網(wǎng)絡均為長時延操作,需采用異步及并發(fā)操作。此外,為避免單個長 query 影響后續(xù) query,Query Engine 為每個 query 設置單獨的資源池以保證服務質(zhì)量 QoS。焦作國醫(yī)胃腸醫(yī)院:https://www.jianshu.com/p/b8966d1a468e

  2. 計算下沉:為避免存儲層將過多數(shù)據(jù)回傳到計算層占用寶貴的帶寬,條件過濾 where 等算子會隨查詢條件一同下發(fā)到存儲層節(jié)點。

  3. 執(zhí)行計劃優(yōu)化:雖然在關系數(shù)據(jù)庫 SQL 中執(zhí)行計劃優(yōu)化已經(jīng)經(jīng)歷了長時間的發(fā)展,但業(yè)界對圖查詢語言的優(yōu)化研究較少。Nebula Graph 對圖查詢的執(zhí)行計劃優(yōu)化進行了一定的探索,包括執(zhí)行計劃緩存和上下文無關語句并發(fā)執(zhí)行。

如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計

客戶端 API & Console

Nebula Graph 提供 C++、Java、Golang 三種語言的客戶端,與服務器之間的通信方式為 RPC,采用的通信協(xié)議為 Facebook-Thrift。用戶也可通過 Linux 上 console 實現(xiàn)對 Nebula Graph 操作。Web 訪問方式目前在開發(fā)過程中。

上述內(nèi)容就是如何進行圖數(shù)據(jù)庫Nebula Graph 的數(shù)據(jù)模型和系統(tǒng)架構設計,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當前題目:如何進行圖數(shù)據(jù)庫NebulaGraph的數(shù)據(jù)模型和系統(tǒng)架構設計
標題來源:http://weahome.cn/article/geccod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部