技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询
本文轉載自公眾號:AI前線。
??
作者 | Diego Ongaro,Simon Fell 譯者 | 蓋磊 編輯 | Natalie AI 前線導讀:eBay 工程人員于 5 月 1 日在 官方技術博客 上發布了開源的分布式知識圖譜存儲 Beam,Beam 實現了事實數據的 RDF 存儲,并支持類 SPARQL 查詢。
Beam 是一種分布式知識圖譜存儲,以 Apache 2.0 開源許可發布。Beam 歷經四人年(person-year)的工程探索和開發,提供了大量值得關注的新特性!此博客文章將介紹 Beam 及其實現,并闡述我們選擇開源 Beam 的原因。
Beam 實現了分布式知識圖譜存儲Beam 是一種知識圖譜存儲,也可稱為 RDF 存儲或三元組存儲。知識圖譜適合建模世界知識百科這樣通過復雜關系高度互聯的數據。例如,Wikidata 是一種以結構化數據和關系表示維基百科的數據集,非常適合于知識圖譜表示。知識圖譜存儲支持對數據執行多樣性查詢,提供實時數據接口、輔助機器學習應用,以及基于現有知識理解非結構化的新信息。
在知識圖譜中,數據以單一表模式表示事實。每個事實條目包括主體(Subject)、謂詞(Predicate)和客體(Object)三個元素。這種事實條目表示方式,支持存儲根據復雜查詢靈活組織數據,并通過推理提高數據的抽象層級。下表列出了小部分知識圖譜的表示。
| <John_Scalzi> | <born> | <Fairfield> |
| <John_Scalzi> | <lives> | <Bradford> |
| <John_Scalzi> | <wrote> | <Old_Mans_War> |
Beam 使用類似于 RDF 的數據表示,并支持類 SPARQL 查詢語言。Beam 對數據表示和查詢支持的詳細信息,參見項目 GitHub 代碼庫提供的 docs/query.md。
Beam 實現為分布式存儲,在設計上支持無法被單一服務器有效存儲的大規模圖。Beam 可通過水平擴展支持高性能查詢和大規模數據集。雖然 Beam 的寫入速度無法擴展,但其部署通常可支持每秒數萬次數據更改。我們已運行由 20 臺服務器組成的 Beam 部署和離線用例近一年時間,通常情況下已加載了 25 億條事實數據。盡管我們并未對 Beam 做壓力測試,但我們相信 Beam 的性能遠超當前的容量和規模。
Beam 的架構Beam 的架構如圖一所示,其架構圍繞一種中心化日志構建,圖中每個框圖表示了分布式網絡中的一個獨立進程。中心化日志并非一個新概念,已在 Tango 等系統使用,但并未得到普遍重視。Beam 中,所有的寫入請求排序寫入一個只添加的中心化日志。日志作為網絡服務,在分布式系統內部多次復制,實現容錯和持久化。多個視圖服務器(view server)分別讀取日志,順序應用其中的條目,并確定性地更新各服務器的本地狀態。因此,不同的視圖服務器維護著不同的狀態。API 層接收來自客戶的請求,將寫入請求附加到日志中,并從視圖服務器獲取數據以響應讀取請求。
圖一 Beam 的中心化日志架構
中心化日志在本質上存在一個瓶頸問題,即日志附加的最大速率決定了整個數據集更新的最大速率。另一方面,中心化日志簡化了很多特性的實現,例如跨分區交易、一致性查詢和歷史全局快照、復制、數據遷移、集群成員管理、分區和數據集的多方式索引等。詳細信息,參見項目 GitHub 代碼庫提供的 docs/central_log_arch.md。
Beam 的詳細實現如圖二所示。其中,日志接口采用模塊化設計。Beam 當前推薦使用 Apache Kafka 實現日志,支持新日志在確認前持久化寫入磁盤的配置。Beam 已提供了一種稱為“DiskView”的單視圖實現。DiskView 支持以兩種運行模式,即分別根據知識圖譜事實條目的“主體 - 謂詞”和“謂詞 - 客體”組合構建索引。典型的 Beam 部署將對每種模式各建立三個基于多劃分的副本。DiskViews 使用同樣支持模塊化的 RocksDB 存儲事實條目。API 服務器提供復雜的查詢處理器,我們將在下面詳細介紹。Beam 提供稱為事務計時器的輕量級進程。在 API 服務器出現故障而導致事務處理緩慢時,事務計時器將對事務做超時處理。
圖二 Beam 的詳細實現結構圖
API 服務器提供了豐富的功能,難以用一個簡單的框圖表示。API 服務器中實現了整個查詢處理器,如圖三所示。Beam 的查詢處理器實現了一種類似于 SPARQL 子集的查詢語言,語法類似于 SQL 語句,但適用于知識圖譜查詢。查詢處理器包括解析器、基于代價的查詢規劃器和并發執行引擎。解析器將初始查詢語句解析為抽象語法樹(AST)。查詢規劃器為抽象語法樹添加數據統計信息,進而給出高效的執行計劃。查詢執行引擎運行執行計劃,使用批處理和留處理方式實現高性能查詢。執行引擎基于 View Client/RPC Fanout 模塊,從多個視圖服務器高效獲取數據。詳細信息,參見項目 GitHub 代碼庫提供的 docs/protobeam_v3.md。
圖三 Beam 的查詢處理器結構
我們為什么選擇開源 Beam我們從 Beam 的實現中獲得了大量經驗教訓。最初,我們從頭開始構建了一種 基于內存的鍵值存儲(即 ProtoBeam 第一版),隨后迭代更新為 基于磁盤的屬性圖存儲(即 ProtoBeam 第二版),進而實現了 知識圖譜存儲 (即 ProtoBeam 第三版)。之后,我們將原型系統工程化實現可用于生產環境的代碼、完善文檔、開展測試并審核代碼。在此過程中,我們在工程上做了一些有益的取舍,撰寫了大量詳細的階段性文檔,闡述了我們的考慮隨時間演進的情況。總體情況和詳細信息,參見項目 GitHub 代碼庫提供的 docs/README.md。
盡管 Beam 項目已取得了很大進展,但不幸的是我們無法繼續全職投入其中,難以獨力將其實現為我們希望看到的完備系統。我們仍然認為,Beam 時一個非常值得關注的項目,具有很好的基礎,可服務于他人:
盡管我們的目標是實現可部署于生產環境中的 Beam,但許多用例不需要生產層級的服務。Beam 已可以很好地支持一些離線、非關鍵或研究型應用。
Beam 可受益于他人的貢獻。我們很高興看到 Beam 項目由于他人的貢獻而繼續推進。如考慮做出貢獻,可詳覽 GitHub issues。
即便不考慮整體使用 Beam,該項目提供的許多內部軟件包也可用于其它一些項目中,例如其中的 fanout 和 查詢規劃器 模塊。
最后一點,Beam 也是一個非常適于他人從中學習的項目。它提供了很好的中心日志架構參考,也是一個具有相當規模的 Go 項目。
我們希望大家關注 Beam 項目,不吝指教。歡迎提出軟件缺陷、特性需求,并以 GitHub Issues(https://github.com/eBay/beam/issues) 方式提出問題。
查看英文原文:
https://www.ebayinc.com/stories/blogs/tech/beam-a-distributed-knowledge-graph-store/
OpenKG
開放知識圖譜(簡稱 OpenKG)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。
點擊閱讀原文,進入 OpenKG 博客
總結
以上是生活随笔為你收集整理的技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目架构之传统三层架构和领域模型三层架构
- 下一篇: 手把手教你成为年薪60万的架构师