什么(in_memory)graphics数据库,如果build模数据的重点

我没有想法,希望得到一些有用的意见。 我正在使用这个问题来压缩我的经验并且分享它们,希望能够激励一些分销商进行下一步的build模,将graphics数据库build模为一stream的问题/方式。

我已经validation了node.js几周可用的一些图数据库解决scheme。 我的用例是保存不同的社交用户networking帐户的交互 。 需要以最有效的方式使用CPU和内存

我最重要的要求是:

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

Neo4j的

我真的很喜欢密码,所以我最好的select是Neo4j。 但关于Neo4j的主要问题是JavaScript访问是非本地的。 它使用比直接Java访问慢10倍(10倍)的REST-API。 所以我看了一下node-neo4j-embedded ,但是它已经停用了两年多了。 它看起来像它的作者是不活跃(坏标志)。

ArangoDB

ArangoDB非常好的核心开发人员回答了关于内部的问题 。 最后,这意味着JavaScript是一stream的公民,因为本机查询可以被推出JS。 看着开源的基准,我认为这是公平的。 但是恐怕他们没有使用node-neo4j-embedded作为基准。 基准比较REST-API(由于@weinberger评论而编辑)。 我希望他们比较本地的API(也许有人是足够的窥探,并试试! – 让我们知道!)。 更新 :正如我现在注意到,OrientDB已经回答了一个新的node.js驱动程序的基准 (使用命令caching通过启动服务器-Dcommand.cache.enabled = true -Dcommand.cache.minExecutionTime = 3什么是不公平的,因为它不是查询caching基准!

因为我喜欢使用ArangoDB作为graphics数据库,所以我会有3个select(来源: FAQ ):

  • 遍历JS对象
  • 使用AQLsgraphics函数
  • 使用REST API

一般来说,它不像cypher。 我不确定如何比较,build模数据的正确方式是什么(如Neo4J解释得非常好 )。 我很想为ArangoDB Graphs做这样的事情。 感觉像ArangoDB专注于graphics操作,如果你有更多的关系比行( 使用graphics,而不是联系的关系 )的Neo4J更适合使用graphics的需要。

MongoDB的

基于文档的MongoDB没有针对图表操作进行优化,但后来得到了一个实验性的in_memory存储引擎 。 也有一些项目in_memory或graphics相关,但没有什么是真正引人注目的。 在这个讨论中 ,看起来像MongoDB不是我喜欢使用的。

OrientDB

因为OrientDB和MongoDB (来自OrientDB)有一个比较,我正要使用这个。 “ OrientDB有一个使用SQL 的混合文档graphics引擎 ”。 我是一名前PHP / MySQL的专家。 但是build模部分在哪里? 他们与图表一起工作的章节并不像密码。 这就像使用图表的SQL一样。 没有什么不对,但是在我错过像感觉那样的造型之前使用密码。 如果有人用OrientDB和Graphs做了一个build模过程,也许你可以写一个像Neo4J那样的教程。

更新 :关于像第一个公民那样的JavaScript访问有消息 :“ 在下一个版本中,这个驱动程序的速度将会和原生的Java相媲美 ”分叉的node.js驱动程序最后有bin固定 。

更新 :在selectOrientDB之前,可能需要阅读有关某些问题和讨论链接的文章 。 文章触及一个敏感的问题,应该以批判的态度来对待。 这个更新的作者请注意:我是新来的编辑SO,没有足够的声誉把这个评论。 我相信这个信息是一个有效的讨论点,不知道如何按照SO规则放置在这里。

LokiJS

在我研究Neo4J,ArangoDB和MongoDB之前,我使用基于JavaScript的in_memory数据库(名为LokiJS )进行了一番尝试 ,忽略了一切会降低性能和效率的策略。 LokiJS正在尝试完成Mongo-Style(RoadMap)。 主要问题是不好的规模能力 。 因为它不是一个graphics数据库,但是在我的项目开始的时候它是一个有趣的解决scheme。 另外,find所有的分布式文档(也许他们应该用GitBook重启)并不是一种完美的感觉。 最后LokiJS是一个非常有趣的项目,我希望他们能够继续前进!

性LevelDB

以前当我写学位论文的时候,我正在看levelDB。 在写这篇文章的时候记住了这个,我search了LevelDB的in_memory,并得到了一个很有希望的结果叫做MemDown (另见)。 我没有testing过这个发现,但也许有人有经验工作和build模这个解决scheme。 也许这将是最有效的方式,如果所有其他人不适合,因为我只是写一个轻量级的密码克隆,目标是保持轻量,因为我可以做的。

编辑:由于评论,这里是一个LevelGraph的链接。 作为实现LevelGraph / LevelDB的CYPHER分析器的一个想法,你的出发点是比较

Cypher :

CREATE (SUBJECT:"a") - [b:PREDICATE] -> (OBJECT:"c") RETURN, subject, predicate, object 

LevelGraph :

 var RETURN = { SUBJECT: "a", PREDICATE: "b", OBJECT: "c" }; db.put(RETURN, function(err) { // .. }); 

结论

正如你可能注意到,我不是图表的超级英雄。 但是,这是我最初的潜水,我试图得到一个概述。 我想有很多人想问我同样的问题,但没有时间。 我希望这篇文章能够帮助很多人,并通过评论和答案来改变, 成为一个完善的概述如何为图表build模。


@editors: 不客气。

@commenters: 这是我个人研究的结果 – 如果你也做过像我这样的旅程,请回答一个简短的总结,就像我为我评估过的每个数据库所做的一样(不要忘记瞄准我的4个目标) 。

通过任何本地特性(例如stream)和像CYPHER这样的高级查询语言组合节点式性能的想法实际上是相当整洁的。

你可能不会得到的是任何一种低级的API,因为这对于数据库作者来说是相当罕见的,而且据说在devise模式中是不需要的。 所以,长时间运行的tcp连接应该没问题。

自从把所有这一切都包括进来 ,同时(表面判断)保持良好的风格。

由于你可能不会再进行search,如果需要其他function,我build议发送一个拉请求:)