首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >图形数据库和RDF triplestore: python中图形数据的存储

图形数据库和RDF triplestore: python中图形数据的存储
EN

Stack Overflow用户
提问于 2009-08-19 23:07:36
回答 7查看 7.7K关注 0票数 18

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

我在互联网上做了调查。在Java语言中,neo4j是一个候选者,但是我找不到任何关于实际磁盘存储的东西。在python中,有许多graph data models (请参阅此pre-PEP建议,但它们都不能满足我从磁盘存储和检索需求。

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

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

编辑:也找到了directededge,但它似乎是一个商业产品

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-02 12:24:44

我使用过JenaAllegrograph (Lisp、Java、Python绑定)。Jena有用于存储图形数据的姊妹项目,并且已经存在很长时间了。Allegrograph非常好,而且有一个免费的版本,我想我会建议这个原因,因为它很容易安装,免费,快速,你可以立即上线。您从学习一些RDF和SPARQL中获得的力量可能非常值得您花时间学习。如果您已经了解SQL,那么您就有了一个很好的开始。能够使用SPARQL查询您的图形将为您带来一些巨大的好处。序列化到RDF三元组是很容易的,而且一些文件格式非常容易(例如NT )。我来举个例子。假设您有以下图node-edge-node ids:

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 ?节点位置{ http://mycompany.com#1 ?p1 ?O1.?o1 ?p2 ?节点。}

这当然会产生[http://mycompany.com#5](http://mycompany.com/#5)

另一个候选者是Mulgara,它是用纯Java编写的。但是,由于您似乎对Python更感兴趣,所以我认为您应该先看看Allegrograph。

票数 5
EN

Stack Overflow用户

发布于 2009-08-20 07:59:21

我认为解决方案实际上取决于您在设法将图形存储在磁盘/数据库中后想要对它做什么,而这在您的问题中有点不清楚。但是,您可能希望考虑以下几点:

  • 如果您只想持久化图形,而不想使用任何您期望从关系型数据库管理系统解决方案(如ACID)中获得的特性或属性,那么将对象保存到一个平面文件中会怎么样?非常初级,但就像我说的,取决于你到底想要什么,achieve.
  • ZODB是一个Python的对象数据库(我认为是从Zope项目中衍生出来的)。我不能说我在高性能环境中对它有过很多经验,但是有一些限制确实允许您在本地存储Python对象。
  • 如果您想使用RDF,有一个RDF Alchemy项目可能会帮助您减轻从图形到RDF结构转换的一些担忧,我认为Sesame是其堆栈的一部分。

在python站点上还有一些其他的persistence tools细节可能会让人感兴趣,但是我去年花了相当多的时间研究这个领域,最终我发现没有一个原生的Python解决方案可以满足我的需求。

我最成功的是使用带有自定义ORM的MySQL,我在this question的答案中发布了几个相关的链接。此外,如果你想为一个关系型数据库管理系统项目做贡献,当我和Open Query的一些人谈到a Graph storage engine for MySQL时,他们似乎很有兴趣积极参与他们的项目。

对不起,我不能给出一个更明确的答案,但我不认为有一个…如果您真的开始开发自己的实现,我很有兴趣了解您的最新进展。

票数 3
EN

Stack Overflow用户

发布于 2011-02-14 04:23:12

来自您的Serius Cybernetics智能代理的问候!

一些有用的链接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1303105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档