MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]

Posted

技术标签:

【中文标题】MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]【英文标题】:MongoDB + Neo4J vs OrientDB vs ArangoDB [closed] 【发布时间】:2014-12-29 12:18:11 【问题描述】:

我目前正处于 MMO 浏览器游戏的设计阶段,游戏将包括一些实时位置的瓦片地图(因此每个单元格的瓦片数据)和一般的世界地图。我更喜欢将 MongoDB 用于持久数据世界的游戏引擎。

我还将实现一个运输模拟(我将在下面详细解释),它基本上是一个 Dijkstra 模块,我决定使用图形数据库希望它可以让事情变得更容易,发现 Neo4j 因为它很受欢迎。

我对 MongoDB + Neo4J 设置很满意,但后来注意到 OrientDB ,它显然就像 MongoDB 和 Neo4J(两全其美?),他们甚至有 MongoDB 和 Neo4J 的 VS 页面。

关键是,我听说过一些关于 MongoDB 丢失数据的恐怖故事(虽然不确定它仍然会丢失),但我没有这种奢侈。对于 Neo4J,我不太喜欢每年 12K 欧元的“启动友好”成本,尽管我可能不会拥有数百万个顶点的数据库。 OrientDB 似乎是一个可行的选择,因为也有可能使用一个数据库解决方案。

在这种情况下,一个合乎逻辑的举动可能是跳到 OrientDB,但它的社区很小,tbh 没有找到太多关于它的评论,MongoDB 和 Neo4J 是广泛使用的流行工具,我担心 OrientDB 是否是一次冒险。

我的第一个问题是您是否对这些数据库有任何经验/意见。

第二个问题是哪个图形数据库更适合航运模拟。使用的数据库预计会计算从任何顶点到任何顶点的最便宜的路线并遍历它(经典的 Dijkstra)。但也必须根据情况改变权重,例如“B国对A国实行禁运,因此来自A国的任何物品都不能通过B,XYZ地区有洪水,因此无法进行陆路运输”等。还有那个数据库预计会缓存结果。我预计不超过 1000 个顶点,但有很多边。

如果问题有点含糊,请提前致歉

PS : 我在标题中添加了 ArangoDB,但暂时没有太多机会看一看。


截至 2016 年 4 月 18 日的后期编辑:在评估了对我的问题和开发策略的回答后,我决定使用 ArangoDB,因为他们的路线图对我来说更有希望,因为他们显然不想添加大量的炒作功能,而这些功能只有一半出炉了。

【问题讨论】:

您还可以看看 Structr 的 JSON/REST 后端(structr.org,它也是开源的)。它基本上将 Neo4j 变成了一个文档数据库。免责声明:我是该项目的发起人。 您将使用什么语言?您还应该考虑每个数据库社区的规模、找到兼容包的难易程度、文档的质量以及驱动程序的成熟度。 MongoDB 在各个方面都很成熟,而 Neo4j(我使用并强烈推荐)可能是第二的。正如 Michael Hunger 所说,不要让许可页面吓到你。 @subvertallchris : 目前的计划是使用 node.js 和 laravel,但可能会切换到纯 JS 解决方案。 下面回答这个问题的人似乎与 OrientDB、ArangoDB 或 Neo4j 密切相关,所以我会对他们的意见持保留态度。不幸的是,很难在每个系统上获得可靠且公正的数据,而且它们正在迅速发展。我看到的唯一可行的途径是为每个人构建一个概念验证系统,看看它是否符合您的需求。 【参考方案1】:

免责声明:我是 OrientDB 的作者和所有者。

作为开发人员,一般来说,我不喜欢那些隐瞒成本并让您暂时使用他们的技术的公司,一旦您对它感到紧张,就开始要钱。实际上,一旦您花费数月时间来开发使用非标准语言或 API 的应用程序,您就会搞砸了:支付或迁移应用程序需要巨额成本。

您知道,OrientDB 对于任何用途(甚至是商业用途)都是免费。此外,OrientDB 支持 SQL 等标准(带有扩展),主要的 Java API 是 TinkerPop Blueprints,即图形数据库的“JDBC”标准。此外OrientDB还支持Gremlin。

OrientDB 项目每天都在增加新的贡献者和用户。社区组(寻求支持的免费渠道)是most active community in GraphDB market。

如果您对要使用的 GraphDB 有疑问,我的建议是获取更接近您需求的内容,然后尽可能多地使用标准。这样一来,最终的切换影响就会很小。

【讨论】:

使用 OrientDB,您拥有两种模型,因此您可以将数据建模为具有复杂类型的图形,例如 MongoDB。大多数用户利用 OrientDB 中的这种混合模型,在域复杂性上毫不妥协。此外,只要您需要扩展,您只需添加零配置的服务器。 补充 Lvca 的想法,似乎图形数据库对你来说是很自然的。不要被挑衅性营销所误导,OrientDB 正在与许多大公司评估并选择它而不是该领域的其他选项。我是团队中的一员,负责处理许多客户咨询。在过去的几个月里,我看到最大的科技公司让 TEAMS 的开发人员进行了广泛的评估,并选择了 OrientDB 来满足图形需求。所以这是一次冒险,因为它对你来说是新的,而不是因为它未经证实或以任何方式粗略。如果您需要入门帮助,请告诉我们。 我要向大家指出,“@Luca 是 #OrientDB 背后的公司 Orient Technologies 的创始人兼首席执行官。” (见简介)。 好的,我再试试看 比较文档我更喜欢 arangodb 而不是 orientdb - @Luca - 请考虑重大改进。【参考方案2】:

听起来好像您的用例正是 ArangoDB 的设计目标:您似乎需要在同一个应用程序中使用不同的数据模型(文档和图表),甚至可能希望将它们混合在一个查询中。这就是像 ArangoDB 这样的多模型数据库大放异彩的地方。

如果到目前为止 MongoDB 为您提供了良好的服务,那么您会立即对 ArangoDB 感到满意,因为它在外观和感觉上非常相似。此外,您可以通过将顶点存储在一个(或多个)集合中并将边存储在一个或多个所谓的“边集合”中来对图形进行建模。这意味着各个边缘本身就是简单的文档,并且可以保存任意 JSON 数据。然后,该数据库提供遍历,可使用 javascript 进行自定义以满足您可能有的任何需求。

对于查询的变体,您可以例如将有关这些禁运的属性添加到您的顶点,并对查询/遍历进行编程以将这些考虑在内。

ArangoDB 数据库在 Apache 2 许可下获得许可,社区和专业支持随时可用。

如果您有任何更具体的问题,请随时在 google 群组中提问

https://groups.google.com/forum/#!forum/arangodb

或联系

hackers (at) arangodb.org

直接。

【讨论】:

此外,在 ArangoDB 中,基于 Dijkstra 的最短路径实现已经在查询语言中可用。【参考方案3】:

Neo4j 的定价实际上是相当灵活的,所以不要被网站上的价格吓到。 您也可以长期使用社区版或个人版。

Neo4j 社区非常活跃,乐于助人,可以快速为您的问题提供支持和帮助。我认为这是除了性能和便利性之外的最大优势。一世 n 一般使用图模型

关于您的用例:

Neo4j 正是被世界上最大的物流公司之一用于这种路线计算场景,它在全国范围内每秒运送多达 4000 个包裹。

它还用于其他游戏引擎,例如 here at GameSys 用于游戏经济模拟和另一个用于路由(不是在地球坐标中,而是在使用 Neo4j-Spatial 的游戏世界坐标中)。

我很好奇为什么你只有这么几个节点?那些像运输门户吗?我想知道您在哪里存储有关路线的详细信息和动态(例如您提到的标准)它们来自外部 - 在游戏引擎的内存状态中?

您可能应该分享有关您的模型和具体用例的更多详细信息。

知道我和 Neo4j 的创始人之一 Emil 都是多用户地下城 (MUD) 的老玩家可能会有所帮助,所以这绝对是一个贴近我们内心的用例 :)

【讨论】:

您好,正如您所提到的,它们正是运输门户(在这种情况下为海港、机场、火车站等),认为如果再深入就会失控(或者不是吗? )。对于有关“禁运、灾难、战争等”的数据,我可以接受任何选择(不过我最初的想法是将它们保存在图形数据库中)。谢谢回复,顺便说一句

以上是关于MongoDB + Neo4J vs OrientDB vs ArangoDB [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails 2.4.2 项目中集成 Spring Data Neo4j 和 Mongodb

社交应用的多对多关系:Mongodb 或 Neo4j 等图形数据库

Neo4j - Cypher vs Gremlin 查询语言

ArangoDB图数据库--总参

谷歌云是不是支持 neo4j?

10分钟上手图数据库Neo4j