您好,登錄后才能下訂單哦!
本篇內容介紹了“是什么阻礙了圖形數據庫的擴展”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
什么是"圖形數據庫的可擴展性"?
“擴展”,不只是指將更多的數據存入一臺計算機或隨便存進多臺計算機。對于大型數據集或不斷增長的數據集,良好的查詢性能十分必要。
所以,其中真正的問題在于,當單臺計算機上的數據集增長到會影響其他功能時,圖形數據庫的表現能否令人滿意呢?如果你還不能理解為什么這是首要問題,請和我一起快速回顧以下圖形數據庫。
簡單來說,圖形數據庫用于存儲無架構對象(頂點或節點)以及任意數據(屬性)和對象(邊緣)的關聯數據。邊通常能夠指出對象之間的著力點,頂點和邊共同構成圖形網絡數據集。
離散數學將圖形定義為一組頂點和邊;而計算機科學則將其定義為一種抽象的數據類型,它能夠表示連接或關系。它不同于關系數據庫系統中的表格數據結構,后者表達數據關系的能力十分有限。
如上所述,圖形由節點(又名頂點[V]) 組成,這些節點由關系(即邊[E])連接。
頂點具有任意數量的邊和任意深度(路徑的長度)的窗體路徑。
它也可以針對跨行金融交易進行圖形建模,如下圖所示。此例中,我們可以將銀行帳戶定義為節點,銀行交易記錄與其他關系定義為邊緣。
以這種方式存儲帳戶和交易信息,以遍歷創建圖形未知或變化的數據深度。在關系數據庫中編寫和運行此類查詢功能往往是一項復雜的工作(使用多模型數據庫能夠以銀行與其分支機構之間的關系來建模)。
圖形數據庫提供各種算法,以便用戶查詢所存儲的數據及分析其間關系。包括遍歷、模式匹配、最短路徑或分布式圖形處理,如分析社區偵測、連接組件或中心性。大多數算法都有一個共同點,這也是解決超節點和網絡躍點問題的本質——算法通過邊從一個節點遍歷到另一個節點。
快速回顧之后,挑戰就要開始啦!
“名人效應”
上文已提到頂點或節點可以具有任意數量的邊。超級點的一個經典例子便是網紅——超節點是圖形數據集中傳入或傳出邊條數過多的節點。帕特里克·斯圖爾特爵士的Twitter賬戶目前就擁有340多萬粉絲。
如果現在將帳戶和推文數據進行圖形建模,遍歷其數據即Patrick Stewart的帳戶信息,那么算法必須定向分析Steward帳戶所有的340萬條邊。這就會延長查詢執行時間,甚至可能突破被授權的權限。類似的問題存在于欺詐檢測(帳戶進行大量交易、網絡管理-大型 IP hub)等案例中。
超級節點是圖形的固有問題,也是所有圖形數據庫面臨的問題,以下兩種方法能盡量減少超節點的影響。
圖源:unsplash
方法一:拆分超節點
更準確來說,可以復制節點"Patrick Stewart",并按某個屬性(如粉絲的國家/地區或其他特定分組)拆分數據邊緣。這樣就會將超節點遍歷數據對性能的影響降至最低,以便查詢分類時所用。
方法二:中心節點索引
以頂點為中心的索引同時存儲邊緣信息和有關節點的信息。還是以帕特里克·斯圖爾特的 Twitter 帳戶為例,可以這樣分組:粉絲的起始關注日期/時間信息、粉絲的國家/地區、粉絲的粉絲數等等,以上所有屬性都可以為更高效地使用()提供選擇性。
查詢引擎可使用索引來減少執行遍歷功能所需的線性查找次數,詐騙檢測也可采用此方法。上文中金融交易便是邊緣,交易日期或交易金額等屬性可以增加選擇效率。
某些情況下,以上兩種方法都不適用;遍歷超節點時,性能一定程度上會下降。多數情況下,還是有辦法優化性能,但另一個問題是大多數圖形數據庫尚未解決的。
網絡躍點問題
假如需要遍歷一個高度連接的數據集,查詢所需的所有數據的記憶都負荷在同一臺計算機上,查詢單個主要記憶大約需要100ns。
假設數據集已經遠遠滿足單個實例所需,或者操作者想要提高群集或是全包的可用性和處理能力。在圖形案例中,分片的意思就是拆除之前所建立的連接,因為圖形遍歷所需的數據當前可能留在不同計算機上。這會導致的查詢信息時網絡延遲,網絡可能不是開發人員的問題,但查詢性能就是了。
即使現代Gbit 網絡和服務器位于同一機架,網絡查找的成本也比內存中在查找貴5000倍左右。若在連接群集服務器的網絡上添加一點負載,后果不可預想。
這種情況下,遍歷可能從數據庫服務器1開始,點擊具有指向存儲在 DB Server 2上的頂點邊緣的節點,從而通過網絡進行查找網絡躍點。考慮到更多實際中的情況,在單個遍歷查詢中,實際上是存在多個躍點的。
在詐騙檢測、IT網絡管理,甚至現代企業識別和訪問管理案例中,可能會涉及到分配圖形數據,同時還需要以低于秒的性能執行查詢功能。而查詢執行期間產生的大量網絡躍點可能會使之失敗,付出高昂的縮放代價。
更智能的解決方法
大多數情況下,如果對數據有一些了解,你就可以更智能地來分片圖形(客戶 ID、區域等)。其他時候,也可以使用分布式圖形分析,通過使用社區檢測算法(例如ArangoDB的Pregel 套件)生成此域知識,從而進行計算。
例如,詐騙檢測就需要分析財務交易以確定詐騙套路。在過去,騙子利用某些國家或地區的銀行來洗錢。我們可以使用此領域知識作為圖形數據集的分片密鑰,并在 DB 服務器1上分配在此區域執行的所有財務事務,并在其他服務器上分配處理其他事務。
而現在,使用ArangoDB的SmartGraph功能,本地就能阻止洗錢或查詢其他圖形的請求,避免或至少大幅度降低了查詢期間所產生的網絡躍點。這究竟是如何做到的?
ArangoDB中的查詢引擎能夠記憶遍歷所需的數據存儲位置,并向每個數據庫服務器的查詢引擎發送請求,然后在本地處理請求。之后,每個數據庫服務器上結果的差異會被合并到協調器并發送到客戶端。對于層次分明的圖形,還可以利用不相交的智能圖來優化查詢。
對于解決數據縮放問題的呼聲越來越高,而圖形技術對于回答此類復雜的問題也愈發重要。
筆者可以肯定地說,圖形數據庫在垂直方向上擴展是可行的,在ArangoDB中,水平擴展也能實現。當然,在有些極端不常見的情況下,中心節點索引和SmartGraphs也都無能為力。
“是什么阻礙了圖形數據庫的擴展”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。