Akutan

分布式知识图存储。(A distributed knowledge graph store)

  • 所有者: eBay/akutan
  • 平台: Docker, Kubernetes, Linux, Mac
  • 許可證: Apache License 2.0
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

Akutan(阿库坦)

有一篇博文是 对 Akutan 的一个很好的介绍

Akutan 是一个分布式知识图存储,有时也被称为 RDF 存储或三层存储。知识图适合于对那些由多种类型关系、高度互联的数据进行建模,比如关于世界的百科信息。知识图存储可以对其数据进行丰富的查询,这些查询可用于驱动实时界面,补充机器学习应用,并在现有知识的背景下理解新的非结构化信息。

如何将数据建模为知识图,以及如何查询数据,对于来自 SQL、NoSQL 和属性图存储的人来说,感觉会有些不同。在知识图中,数据被表示为单个事实表,其中每个事实都有一个主题、谓语和对象。这种表示方式使存储能够筛选数据进行复杂的查询,并应用推理规则,提高抽象程度。下面是一个微小图的例子:

subject predicate object
<John_Scalzi> <born> <Fairfield>
<John_Scalzi> <lives> <Bradford>
<John_Scalzi> <wrote> <Old_Mans_War>

要了解如何在 Akutan 中表示和查询数据,请参阅 docs/query.md

Akutan 的设计是为了存储无法在单一服务器上容纳的大型图形。它是可扩展的,它可以存储多少数据,它可以执行查询的速度。但是,Akutan 通过中心日志对图形的所有变化进行序列化,这从根本上限制了总的变化率。变化率不会随着服务器数量的增加而提高,但一个典型的部署应该能够处理每秒数万次的变化。作为这种限制的交换,Akutan 的架构是一个相对简单的架构,可以实现很多功能。例如,Akutan 支持事务性更新和历史全局快照。我们相信,这种权衡适合大多数知识图谱用例,它积累了大量的数据,但这样做是在一个适度的速度。要了解更多关于 Akutan 的架构和这种权衡,请参阅 docs/central_log_arch.md

Akutan 还没有做好生产关键型部署的准备,但它现在对某些用例很有用。为了开发目的,我们已经运行了 20 台服务器的 Akutan 部署和离线用例大约一年了,我们通常装载了大约 25 亿个事实的数据集。我们相信 Akutan 目前的能力超过了这个能力和规模:我们还没有把 Akutan 推向极限。该项目具有良好的架构基础,可以在此基础上构建其他功能,并实现更高的性能。

Akutan 需要更多的关爱才能用于关键生产的部署。Akutan 的大部分代码都是由高质量、文档化、单元测试的模块组成的,但是代码库的一些部分继承了 Akutan 早期的原型,仍然需要注意。在其他地方,Akutan 在用作关键的生产数据存储之前缺乏一些功能,包括删除事实、备份存储和自动化集群管理。我们已经为这些和其他一些事情提交了 GitHub 问题。此外,Akutan 还有一些地方可以改进,但不一定会阻止生产使用。例如,Akutan 的查询语言与 Sparql 不太兼容,它的推理引擎也很有限。

所以,Akutan 有一个很好的基础,可能对一些人有用,但它也需要额外的关爱。如果不适合您,这里有一些可供选择的开源知识和属性图存储(我们与这些项目没有关联)

  • Blazegraph:一个 RDF 存储。支持多种查询语言,包括 SPARQL 和 Gremlin。基于磁盘,单主站,只用于读取。似乎无人维护。Powers https://query.wikidata.org/。
  • Dgraph:一个面向三层的属性图存储。类似 GraphQL 的查询语言,不支持 SPARQL。基于磁盘,可扩展。
  • Neo4j:一个属性图存储。Cypher 查询语言,不支持 SPARQL。单主,只对读进行扩展。

也可以参考维基百科的 比较 Triplestores 页面。

本 README 的其余部分描述了如何让 Akutan 启动和运行。docs/ 目录下的几个文档更详细地描述了 Akutan 的各个方面,请参阅 docs/README.md 的概述。

安装依赖关系和构建 Akutan

Akutan 有以下系统依赖性:

它是用Go语言编写的,你需要v1.11.5或更新的版本。你需要v1.11.5或更新的版本。

Akutan广泛使用 Protocol Buffers 为 gRPC 编码消息,数据变化的日志,并存储在磁盘上。你需要 protobuf 版本 3。我们推荐 3.5.2 或更高版本。请注意,3.0.x 是许多 Linux 发行版的默认值,但不支持 Akutan 构建工作。

Akutan的磁盘视图将他们的事实存储在 RocksDB 中。

在 Mac OS X 上,这些都可以通过 Homebrew 安装。

$ brew install golang protobuf rocksdb zstd

在 Ubuntu 上,参考 docker/ 目录下的文件,了解使用 apt-get 的包名。

克隆 Akutan 仓库后,拉下几个 Go 库和额外的 Go 工具。

$ make get

最后,建立项目:

$ make build

在本地运行 Akutan

在本地运行 Akutan 的最快方法是启动内存中的日志存储:

$ bin/plank

然后打开另一个终端,运行:

$ make run

这将在本地启动几个 Akutan 服务器。它启动一个 API 服务器,在 localhost 上监听端口 9987 的 gRPC 请求和端口 9988 的 HTTP 请求,如 http://localhost:9988/stats.txt

与 API 服务器交互的最简单方法是使用 bin/akutan-client。请看 docs/query.md 的例子。API 服务器公开了在 proto/api/akutan_api.proto 中定义的 FactStore gRPC 服务。

部署问题

日志

之前,我们使用 bin/plank 作为日志存储,但这并不适合实际使用! Plank 只在内存中,不被复制,而且默认情况下,它一次只保留 1000 个条目。它只用于开发。

Akutan 还支持使用 Apache Kafka 作为其日志存储。在任何部署中,推荐使用这种方法。要使用 Kafka,请按照 Kafka 快速入门指南安装 Kafka,启动 ZooKeeper,并启动 Kafka。然后创建一个名为 "akutan" 的主题(而不是 Kafka 指南中的 "test"),并将分区设置为 1,您将需要配置 Kafka 以同步地将条目写入磁盘。

要将 Kafka 与 Akutan 一起使用,在你的 Akutan 配置中设置 akutanLog 的类型为 kafka(默认:local/config.json),并相应地更新定位器的地址(Kafka 默认使用 9092 端口)。在重启集群之前,你需要清除 Akutan 的 Disk Views 的数据。磁盘视图默认将数据存储在 $TMPDIR/rocksdb-akutan-diskview-{space}-{partition} 中,所以你可以用 rm -rf $TMPDIR/rocksdb-akutan-diskview* 将它们全部删除。

Docker 和 Kubernetes

这个资源库包括支持在 Docker 和 Minikube 内运行 Akutan。这些环境对于开发目的来说可能很繁琐,但作为迈向现代和强大的生产部署的一步,它们是有用的。

请参阅 cluster/k8s/Minikube.md 文件,了解在 Minikube 中构建和部署 Akutan 服务的步骤。它还包括构建 Docker 镜像的步骤。

分布式追踪

Akutan 生成分布式 OpenTracing 跟踪,供 Jaeger 使用。要尝试它,请按照 Jaeger 入门指南来运行多合一的 Docker 映像。默认的 make run 被配置为将 traces 发送到那里,你可以在 http://localhost:16686 查询。Minikube 集群还包括一个 Jaeger 一体机实例。

开发

VS Code

你可以使用任何你喜欢的编辑器,但这个资源库包含了 VS Code 的一些配置。我们建议使用以下扩展。

用 ./vscode-settings.json5 覆盖 .vscode/settings.json 中的默认设置。

测试目标

Makefile 中包含了与运行测试有关的各种目标。

目标 描述
make test 使测试运行所有 akutan 单元测试。
make cover 使覆盖运行所有 akutan 单元测试,并打开基于 Web 的覆盖查看器。
make lint 运行基本代码 linting
make vet 运行所有静态分析测试,包括 linting 和格式化测试

许可证信息

Copyright 2019 eBay Inc.

主要作者:Simon Fell、Diego Ongaro、Raymond Kroeker、Sathish Kandasamy。

根据 Apache 许可证 2.0 版("License")授权;除非符合许可证的规定,否则您不得使用该文件。您可以在 https://www.apache.org/licenses/LICENSE-2.0 获得许可证的副本。

除非适用的法律要求或书面同意,根据许可证发布的软件是在 "AS IS" 的基础上发布的,没有任何形式的明示或暗示的保证或条件。请参阅许可证中关于许可证下权限和限制的具体语言。


(The first version translated by vz on 2020.12.26)

主要指標

概覽
名稱與所有者eBay/akutan
主編程語言Go
編程語言Makefile (語言數: 4)
平台Docker, Kubernetes, Linux, Mac
許可證Apache License 2.0
所有者活动
創建於2019-04-04 22:32:19
推送於2019-07-18 23:39:49
最后一次提交2019-07-18 16:39:48
發布數0
用户参与
星數1.7k
關注者數64
派生數106
提交數41
已啟用問題?
問題數28
打開的問題數19
拉請求數13
打開的拉請求數0
關閉的拉請求數0
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?

Akutan

Build Status
GoDoc

There's a blog post that's a good introduction to Akutan.

Akutan is a distributed knowledge graph store, sometimes called an RDF store or a
triple store. Knowledge graphs are suitable for modeling data that is highly
interconnected by many types of relationships, like encyclopedic information
about the world. A knowledge graph store enables rich queries on its data, which
can be used to power real-time interfaces, to complement machine learning
applications, and to make sense of new, unstructured information in the context
of the existing knowledge.

How to model your data as a knowledge graph and how to query it will feel a bit
different for people coming from SQL, NoSQL, and property graph stores. In a
knowledge graph, data is represented as a single table of facts, where each
fact has a subject, predicate, and object. This representation enables the
store to sift through the data for complex queries and to apply inference rules
that raise the level of abstraction. Here's an example of a tiny graph:

subject