免责声明:我不再推荐OrientDB,请参阅下面的评论。
我使用ArangoDB和OrientDB都可以提供稍微偏见的意见。它仍然存在偏见,因为我是OrientDB的node.js驱动程序的作者 - oriento,但我对公司或产品没有既得利益,我&# 39;我只需要使用OrientDB more 。
ArangoDB和OrientDB都瞄准类似的市场并且有很多相似之处:
- 两者都是多模型,您可以使用它们来存储文档,图形和简单的键/值。
- 两者都支持Gremlin,但与他们自己喜欢的查询语言相比,它确实是二等公民。
- 支持服务器端"存储过程"在JavaScript中。在这两个系统中,这都是通过一个稍微不那么惯用的JavaScript API来实现的,尽管ArangoDB的功能要好得多。这是在即将推出的OrientDB版本中修复的。
- 两者都提供REST API,两者都旨在用作" API服务器"通过JavaScript请求处理程序。这在ArangoDB中比OrientDB更实用。
- 两者均以许可许可证分发。
- 两者都是ACID并且具有事务支持,但在这两个事务中都是服务器端操作 - 它们更像是原子批处理命令,而不是传统RDBMS中可能习惯的事务类型。 / LI>
醇>
然而,存在很多差异:
- ArangoDB没有"链接"的概念,这是OrientDB中非常有用的功能。它们允许单向关系(就像网络上的超链接一样),没有边缘的开销。
- ArangoDB是用C ++(和JavaScript)编写的,而OrientDB是用Java编写的。两者都有其优点:
- 用C ++编写意味着ArangoDB使用V8,这是一个为node.js和Google Chrome提供支持的高性能JavaScript引擎。而用Java编写意味着OrientDB使用Nashorn,它仍然很快但不是最快的。这意味着与OrientDB相比,ArangoDB可以提供与node.js生态系统更高级别的兼容性。
- 用Java编写意味着OrientDB可以在更多平台上运行,包括覆盆子PI。这也意味着OrientDB可以利用许多其他用Java编写的技术,例如: OrientDB通过Lucene提供极好的全文/地理空间搜索支持,ArangoDB无法使用。
- OrientDB使用SQL的方言作为其查询语言,而ArangoDB使用自己的自定义语言AQL。从理论上讲,AQL更好,因为它是针对这个问题明确设计的,在实践中它虽然感觉与SQL非常相似但是关键词不同,而且是另一种学习语言,而OrientDB的实现感觉更多如果您习惯使用SQL,那就很舒服了。 SQL是声明性的,而AQL是必需的 - YMMV在这里。
- ArangoDB是一个"主要是内存"数据库,当大多数数据适合RAM时,它最有效。这可能适合您的需要,也可能不适合您。 OrientDB没有这个限制(但也喜欢RAM)。
- OrientDB完全面向对象 - 它支持具有属性和继承的类。这非常有用,因为它意味着您的数据库结构可以将1-1映射到您的应用程序结构,而不需要像ActiveRecord这样的丑陋黑客。 ArangoDB通过Foxx中的模型支持相似的东西,但它更像是一个可选的插件,而不是数据库工作方式的核心部分。
- ArangoDB通过Foxx提供了很大的灵活性,但它并非由具有强大服务器端JS背景的人设计,并且在很多时候重新发明轮子。他们没有利用像express这样的框架来处理他们的请求,而是创建了自己的Sinatra克隆,这当然使它与快递几乎相同(表达也是Sinatra克隆),但略有不同,并且意味着没有任何express的中间件或插件可以重复使用。同样,它们嵌入了V8,但没有嵌入libuv,这意味着它们不提供与node.js相同的非阻塞API,因此用户无法确定给定的npm模块是否可以在那里工作。这意味着非平凡的应用程序不能使用ArangoDB作为后端的替代品,这抵消了Foxx的许多潜在用途。
- OrientDB支持第一类属性级别和数据库级别索引。您可以直接查询和插入特定索引以获得最大效率。我在ArangoDB中没有看到对此的支持。
- OrientDB是更成熟的选择,拥有许多知名用户。 ArangoDB是较新的,鲜为人知,但发展迅速。
- ArangoDB的文档很棒,它们为许多不同的编程语言提供官方驱动程序。 OrientDB的文档并不是很好,虽然大多数平台都有驱动程序,但它们是社区支持的,因此并不总是保持最新的OrientDB功能。
- 如果您正在使用Java(或Java桥接器),则可以将OrientDB作为库直接嵌入到应用程序中。 ArangoDB中无法使用此用例。
- OrientDB具有用户和角色的概念,以及Record Level Security。这对你来说可能是一个杀手锏,对我而言。它还支持基于令牌的身份验证,因此可以使用OrientDB作为授权/验证用户的主要方式。 OrientDB还具有LDAP集成功能。相比之下,ArangoDB仅支持非常简单的auth选项。
醇>
两种系统都有自己的优势,因此在它们之间进行选择取决于您自己的情况:
-
如果您正在构建一个小型应用程序,并且您是一名优化开发人员工作效率的Web开发人员,那么使用ArangoDB可能更容易启动并快速运行。
< / LI>
-
如果你正在构建一个更大的应用程序,它可能存储许多千兆字节或太字节数据,或者拥有数千个并发用户,或者拥有&#34; enterprise&#34;用例,或需要细粒度的安全控件,OrientDB就是您的选择。
-
如果您要存储RDF或类似结构的链接数据,请选择OrientDB。
-
如果您正在使用Java,请选择OrientDB。
注意:这是(我对的看法)游戏状态今天,事情变化很快,我不会低估ArangoDB背后真棒团队的无情效率,我只是认为它还没有尚未:)
Charles Pick(codemix.com)