技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询

本文转载自公众号:AI前线。


  


640?wx_fmt=jpeg 作者 | 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 层接收来自客户的请求,将写入请求附加到日志中,并从视图服务器获取数据以响应读取请求。

640?wx_fmt=png

图一 Beam 的中心化日志架构

中心化日志在本质上存在一个瓶颈问题,即日志附加的最大速率决定了整个数据集更新的最大速率。另一方面,中心化日志简化了很多特性的实现,例如跨分区交易、一致性查询和历史全局快照、复制、数据迁移、集群成员管理、分区和数据集的多方式索引等。详细信息,参见项目 GitHub 代码库提供的 docs/central_log_arch.md。

Beam 的详细实现如图二所示。其中,日志接口采用模块化设计。Beam 当前推荐使用 Apache Kafka 实现日志,支持新日志在确认前持久化写入磁盘的配置。Beam 已提供了一种称为“DiskView”的单视图实现。DiskView 支持以两种运行模式,即分别根据知识图谱事实条目的“主体 - 谓词”和“谓词 - 客体”组合构建索引。典型的 Beam 部署将对每种模式各建立三个基于多划分的副本。DiskViews 使用同样支持模块化的 RocksDB 存储事实条目。API 服务器提供复杂的查询处理器,我们将在下面详细介绍。Beam 提供称为事务计时器的轻量级进程。在 API 服务器出现故障而导致事务处理缓慢时,事务计时器将对事务做超时处理。

640?wx_fmt=png

图二 Beam 的详细实现结构图

API 服务器提供了丰富的功能,难以用一个简单的框图表示。API 服务器中实现了整个查询处理器,如图三所示。Beam 的查询处理器实现了一种类似于 SPARQL 子集的查询语言,语法类似于 SQL 语句,但适用于知识图谱查询。查询处理器包括解析器、基于代价的查询规划器和并发执行引擎。解析器将初始查询语句解析为抽象语法树(AST)。查询规划器为抽象语法树添加数据统计信息,进而给出高效的执行计划。查询执行引擎运行执行计划,使用批处理和留处理方式实现高性能查询。执行引擎基于 View Client/RPC Fanout 模块,从多个视图服务器高效获取数据。详细信息,参见项目 GitHub 代码库提供的 docs/protobeam_v3.md。

640?wx_fmt=png

图三 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)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

640?wx_fmt=jpeg

点击阅读原文,进入 OpenKG 博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020国内互联网公司的开源项目及Github地址部分汇总

2020国内互联网公司的开源项目及Github地址部分汇总 一、Alibaba 阿里巴巴 阿里巴巴的开源项目很多&#xff0c;都说国内Java公司的技术架构大部分来自阿里系&#xff0c;而且还有很多重量级的项目&#xff0c;例如LVS、Tengine&#xff0c;或者很有实践价值的中间件&#xf…

端到端问答新突破:百度提出RocketQA,登顶MSMARCO榜首

源 | 机器之心开放域问答&#xff08;Open-domain QA&#xff09;一直是自然语言处理领域的重要研究课题。百度从面向端到端问答的检索模型出发&#xff0c;提出了RocketQA训练方法&#xff0c;大幅提升了对偶式检索模型的效果&#xff0c;为实现端到端问答迈出了重要的一步。R…

深度剖析RPC框架的核心设计

做过分布式服务端的Java工程师&#xff0c;随着对技术底层的认知的加深&#xff0c;都会或多或少的会去想: 一个RPC框架需要考虑的问题有哪些&#xff0c;如何来解决&#xff1f; 下面我们围绕RPC通信框架&#xff0c;从如何实现这个角度做一个剖析&#xff0c;以及每个环节能…

LeetCode 200. 岛屿数量(图的遍历)

文章目录1. 题目信息2. 解题2.1 DFS2.2 BFS1. 题目信息 给定一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你…

论文浅尝 | 引入“引用”的语言模型

笔记整理&#xff1a;杨帆&#xff0c;浙江大学硕士&#xff0c;研究方向知识图谱.论文链接&#xff1a;https://arxiv.org/pdf/1611.01628.pdf动机Referring expression&#xff08;RE&#xff09;在自然语言中十分常见&#xff0c;并且在信息交流中扮演了十分重要的角色&…

短文本语义匹配/文本相似度框架(SimilarityNet, SimNet),基于bow_pairwise模式及框架原理介绍

用PaddlePaddle实现段文本语义匹配Simnet模型 https://aistudio.baidu.com/aistudio/projectdetail/124373 Hinge loss&#xff1a; https://blog.csdn.net/hustqb/article/details/78347713 原文链接&#xff1a;https://blog.csdn.net/qq_33187136/article/details/10677043…

卖萌屋招人啦!

萌萌的小夕突然出现&#xff5e;这次来寻找小伙伴一起建设小屋啦&#xff01;本期提供四种通道可直达卖萌屋核心腹地&#xff01;小编/作者日常&#xff1a;发现&#xff0c;拍脑袋&#xff0c;然后写写写外部投稿的审核与编辑基本条件&#xff1a;对NLP、CV、IR、Rec、Ads、DM…

LeetCode 36. 有效的数独(哈希)

文章目录1. 题目信息2. 解题2.1 暴力3次遍历查找2.2 一次遍历查找1. 题目信息 判断一个 9x9 的数独是否有效。只需要根据以下规则&#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线…

如何从0到1设计一个类Dubbo的RPC框架

之前分享了如何从0到1设计一个MQ消息队列&#xff0c;今天谈谈“如何从0到1设计一个Dubbo的RPC框架”&#xff0c;重点考验&#xff1a; 你对RPC框架的底层原理掌握程度。 以及考验你的整体RPC框架系统设计能力。 RPC和RPC框架 1.RPC&#xff08;Remote Procedure Call&#x…

shell脚本实现命令的自动执行

背景&#xff1a;在我傻傻的手工执行命令整整一天手腕都有点疼之后发现shell这个大宝贝简直开心的不得了 1. 关于shell脚本的使用&#xff1a; 一、编写完成的shell脚本放到脚本要执行的文件的相同目录下 二、注意shell脚本的编码问题&#xff08;windows和mac下编写的脚本格式…

论文征集 | 2019 Joint International Semantic Technology Conference

第九届国际语义技术联合会议将于今年十一月在美丽的杭州召开&#xff0c;现在征集优秀的研究论文&#xff0c;本届会议还专门设置了special session track&#xff0c;优秀论文将被推荐到SCI期刊发表&#xff0c;敬请赐稿&#xff01;http://jist2019.openkg.cn/The Joint Inte…

阿里P8架构师谈:主流RPC框架详解,以及与SOA、SOAP、REST的区别

什么是RPC RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 简言之&#xff0c;RPC使得程序能够像访问本地系统资源一样&#xff0c;去…

LeetCode 322. 零钱兑换(DP)

文章目录1. 题目信息2. 解题2.1 回溯穷举2.2 动态规划1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount。 编写一个函数来计算可以凑成总金额所需的最少的硬币个数。 如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1。 示例 1: 输入: coins [1, 2, 5], …

服务器使用

杀死用户lyli的所有进程 killall -u lyli杀是PID为19347的进程 kill -s 9 19347查看CPU的使用情况 free -h 查看进程实时情况 top一般有用的就这两个&#xff0c;RES是实际占了多少内存&#xff0c;%CPU除以100%就是占了多少块CPU

可以闭眼入的O'REILLY机器学习神书出新版了!

传说中的机器学习“四大名著”中最适合入门的一本——“蜥蜴书”新版来了&#xff01;这本书的英文原版是美国亚马逊AI霸榜图书&#xff0c;在人工智能、计算机神经网络、计算机视觉和模式识别三大榜单中&#xff0c;均为榜首&#xff01;国内外好评率均超过90%&#xff01;读者…

论文浅尝 | 基于知识库的神经网络问题生成方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;NLPCC2018链接&#xff1a;http://tcci.ccf.org.cn/conference/2018/papers/EV7.pdf问题背景与动机作者认为&#xff0c;目前的问题语料生成主要依赖于人…

何使用BERT模型实现中文的文本分类

原文网址&#xff1a;https://blog.csdn.net/Real_Brilliant/article/details/84880528 如何使用BERT模型实现中文的文本分类前言Pytorchreadme参数表算法流程1. 概述2. 读取数据3. 特征转换4. 模型训练5. 模型测试6. 测试结果7. 总结前言 Google官方BERT代码&#xff08;Tenso…

LeetCode 152. 乘积最大子序列(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个整数数组 nums &#xff0c;找出一个序列中乘积最大的连续子序列&#xff08;该序列至少包含一个数&#xff09;。 示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:输入: [-2,0,-1] 输出: 0 解释…

YouTube深度学习推荐系统的十大工程问题

文 | 王喆源 | https://zhuanlan.zhihu.com/p/52504407这篇文章主要介绍了YouTube深度学习系统论文中的十个工程问题&#xff0c;为了方便进行问题定位&#xff0c;我们还是简单介绍一下背景知识&#xff0c;简单回顾一下YouTube的深度推荐系统论文Deep Neural Networks for Yo…

RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c;只需一个应…