MongoDB + Neo4J与OrientDB和ArangoDB的比较

49

我目前正在设计一款MMO浏览器游戏,该游戏将包括一些实时位置的平铺地图(因此每个单元格都有平铺数据)和一个普通的世界地图。我喜欢的游戏引擎使用MongoDB来保存持久化数据。

我还将实现一种运输模拟(我稍后会更详细地解释),它基本上是一个Dijkstra模块,我决定使用一个图形数据库,希望这样做会使事情变得更容易,找到了颇受欢迎的Neo4j。

我对MongoDB + Neo4J组合感到满意,但随后发现了OrientDB,据说它就像MongoDB和Neo4J的结合体(两全其美?),他们甚至为MongoDB和Neo4J提供了VS页面。

重点是,我听说MongoDB有丢失数据的恐怖故事(虽然不确定现在是否仍然如此),而我没有这种奢侈品。对于Neo4J,我不是很喜欢每年12000欧元的“创业友好”费用,尽管我可能不会拥有数百万的顶点数据库。OrientDB似乎是一个可行的选择,因为也许可以有一些使用单一数据库解决方案的机会。

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

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

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

提前感谢您,如果问题有点模糊,请提前道歉。

PS:我在标题中加入了ArangoDB,但tbh还没有太多时间去看。

最新编辑时间为2016年4月18日:在评估了对我的问题和开发策略的回应后,我决定使用ArangoDB,因为他们的路线图对我来说更有前途,因为他们显然没有试图添加大量半烤特性。


你也可以看看 Structr 的 JSON/REST 后端(https://structr.org,它也是开源的)。它基本上将 Neo4j 转换成文档数据库。 免责声明:我是该项目的发起人。 - Axel Morgner
1
你将使用哪种编程语言?你还应考虑每个数据库社区的规模、是否能轻松找到兼容包、文档的质量和驱动程序的成熟度等因素。MongoDB在所有方面都非常成熟,而Neo4j(我使用并高度推荐)可能排名第二。正如Michael Hunger所说,不要让许可证页面吓到你。 - subvertallchris
@subvertallchris:目前的计划是使用node.js和laravel,但可能会转向纯JS解决方案。 - projectUnduli
看起来回答下面问题的人与OrientDB、ArangoDB或Neo4j有密切关联,因此我会对他们的意见持保留态度。不幸的是,获取每个系统可靠和公正的数据相当困难,而且它们正在快速发展。我所看到的唯一可行的路径是使用每个系统构建一个概念验证系统,并查看它是否符合您的需求。 - ThePhysicist
3个回答

44

声明:本人是OrientDB的作者和所有者。

作为一名开发者,我通常不喜欢那些隐藏成本并让你玩弄他们的技术一段时间,等你习惯了后就开始要钱的公司。实际上,一旦你投资了数月来开发使用非标准语言或API的应用程序,你就会陷入困境:付费或以巨大的成本迁移应用程序。

您知道,OrientDB可免费用于任何用途,包括商业用途。此外,OrientDB支持SQL(带扩展)等标准,主要Java API是TinkerPop Blueprints,这是Graph数据库的“JDBC”标准。此外,OrientDB还支持Gremlin

OrientDB项目每天都在增长,有越来越多的贡献者和用户。社区小组(免费询问支持的渠道)是GraphDB市场中最活跃的社区

如果您对要使用的GraphDB有疑问,我的建议是选择最适合您需要的,但尽可能使用标准。这样,即使发生切换,影响也很小。


4
除了Lvca的想法之外,似乎图形数据库也很适合你。不要被具有挑衅性的营销所迷惑,OrientDB在这个领域正在取得巨大成功,并且许多大型公司正在评估和选择它,而不是其他选项。我是该团队的一员,处理许多客户询问。在过去几个月中,我看到最大的技术公司派遣团队的开发人员进行广泛的评估,并选择OrientDB来满足其图形需求。因此,这是一次冒险,因为它对你来说是新的,而不是未经验证或以任何方式可疑。如果需要帮助开始,请告诉我们。 - Greg McCarvell
42
我想向大家指出,"@Luca是Orient Technologies的创始人兼CEO,该公司是#OrientDB背后的推手"(请参考个人资料)。 - Robin479
1
@Ravinder,使用OrientDB时,默认情况下,边缘标签是边缘类,因此必须事先创建它们。这只是名称,它们甚至可以作为空模式。如果您需要这样的动态性,在OrientDB中,您只需设置graph.setUseClassForEdgeLabel(false),就可以解决所有问题。您是否已经在StackOverflow上提出了这个问题?如果团队错过了您的问题,请原谅。 - Lvca
1
好的,我会再试着看一下。 - Ravinder Payal
3
与OrientDB相比,我更喜欢ArangoDB的文档 - @Luca - 请考虑进行重大改进。 - ramigg
显示剩余6条评论

43

听起来你的使用场景正是ArangoDB所设计的:你似乎需要在同一个应用程序中使用不同的数据模型(文档和图形),甚至可能要在单个查询中混合它们。这就是多模型数据库ArangoDB的亮点所在。

如果MongoDB到目前为止一直服务良好,那么你会立即感觉到ArangoDB非常相似,外观和使用方法都很相似。此外,您可以将顶点存储在一个或多个集合中,并将边缘存储在一个或多个所谓的“边缘集合”中,从而建模图形。这意味着单个边缘本质上只是一个文档,可以容纳任意JSON数据。然后,数据库提供遍历,可使用JavaScript进行自定义以满足您可能有的任何需求。

对于查询的多变性,您可以例如将有关这些禁运的属性添加到您的顶点中,并编写查询/遍历以考虑这些属性。

ArangoDB数据库根据Apache 2许可证授权,社区以及专业支持随时可得。

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

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

或直接联系:

hackers (at) arangodb.org


1
此外,在ArangoDB中,基于Dijkstra算法的最短路径实现已经在查询语言中提供。 - mchacki

15

Neo4j的定价实际上相当灵活,因此不要被网站上的价格吓到。您也可以使用社区版或个人版长时间开始使用。

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

关于您的用例:

全球最大的物流公司之一正在使用Neo4j进行此路线计算场景,每秒路由多达4000个包裹跨越全国。

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

我很好奇为什么您只有那么少的节点?那些像运输门户一样吗?我想知道您存储路线详细信息和动态的地方(例如您提到的标准),它们是从外部获取的吗 - 游戏引擎内存状态?

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

此外,知道Emil是Neo4j创始人之一,我和他都是多用户地下城(MUDs)老玩家,所以这绝对是一个令我们心跳加速的用例:)


嗨, 正如您所提到的,它们确实是运输门户(海港、机场、铁路站等),如果深入下去会变得不可控(或者不会吗?)。至于“禁运、灾害、战争等”方面的数据,我对任何选项都可以接受(我的初始想法是将它们保存在图形数据库中)。顺便说一句,感谢您的回复。 - projectUnduli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接