同时使用MongoDB和Neo4j

同时使用MongoDB和Neo4j,mongodb,neo4j,nosql,Mongodb,Neo4j,Nosql,我正在启动一个新项目,我正在考虑使用MongoDB作为文档存储工具,使用Neo4j作为映射文档之间关系的机制,然后我希望通过RESTAPI公开查询结果。 这样做的优点和缺点是什么? 有没有更好的方法来实现这一点,或者使用不同的NoSQL文档存储? 有没有人在网上找到过类似的例子?如果你喜欢Neo4j,你应该看看Structr(,) 使用Structr,您可以在Neo4j之上定义一个自定义模式(在Java中,或者从0.7开始,甚至通过UI),它将为您创建一个(几乎)可用于生产的RESTful JS

我正在启动一个新项目,我正在考虑使用MongoDB作为文档存储工具,使用Neo4j作为映射文档之间关系的机制,然后我希望通过RESTAPI公开查询结果。 这样做的优点和缺点是什么? 有没有更好的方法来实现这一点,或者使用不同的NoSQL文档存储?
有没有人在网上找到过类似的例子?

如果你喜欢Neo4j,你应该看看Structr(,)

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

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

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


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

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

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

我做了进一步的研究,发现可以将数据存储为文档,它是一个图形数据库


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

我想看看小精灵


查看本文:我个人认为Groovy语法在处理数据时非常棒

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

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


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

我们最终使用Neo4j作为“索引”来进行路线计算(在公共汽车/火车搜索中)。大部分数据存储在MongoDB中。我们使用MongoConnector来同步这两个数据库。Mongo在处理原始JSON数据方面具有优势

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

你必须对如何使用Neo4j非常挑剔,最终我们将其用于最短路径计算/搜索,这是Neo4j的优势所在

有关更多详细信息,请查看2013年纽约GraphConnect上的视频和我们调查结果的演示: