我正在寻找我的手进入多模型数据库管理系统的世界,我没有特定的使用案例,只是想开始学习。
我发现有两个突出的区别-OrientDB和ArangoDB,但找不到任何meaningful的比较,unopinionated之间。有人能解释一下这两个特性的区别吗?以及使用一个的注意事项吗?如果我学会了一个,我能很容易地过渡到另一个吗?
(我也标记了FoundationDB,但它是专有的,我可能不会考虑它)
- 此问题要求您对OrientDB与ArangoDB进行一般性比较,以帮助您了解**多模型DBMS,而不是就哪个更好给出固执己见的答案。*
1条答案
按热度按时间23c0lvtd1#
**免责声明:**我不再推荐OrientDB,请参阅下面我的评论。
我可以提供一个稍微不那么偏颇的观点,因为我同时使用了ArangoDB和OrientDB。它仍然是偏颇的,因为我是OrientDB的node.js driver -oriento的作者,但我对任何一家公司或产品都没有既得利益,我只是有必要使用OrientDB * 更多 *。
ArangoDB和OrientDB的目标市场相似,有很多相似之处:
1.两者都是多模型的,您可以使用它们来存储文档、图形和简单的键/值。
1.两者都支持Gremlin,但与它们自己的首选查询语言相比,Gremlin无疑是二等公民。
1.这两个系统都支持JavaScript中的服务器端“存储过程”。在这两个系统中,这是通过一个稍微不那么惯用的JavaScript API来实现的,尽管ArangoDB的API要好得多。这个问题在OrientDB的即将发布的版本中得到了修复。
1.两者都提供REST API,都旨在通过JavaScript请求处理程序作为“API服务器”使用。这在ArangoDB中比OrientDB中更实用。
1.两者都是在许可证下发布的。
1.两者都是ACID并具有事务支持,但在两者中,事务都是服务器端操作-它们更像是命令的原子批处理,而不是您在传统RDBMS中可能习惯的那种事务。
但是,也有很多不同之处:
ArangoDB是用C++(和JavaScript)编写的,而OrientDB是用Java编写的。
用C++编写意味着ArangoDB使用V8,这是支持node.js和Google Chrome的同一个高性能JavaScript引擎。而用Java编写意味着OrientDB使用Nashorn,它仍然很快,但不是最快的。这意味着与OrientDB相比,ArangoDB可以提供更高级别的与node.js生态系统的兼容性。
用Java编写意味着OrientDB可以在更多的平台上运行,包括Raspberry PI。这也意味着OrientDB可以利用许多其他用Java编写的技术,例如OrientDB通过Lucene提供了极好的全文/地理空间搜索支持,这是ArangoDB所不具备的。
OrientDB使用SQL的方言作为它的查询语言,而ArangoDB使用它自己的定制语言AQL,理论上,AQL更好,因为它是为问题而显式设计的,实际上,尽管它感觉与SQL非常相似,但使用了不同的关键字,并且是另一种需要学习的语言,而如果您习惯于SQL,则OrientDB的实现会让您感觉舒服得多。SQL是声明性的,而AQL是命令性的-我是YMMV
ArangoDB是一个“大部分内存”的数据库,当你的大部分数据都能容纳在RAM中时,它工作得最好。这可能适合也可能不适合你的需要。OrientDB没有这个限制(但也喜欢RAM)。
OrientDB是完全面向对象的--它支持带有属性和继承的类。这是非常有用的,因为它意味着你的数据库结构可以一一Map到你的应用程序结构,而不需要像ActiveRecord这样丑陋的黑客。ArangoDB通过Foxx中的模型支持相当类似的东西,但它更像是一个可选的插件,而不是数据库工作的核心部分。
ArangoDB通过Foxx提供了很大的灵活性,但是它并不是由具有很强的服务器端JS背景的人设计的,而且很多时候都是重新发明轮子。(express也是Sinatra的克隆),但有细微的不同,这意味着express的中间件或插件都不能重用。这意味着它们不提供与node.js相同的非阻塞API,因此用户不能确定给定的npm模块是否在那里工作。这意味着非平凡的应用程序不能使用ArangoDB作为后端的替代品,这否定了Foxx的许多潜在用途。
OrientDB支持一级属性级和数据库级索引。您可以直接查询和插入到特定的索引中以获得最大的效率。我在ArangoDB中没有看到对此的支持。
OrientDB是一个比较成熟的选择,拥有许多高知名度的用户。ArangoDB是一个较新的,不太知名的,但增长很快。
ArangoDB的文档非常出色,并且为许多不同的编程语言提供了官方驱动程序。OrientDB的文档就不那么好了,虽然有适用于大多数平台的驱动程序,但它们是由社区提供的,因此并不总是与最新的OrientDB特性保持一致。
如果你使用Java(或者Java桥),你可以直接将OrientDB作为一个库嵌入到你的应用程序中。
OrientDB具有用户和角色的概念,以及记录级安全性。这对你来说可能是一个杀手级特性,对我来说也是。它还支持基于令牌的身份验证,因此可以将OrientDB用作授权/身份验证用户的主要方式。OrientDB还集成了LDAP。相比之下,ArangoDB只支持一个非常简单的身份验证选项。
这两种系统各有优势,因此选择它们取决于您自己的情况:
注:这是(* 我对 * 的看法 *)今天 * 的游戏状态,事情变化很快,我不会低估ArangoDB背后的可怕团队的无情效率,我只是认为它还没有完全存在 *:)
查尔斯·皮克(codemix.com)