图数据库和RDF三元组:Python中图数据的存储

2024-01-02

我需要用 python 开发一个图形数据库(如果有人能加入我的开发,我会很高兴。我已经有了一些代码,但我很乐意讨论它)。

我在互联网上做了研究。在爪哇语中,neo4j http://neo4j.org/是一个候选者,但我找不到任何有关实际磁盘存储的信息。在Python中,有很多图数据模型 http://wiki.python.org/moin/PythonGraphApi(请参阅此 pre-PEP 提案,但它们都不能满足我从磁盘存储和检索的需求。

不过,我确实了解三重存储。 Triplestores 基本上是 RDF 数据库,因此可以将图形数据模型映射到 RDF 中并存储,但我通常对此解决方案感到不安(主要是由于缺乏经验)。一个例子是Sesame http://www.openrdf.org/。事实上,在任何情况下,您都必须从内存中的图形表示转换为 RDF 表示,反之亦然,除非客户端代码想要直接破解 RDF 文档,而这几乎是不可能的。这就像直接处理数据库元组,而不是创建对象。

存储和检索的最新技术是什么(a la目前,Python 中的图形数据 DBMS)?希望在对此感兴趣的人的帮助下,并与 Graph API PEP 的提议者合作,开始开发一个实现是否有意义?请注意,这将是我接下来几个月工作的一部分,所以我对这个最终项目的贡献是非常严肃的;)

Edit: 也找到了有向边 http://blog.directededge.com/2009/02/27/on-building-a-stupidly-fast-graph-database/,但它似乎是一个商业产品


我都用过Jena http://jena.sourceforge.net/,这是一个 Java 框架,并且快板 http://www.franz.com/agraph/allegrograph/(Lisp、Java、Python 绑定)。 Jena 有一个用于存储图形数据的姐妹项目,并且已经存在了很长很长时间。 Allegrograph 非常好,并且有免费版本,我想我会推荐这个,因为它易于安装、免费、快速,并且您可以立即启动并使用。学习一点 RDF 和 SPARQL 所获得的力量可能非常值得您花时间。如果您已经了解 SQL,那么您就有了一个良好的开端。能够使用 SPARQL 查询图形将为您带来一些巨大的好处。序列化为 RDF 三元组很容易,并且某些文件格式非常简单(例如 NT)。我举个例子。假设您有以下图形节点-边缘-节点 ID:

1 <- 2 -> 3
3 <- 4 -> 5

这些已经是主语谓语宾语形式,因此只需在其上添加一些 URI 表示法,将其加载到三元组存储中并通过 SPARQL 随意查询。这是 NT 格式:

<http://mycompany.com#1> <http://mycompany.com#2> <http://mycompany.com#3> .
<http://mycompany.com#3> <http://mycompany.com#4> <http://mycompany.com#5> .

现在查询距离节点 1 两跳的所有节点:

SELECT ?node
WHERE {
    <http://mycompany.com#1> ?p1 ?o1 .
    ?o1 ?p2 ?node .
}

这当然会产生http://mycompany.com#5>.

另一位候选人是Mulgara http://www.mulgara.org/,用纯Java编写。因为你似乎对 Python 更感兴趣,但我认为你应该先看看 Allegrograph。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图数据库和RDF三元组:Python中图数据的存储 的相关文章

随机推荐