20

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

4

6 回答 6

14

I have been thinking about using these two together for a while because my data is already in mongodb. But I don't want to add one more DB top of the existing architecture, because addition of neo4j will require more resources e.g. memory, diskspace and not to mention time invested in maintaining 2 DBs.

Another problem which I can think of is when you shard your data with mongodb, you'll also have to manage your neo4j data w.r.t. these new shards. Scaling in neo4j is done through clusters and it is a part of enterprise edition which is commercial.

I did further research and found out that OrientDB can store the data as documents and its a graph db.

Another way is building the relationships in MongoDB itself and write your logic on top of that and expose this logic through a REST API.

于 2013-02-27T17:10:00.133 回答
10

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

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

于 2015-10-28T23:53:23.350 回答
6

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

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

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

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

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

于 2013-02-27T16:10:29.653 回答
5

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

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

Neo4j的使用方式你要挑剔,最后我们把它用于最短路径计算/搜索,这是Neo4j的强项。

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

于 2015-12-28T16:43:01.670 回答
2

我会看看Gremlin。

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

于 2013-02-27T17:28:51.517 回答
1

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

于 2015-02-25T21:30:08.420 回答