33

我想涉足多模型 DBMS 的世界,我没有特定的用例,只是想开始学习。

我发现有两个突出的 - OrientDB vs ArangoDB,但无法找到任何有意义的比较,它们之间没有意见。有人可以阐明两者之间的功能差异,以及使用其中一个而不是另一个的任何警告吗?如果我学习一个,我能轻松过渡到另一个吗?

(我也标记了FoundationDB,但它是专有的,我可能不会考虑它)

这个问题要求对OrientDB 与 ArangoDB 之间的一般比较,以供希望了解多模型 DBMS 的人使用,而不是关于哪个更好的固执己见的答案。

4

1 回答 1

44

免责声明:我不再推荐 OrientDB,请参阅下面的评论。


使用过 ArangoDB 和 OrientDB,我可以提供一个稍微不那么有偏见的意见。它仍然有偏见,因为我是 OrientDB 的 node.js 驱动程序 - oriento的作者,但我对任何公司或产品都没有既得利益,我只是必须更多地使用 OrientDB 。

ArangoDB 和 OrientDB 都瞄准了相似的市场,并且有很多相似之处:

  1. 两者都是多模型,您可以使用它们来存储文档、图形和简单的键/值。
  2. 两者都支持Gremlin,但与他们自己喜欢的查询语言相比,它绝对是二等公民。
  3. 两者都支持 JavaScript 中的服务器端“存储过程”。在这两个系统中,这是通过一个略逊于惯用的 JavaScript API 实现的,尽管 ArangoDB 的要好得多。这将在即将发布的 OrientDB 版本中得到解决。
  4. 两者都提供 REST API,都旨在通过 JavaScript 请求处理程序用作“API 服务器”。这在 ArangoDB 中比在 OrientDB 中实用得多。
  5. 两者都是根据许可许可证分发的。
  6. 两者都是 ACID 并具有事务支持,但在这两个事务中都是服务器端操作 - 它们更像是原子批处理命令,而不是您可能在传统 RDBMS 中习惯的各种事务。

但是,有很多不同之处:

  1. ArangoDB 没有“链接”的概念,这是 OrientDB 中一个非常有用的功能。它们允许单向关系(就像网络上的超链接),没有边缘的开销。
  2. 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 则不支持。
  3. OrientDB 使用 SQL 方言作为其查询语言,而 ArangoDB 使用其自己的称为 AQL 的自定义语言。从理论上讲,AQL 更好,因为它是针对问题明确设计的,在实践中虽然感觉与 SQL 非常相似,但关键字不同,并且是另一种需要学习的语言,而 OrientDB 的实现如果你习惯 SQL 会感觉更舒服. SQL 是声明性的,而 AQL 是命令式的——这里是 YMMV。
  4. ArangoDB 是一个“主要是内存”的数据库,当您的大部分数据都适合 RAM 时,它的效果最好。这可能适合也可能不适合您的需求。OrientDB 没有这个限制(但也喜欢 RAM)。
  5. OrientDB 是完全面向对象的——它支持具有属性和继承的类。这非常有用,因为它意味着您的数据库结构可以将 1-1 映射到您的应用程序结构,而无需像 ActiveRecord 这样的丑陋黑客。ArangoDB 通过 Foxx 中的模型支持非常相似的东西,但它更像是一个可选插件,而不是数据库工作方式的核心部分。
  6. ArangoDB 通过Foxx提供了很大的灵活性,但它并不是由具有强大的服务器端 JS 背景的人设计的,并且很多时候都在重新发明轮子。他们没有利用express之类的框架来处理请求,而是创建了自己的Sinatra克隆,这当然使它与 express 几乎相同(express 也是 Sinatra 的克隆),但有细微的不同,这意味着 express 的任何中间件或插件都不能被重用。同样,它们嵌入了 V8,但没有嵌入 libuv,这意味着它们不提供与 node.js 相同的非阻塞 API,因此用户无法确定给定的 npm 模块是否可以在那里工作。这意味着非平凡的应用程序不能使用 ArangoDB 作为后端的替代品,这否定了 Foxx 的许多潜在用途。
  7. OrientDB 支持一流的属性级别和数据库级别的索引。您可以直接查询并插入特定索引以实现最大效率。我在 ArangoDB 中没有看到对此的支持。
  8. OrientDB 是更成熟的选择,拥有许多知名用户。ArangoDB 较新,鲜为人知,但发展迅速。
  9. ArangoDB 的文档非常好,它们为许多不同的编程语言提供官方驱动程序。OrientDB 的文档不太好,虽然大多数平台都有驱动程序,但它们是由社区提供支持的,因此并不总是与最新的 OrientDB 功能保持同步。
  10. 如果您使用 Java(或 Java 桥接器),您可以将 OrientDB 作为库直接嵌入到您的应用程序中。这个用例在 ArangoDB 中是不可能的。
  11. OrientDB 具有用户和角色的概念,以及记录级别安全性。这对你来说可能是一个杀手级功能,对我来说。它还支持基于令牌的身份验证,因此可以使用 OrientDB 作为授权/身份验证用户的主要方式。OrientDB 也有 LDAP 集成。相比之下,ArangoDB 只支持一个非常简单的身份验证选项。

两种系统都有各自的优势,因此在它们之间进行选择取决于您自己的情况:

  • 如果您正在构建一个小型应用程序,并且您是一名优化开发人员生产力的 Web 开发人员,那么使用 ArangoDB 快速启动和运行可能会更容易。

  • 如果您正在构建一个更大的应用程序,它可能存储许多 GB 或 TB 的数据,或者有成千上万的并发用户,或者有“企业”用例,或者需要细粒度的安全控制,OrientDB 就是您的最佳选择。

  • 如果您要存储 RDF 或类似结构化的链接数据,请选择 OrientDB。

  • 如果您使用 Java,只需选择 OrientDB。

注意:这是(我的看法)今天的比赛状态,事情变化很快,我不会低估 ArangoDB 背后的强大团队的无情效率,我只是认为它还没有完成:)


查尔斯·皮克 (codemix.com)

于 2015-02-19T21:58:53.593 回答