?AbutionGraph是圖特摩斯科技自主研發的時序動態、多維異構網路資料存盤和分析的GraphOLAM認知圖資料倉庫系統,范訓自中國科學院計算機網路資訊中心,面向實時的關聯資料查詢與分析、IoT實時資料計算與監控,同時兼具圖資料庫+時序資料庫+HOLAP資料倉庫的綜合能力,

本文將簡要介紹AbutionGraph在分布式圖資料庫中的創新功能-schema-free,一種動態更改圖/表資料結構的能力?,即動態的無性能開銷的給歷史資料增加和洗掉屬性,并將新結構應用到新匯入的資料上,
屬性知識圖譜概述
知識圖譜由物體和關系組成,物體和關系包含著業務的真實資料,即屬性資訊,
屬性圖 本體構建/schema資訊(元資料) 示例:

本體“人”示例資料(原始資料):

如上圖所示,“人”包含了姓名、生日、地區屬性來表示真實的資料,這就是屬性知識圖譜,知識圖譜的構建就是通過將原始資料映射到知識結構中,形成網狀關系的表示形式,資料還是那些資料,只是抽象為了圖形表達,俗稱“資料圖譜”,
動態schema圖例

動態schema,即資料結構的可更改性-增加和洗掉,具有free特性,一般來說,動態schema是指非固定表結構,schema欄位 (有時也指索引)的增刪對于正常的讀寫沒有任何影響,無需額外空間消耗,無需在線修改,透明的使用,幾乎無downtime,這也是我們在分布式圖資料庫領域的一個創新功能,
強schema與schema free
在資料圖譜中,屬性資訊基本不會變化,我們存盤在節點的屬性欄位里,作為一種永久不能更改的存盤結構,但在很多真實場景中,屬性資訊可能需要動態改變,比如新增一個屬性“年齡”來豐富人物畫像資訊,這就需要schema具有free特性,在常見的圖資料庫產品中,只有Neo4j是具有free特性的,因為它根本不使用schema,資料匯入前無需制定資料結構,匯入資料的欄位不對齊也不影響讀寫,只要開發人員能記住區分就行,而其他圖資料庫JanusGraph、Nebula等屬于強schema結構,即在資料匯入圖譜前,必須構建好schema資料結構(與傳統關系型資料庫定義表結構一樣),在schema結構建立后永久不能增刪改,并且匯入的資料必須與schema中定義的屬性一致(不能缺少屬性,也不能多了屬性,資料型別也必須一致),
Neo4j的schema free
前面已說過neo4j 不使用schema,所以從理論上來說 neo4j 可以存盤任何形式的資料,但由于neo4j 是通過鍵值對(Key-Value) 的雙向串列來保存節點和關系的屬性值,所以neo4j僅適用于存盤物體關系和物體簡單的屬性,在實際應用中一個物體通常會包含眾多的屬性,如果將這些屬性全部存盤到 neo4j 中,neo4j 的查詢將變得例外的慢,而在實際的應用場景下,經常會遇到高并發的情況,這時候單節點的 neo4j 就會顯得力不從心,看一組在8h8g服務器下的測驗報告:

通過上面的測驗可以看出,當節點(Node)的數量超過1000萬時,平均查詢延時已經超過了6秒,說明此時 neo4j 已經明顯“吃不消”了,顯然這樣的延時在實際的專案應用中是完全不可接受的,但是我們發現設定索引之后查詢時間明顯降下來了,那么是不是設定的索引越多越好呢?我們看下在1000萬節點的情況下有索引和無索引插入延時測驗:

由上圖測驗結果可以看出: 在千萬級資料的情況下有索引插入比無索引插入要慢30%, 所以索引并不是越多越好,也就是說,在屬性較多的情況下,Neo4j這種使用雙向串列保存節點和關系屬性值的方式是不優化的,隨著屬性數量和資料量的增加,在查詢性能、寫入性能方面成指數級下降;在空間占用方面,如果構建索引,那就意味著在記憶體或磁盤多保存了一份映射資料,先走索引表的查詢必然會隨著索引的增加而拖慢查詢獲得結果的速度,
AbutionGraph的schema free
在Neo4J和其他圖資料庫產品上,出現了2個極端,前者放棄了schema,后者定死了schema,意味著必須要在性能和功能上二選一,我們在過往的專案案例中,特別是在點邊資料量為百億級的科研類資料中,經常遇到需要增刪改物體屬性的情況,如果按照Neo4j的實作思路,資料量在千萬時就卡死了,如果按照Nebula、TigerGraph等圖庫的實作思路,則只能刪庫重新構圖、預處理,在匯入資料,代價極大,
在AbutionGraph中,我們設計了弱schema的free(schema-less)結構,“弱schema”是“無schema”和“強schema”的一個折中互融實作,可以在萬億點邊的圖譜中實作毫秒動態全量資料更新,當然,我們依然需要像強schema那樣指定資料結構,這是知識建模的程序,但是資料結構具有了像無schema那樣的增刪改能力,弱schema的一些設計優點:
- 指定資料結構是為了定義資料型別以便更好的壓縮資料,Neo4j不壓縮,Nebalu全域壓縮,Abution采用精確的區域壓縮演算法,每種資料型別運用不同的最優壓縮演算法,最大化降低占用存盤空間,
- 動態schema,規范圖譜結構,同時增加靈活性,強schema是一種硬性約束使圖譜規范化,缺點是一旦定義則不可改動,而無schema對資料無約束容易產生混亂,動態schema可以在原有已定義的知識結構上增加和洗掉一個屬性,并且已經錄入的資料不用重新匯入,也不用觸發更新,是一種無性能損耗的能力,對于新增屬性,Abution只對新錄入的資料新增,歷史資料則允許缺失該屬性資訊;對于洗掉屬性,因為洗掉資料的成本很高,如果已有百億歷史資料,那么每條資料都更新一遍,可想而知的開銷,所以Abution中采用隱藏的方式洗掉,只需要將schema中的屬性去掉即可,查詢時該屬性會自動剔除,您還可以在任何時刻通過增加屬性的方式來進行屬性恢復,這些操作都是無任何性能開銷的,
采用AbutionGraph的動態schema知識結構,可以更方便的定制化專案,滿足上層應用的靈活需求,如果在業務中無此需求,則忽略此能力,在需要時隨時更改你的schema來適配你的資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423503.html
標籤:其他
