Node.js 如果重点关注建模数据,那么什么(内存中)图形数据库

Node.js 如果重点关注建模数据,那么什么(内存中)图形数据库,node.js,neo4j,orientdb,arangodb,lokijs,Node.js,Neo4j,Orientdb,Arangodb,Lokijs,我没有主意了,希望能得到一些有用的意见。我用这个问题来压缩我的经验并与大家分享,希望能激励一些分销商下一步将图形数据库建模作为第一类问题/方式。 几周来,我一直在验证node.js可以使用的一些图形数据库解决方案我的用例是保存不同社交用户网络帐户的交互。需要以最有效的方式使用CPU和内存 我最重要的要求是: 内存中(至少用于索引) 开源(免费使用) 与一等公民相同的JavaScript/Node.js性能 舒适的查询和建模语言 Neo4J 我真的很喜欢,所以我最好的选择是Neo4j。 但是N

我没有主意了,希望能得到一些有用的意见。我用这个问题来压缩我的经验并与大家分享,希望能激励一些分销商下一步将图形数据库建模作为第一类问题/方式。

几周来,我一直在验证node.js可以使用的一些图形数据库解决方案我的用例是保存不同社交用户网络帐户的交互。需要以最有效的方式使用CPU和内存

我最重要的要求是:

  • 内存中(至少用于索引)
  • 开源(免费使用)
  • 与一等公民相同的JavaScript/Node.js性能
  • 舒适的查询和建模语言
Neo4J

我真的很喜欢,所以我最好的选择是Neo4j。 但是Neo4j的主要问题是JavaScript访问是非本地的。它使用REST-API,而不是直接Java访问。所以我看了一下,但是它已经闲置了两年多了。它看起来一点都不活跃(坏迹象)

ArangoDB

ArangoDB真正优秀的核心开发人员回答了关于内部的问题。最后,它意味着是一等公民,因为本地查询可以从JS中推出。从开源基准来看,我认为这是公平的。但我担心他们并没有将其作为基准。基准测试比较了RESTAPI(由于@weinberger注释而编辑)。我希望他们能比较一下本地API(也许有人够史努比的,试试看!-让我们知道!)更新:正如我现在注意到的,OrientDB使用了一个新的node.js驱动程序(通过使用-Dcommand.cache.enabled=true-Dcommand.cache.minExecutionTime=3启动服务器,这是不公平的,因为它不是查询缓存基准!)

因为我喜欢使用ArangoDB作为图形数据库,所以我有3种选择(来源:):

  • 横穿
  • 使用
  • 使用
一般来说,它不像cypher那样舒适。我不确定如何进行比较,以及建模数据的正确方法是什么(如)。我很想为ArangoDB Graphs准备这样的东西。感觉ArangoDB专注于图形操作,而Neo4J更适合使用图形,如果您的关系多于行()

MongoDB

基于文档的MongoDB并没有针对图形操作进行优化,但最近进行了优化。还有一些项目要么在内存中,要么与图形相关,但没有什么是真正令人信服的。看起来MongoDB不是我喜欢使用的

OrientDB

因为有一个关于available(来自OrientDB)的比较,所以我想使用这个。使用SQL的“OrientDB有一个混合文档图形引擎”。我以前是PHP/MySQL专家。但是建模的部分在哪里呢?他们的章节不像密码。这就像对图形使用SQL一样。这没什么错,但在我错过模特般的感觉之前使用cypher。 如果有人用OrientDB和图形做了一个建模过程,也许你可以编写一个类似的教程

更新:关于像第一公民一样的JavaScript访问: “在下一个版本中,此驱动程序的速度将与本机Java相媲美”forked node.js驱动程序

更新:在选择OrientDB之前,可能需要阅读并从中链接讨论。这篇文章涉及一个敏感问题,应该以批判的态度对待。本更新作者的注释:我是编辑SO的新手,并没有足够的声誉将此添加到评论中。我相信这些信息是一个有效的讨论点,不知道如何根据SO规则将其放在这里

LokiJS

在我研究Neo4J、ArangoDB和MongoDB之前,我研究了一个基于JavaScript的内存数据库,名为,遵循什么策略忽略所有降低性能和效率的因素。LokiJS正在尝试完成Mongo风格(路线图)。主要的问题是这个问题。当然,它不是一个图形数据库,但在我的项目开始时,它是一个有趣的解决方案。此外,找到所有分布式文档也不是一种完美的感觉(也许他们应该用GitBook重新启动)。 最后,LokiJS是一个非常有趣的项目,我希望他们能继续前进

LevelDB

以前我写学位论文的时候,我在看levelDB。在写这篇文章时,我记住了这一点,在内存中搜索了LevelDB,得到了一个很有希望的结果,名为(参见)。我还没有测试过这个发现,但可能有人有过为这个解决方案工作和建模的经验。如果其他的都不适合,也许这是最有效的方法,因为我只需要编写一个轻量级的cypher克隆,目标是尽可能保持轻量级

编辑:由于有评论,这里有一个指向的链接。为了实现LevelGraph/LevelDB的密码解析器,您的出发点是比较

:

:

结论

正如你可能注意到的那样,我并不是图表方面的超级英雄。但这是我对这一点的初步探讨,我试图获得一个概述。我想有很多人想问和我一样的问题,但是没有时间。我希望这篇文章能帮助很多人,并通过对的评论和回答来改变,成为一篇很好的关于如何为图形建模的概述。


@编辑:不客气


@评论者:这是我个人研究的结果-如果你也像我一样完成了一次旅程,请用我对我评估的每个数据库所做的简短总结来回答(不要忘记瞄准我的4个目标)。

将节点风格的性能与
CREATE (SUBJECT:"a") - [b:PREDICATE] -> (OBJECT:"c") 
RETURN, subject, predicate, object
var RETURN = { SUBJECT: "a", PREDICATE: "b", OBJECT: "c" };
db.put(RETURN, function(err) {
  // ..
});