一起使用MongoDB和Neo4j

时间:2013-02-27 14:47:58

标签: mongodb neo4j nosql

我正在开始一个新项目,我正在寻找使用MongoDB作为文档存储工具和Neo4j作为映射文档之间关系的机制,然后我想通过rest API公开我的查询结果。 人们会说这样做的优点和缺点是什么? 是否有更好的方法可以使用不同的NoSQL文档存储来实现这一目标? 有没有人可以在网上找到有人试图做类似事情的例子?

6 个答案:

答案 0 :(得分:13)

我一直在考虑将这两者结合使用一段时间,因为我的数据已经在mongodb中了。但是我不想再添加现有架构的DB顶部,因为添加neo4j将需要更多资源,例如内存,磁盘空间,更不用说维护2个DB的时间。

我能想到的另一个问题是,当您使用mongodb对数据进行分片时,您还必须管理您的neo4j数据w.r.t.这些新的碎片。 neo4j中的扩展是通过集群完成的,它是商业版的一部分,是商业版。

我做了进一步的研究,发现 OrientDB 可以将数据存储为文档及其图形数据库。

另一种方法是在MongoDB本身中构建关系,并在此基础上编写逻辑,并通过REST API公开此逻辑。

答案 1 :(得分:5)

如果你喜欢Neo4j,你应该看看Structr(https://github.com/structr/structrhttp://structr.org)。

使用Structr,您可以在Neo4j之上定义自定义模式(在Java中,或者从0.7开始,甚至通过UI),它将为您创建一个(几乎)生产就绪的RESTful JSON API。

JSON“文档”由Structr实时创建,作为Neo4j中子图的任何聚合或映射。这允许您在同一数据上定义任意数量的不同视图。

Structr具有内置功能,如搜索(全文,关键字/精确,具有Neo4j空间的位置范围),分页,排序,约束,用户/组,访问控制,类似cron的后台作业,维护命令,以及CRUD操作和基本CMS功能的补充(测试版)用户界面。

免责声明:我是Structr的创始人。

答案 2 :(得分:5)

您可能对Neo4j Doc ManagerMongo Connector感兴趣。它是Mongo Connector项目的扩展,允许从MongoDB到Neo4j的实时单向同步数据。插入MongoDB的文档将转换为属性图并自动插入到Neo4j中。可以配置从Mongo到Neo4j同步的集合和字段。

这里的想法是促进在单个应用程序中一起使用Neo4j和MongoDB,而无需在应用程序层中编写代码来同步数据。

答案 3 :(得分:3)

我们最终使用Neo4j作为"索引"做路由计算(在公共汽车/火车搜索中)。大部分数据存储在MongoDB中。我们使用MongoConnector作为同步两个数据库的方法。 Mongo在处理原始JSON数据方面表现出色。

我们试图存储"一切"最初在Neo4j,然后查询开始花了+ 2分钟,所以之后我们只存储了必要的最小数据。此外,Neo4j对您可以索引的内容有限制。例如,他们没有" date"类型,因此日期范围查询很麻烦。当你有一个超级节点",一个拥有数千或数十万个链接(关系)的节点时,你也会遇到问题。关系在Neo4j中存储为链接列表,因此随机访问可能非常慢(用于查找关系)。

你必须挑剔如何使用Neo4j,最后我们用它来进行最短路径计算/搜索,这是Neo4j的强度。

有关详细信息,请查看视频并在GraphConnect NY 2013上展示我们的发现: https://vimeo.com/79477603

答案 4 :(得分:2)

我会看看格雷姆林。

查看这篇文章:http://thinkaurelius.com/2013/02/04/polyglot-persistence-and-query-with-gremlin/我个人觉得在处理数据时Groovy语法很棒。

答案 5 :(得分:1)

在neo4j中你应该构建你的关系,例如,如果你有mongodb中的2个用户,如果一个跟随另一个你应该在neo4j中建立节点关系,而是使用info创建另一个集合。你应该使用2个数据库作为一个。