MongoDB + Neo4J与OrientDB与ArangoDB

我目前正在devise一个MMO浏览器游戏的阶段,游戏将包括一些实时位置的瓷砖地图(所以每个单元格的瓷砖数据)和一般的世界地图。 游戏引擎我更喜欢使用MongoDB作为持久数据的世界。

我也将实现一个航运模拟(我将在下面进行更多解释),它基本上是一个Dijkstra模块,我决定使用一个graphics数据库,希望它能使事情变得更简单,发现Neo4j是相当受欢迎的。

我对MongoDB + Neo4J的设置感到满意,但是后来发现OrientDB显然是MongoDB和Neo4J(两者都是好的),甚至还有MongoDB和Neo4J的VS页面。

关键是,我听说MongoDB丢失数据的一些恐怖故事(尽pipe还不确定),我没有那么奢侈。 而对于Neo4J,我并不是每年12K€“启动友好”成本的大粉丝,尽pipe我可能没有数百万顶点的数据库。 OrientDB似乎是一个可行的select,因为使用一个数据库解决scheme也可能有一些机会。

在这种情况下,一个合理的举动可能会跳到OrientDB,但它有一个小社区,并没有发现太多的评论,MongoDB和Neo4J是广泛使用的stream行工具,我担心,如果OrientDB是一个冒险。

我的第一个问题是,如果你有任何有关这些数据库的经验/意见。

第二个问题是图表数据库对于航运模拟更好。 使用的数据库有望计算从任何顶点到任何顶点的最便宜的路线并遍历它(经典Dijkstra)。 而且还要根据情况来改变权重,例如“国家B对A国实行禁运,所以任何来自A国的项目都不能通过B,在XYZ国家有洪水,所以没有陆路运输”等等。有望caching结果。 我期望不超过1000个顶点,但边缘很多。

如果问题有点模棱两可,请提前致谢,并提前道歉

PS:我在标题中join了ArangoDB,但是没有太多的机会看一下。


编辑截至2016年4月18日:评估对我的问题和发展战略的回应后,我决定使用ArangoDB,因为他们的路线图对我来说更有希望,因为他们显然不想增加大量炒作function。

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

作为开发人员,总的来说,我不喜欢那些隐藏成本的公司,让他们用自己的技术玩一会儿,只要你紧张,就开始寻求钱。 实际上,一旦你投入了几个月来开发你的应用程序,使用非标准的语言或API你搞砸了:支付或迁移应用程序巨大的成本。

你知道, OrientDB是免费的,甚至是商业用途。 此外,OrientDB支持像SQL这样的标准(带扩展),主要的Java API是TinkerPop Blueprints(graphics数据库的“JDBC”标准)。 另外OrientDB也支持Gremlin 。

OrientDB项目每天都在增加新的贡献者和用户。 社区小组(Free channel to ask support)是GraphDB市场上最活跃的社区 。

如果您对使用GraphDB有疑问,我的build议是获得更接近您的需求的东西,然后尽可能多地使用标准。 通过这种方式,最终的转换将会产生较小的影响。

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

如果MongoDB到目前为止已经很好地服务了你,那么你会立即感觉到与ArangoDB的舒适,因为它的外观和感觉非常相似。 此外,您可以通过将顶点存储在一个(或多个)集合中,并将边缘存储在一个或多个所谓的“边集合”中来为graphicsbuild模。 这意味着单独的边缘只是单独的文档,可以保存任意的JSON数据。 然后数据库提供遍历,可以用JavaScript自定义,以满足您可能需要的任何需求。

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

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

如果您有任何更具体的问题,请不要犹豫,问在谷歌集团

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

或联系

黑客(at)arangodb.org

直。

Neo4j的定价实际上是非常灵活的,所以不要被网站上的价格收起来。 您也可以长时间开始使用社区版或个人版。

Neo4j社区是非常积极和有益的,并迅速为您的问题提供支持和帮助。 除了性能和方便之外,我认为这是最大的优势。 我一般使用图模型

关于你的用例:

全球最大的物stream公司之一Neo4j正好用于这种路线计算情景,在全国范围内每秒钟路由4000个包裹。

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

我很好奇你为什么只有那么几个节点? 那些像传送门户? 我想知道你在哪里存储细节和关于路线的dynamic(如你提到的标准)是从外部来的 – 在游戏引擎的记忆状态中?

你可能应该分享一些关于你的模型和具体用例的更多细节。

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

Interesting Posts