选择多模型DBMS时需要考虑哪些因素?(OrientDB与ArangoDB)

kyvafyod  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(201)

我正在寻找我的手进入多模型数据库管理系统的世界,我没有特定的使用案例,只是想开始学习。
我发现有两个突出的区别-OrientDBArangoDB,但找不到任何meaningful的比较,unopinionated之间。有人能解释一下这两个特性的区别吗?以及使用一个的注意事项吗?如果我学会了一个,我能很容易地过渡到另一个吗?
(我也标记了FoundationDB,但它是专有的,我可能不会考虑它)

  • 此问题要求您对OrientDB与ArangoDB进行一般性比较,以帮助您了解**多模型DBMS,而不是就哪个更好给出固执己见的答案。*
23c0lvtd

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中可能习惯的那种事务。
但是,也有很多不同之处:

  1. ArangoDB没有“链接”的概念,这是OrientDB中非常有用的特性,它们允许单向关系(就像Web上的超链接一样),没有边的开销。
  • 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只支持一个非常简单的身份验证选项。

这两种系统各有优势,因此选择它们取决于您自己的情况:

  • 如果您正在构建一个小型应用程序,并且您是一个为提高开发人员生产力而优化的Web开发人员,那么使用ArangoDB可能会更容易快速启动和运行。
  • 如果您正在构建一个较大的应用程序,可能会存储数GB或数TB的数据,或者有数千个并发用户,或者有“企业”用例,或者需要细粒度的安全控制,那么OrientDB就是您的理想之选。
  • 如果要存储RDF或类似结构的链接数据,请选择OrientDB。
  • 如果您使用的是Java,只需选择OrientDB。

注:这是(* 我对 * 的看法 *)今天 * 的游戏状态,事情变化很快,我不会低估ArangoDB背后的可怕团队的无情效率,我只是认为它还没有完全存在 *:)
查尔斯·皮克(codemix.com)

相关问题