免责声明:我不再推荐 OrientDB,请参阅下面的评论。
使用过 ArangoDB 和 OrientDB,我可以提供一个稍微不那么有偏见的意见。它仍然有偏见,因为我是 OrientDB 的 node.js 驱动程序 - oriento的作者,但我对任何公司或产品都没有既得利益,我只是必须更多地使用 OrientDB 。
ArangoDB 和 OrientDB 都瞄准了相似的市场,并且有很多相似之处:
- 两者都是多模型,您可以使用它们来存储文档、图形和简单的键/值。
- 两者都支持Gremlin,但与他们自己喜欢的查询语言相比,它绝对是二等公民。
- 两者都支持 JavaScript 中的服务器端“存储过程”。在这两个系统中,这是通过一个略逊于惯用的 JavaScript API 实现的,尽管 ArangoDB 的要好得多。这将在即将发布的 OrientDB 版本中得到解决。
- 两者都提供 REST API,都旨在通过 JavaScript 请求处理程序用作“API 服务器”。这在 ArangoDB 中比在 OrientDB 中实用得多。
- 两者都是根据许可许可证分发的。
- 两者都是 ACID 并具有事务支持,但在这两个事务中都是服务器端操作 - 它们更像是原子批处理命令,而不是您可能在传统 RDBMS 中习惯的各种事务。
但是,有很多不同之处:
- ArangoDB 没有“链接”的概念,这是 OrientDB 中一个非常有用的功能。它们允许单向关系(就像网络上的超链接),没有边缘的开销。
- 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 非常相似,但关键字不同,并且是另一种需要学习的语言,而 OrientDB 的实现如果你习惯 SQL 会感觉更舒服. SQL 是声明性的,而 AQL 是命令式的——这里是 YMMV。
- ArangoDB 是一个“主要是内存”的数据库,当您的大部分数据都适合 RAM 时,它的效果最好。这可能适合也可能不适合您的需求。OrientDB 没有这个限制(但也喜欢 RAM)。
- OrientDB 是完全面向对象的——它支持具有属性和继承的类。这非常有用,因为它意味着您的数据库结构可以将 1-1 映射到您的应用程序结构,而无需像 ActiveRecord 这样的丑陋黑客。ArangoDB 通过 Foxx 中的模型支持非常相似的东西,但它更像是一个可选插件,而不是数据库工作方式的核心部分。
- ArangoDB 通过Foxx提供了很大的灵活性,但它并不是由具有强大的服务器端 JS 背景的人设计的,并且很多时候都在重新发明轮子。他们没有利用express之类的框架来处理请求,而是创建了自己的Sinatra克隆,这当然使它与 express 几乎相同(express 也是 Sinatra 的克隆),但有细微的不同,这意味着 express 的任何中间件或插件都不能被重用。同样,它们嵌入了 V8,但没有嵌入 libuv,这意味着它们不提供与 node.js 相同的非阻塞 API,因此用户无法确定给定的 npm 模块是否可以在那里工作。这意味着非平凡的应用程序不能使用 ArangoDB 作为后端的替代品,这否定了 Foxx 的许多潜在用途。
- OrientDB 支持一流的属性级别和数据库级别的索引。您可以直接查询并插入特定索引以实现最大效率。我在 ArangoDB 中没有看到对此的支持。
- OrientDB 是更成熟的选择,拥有许多知名用户。ArangoDB 较新,鲜为人知,但发展迅速。
- ArangoDB 的文档非常好,它们为许多不同的编程语言提供官方驱动程序。OrientDB 的文档不太好,虽然大多数平台都有驱动程序,但它们是由社区提供支持的,因此并不总是与最新的 OrientDB 功能保持同步。
- 如果您使用 Java(或 Java 桥接器),您可以将 OrientDB 作为库直接嵌入到您的应用程序中。这个用例在 ArangoDB 中是不可能的。
- OrientDB 具有用户和角色的概念,以及记录级别安全性。这对你来说可能是一个杀手级功能,对我来说。它还支持基于令牌的身份验证,因此可以使用 OrientDB 作为授权/身份验证用户的主要方式。OrientDB 也有 LDAP 集成。相比之下,ArangoDB 只支持一个非常简单的身份验证选项。
两种系统都有各自的优势,因此在它们之间进行选择取决于您自己的情况:
如果您正在构建一个小型应用程序,并且您是一名优化开发人员生产力的 Web 开发人员,那么使用 ArangoDB 快速启动和运行可能会更容易。
如果您正在构建一个更大的应用程序,它可能存储许多 GB 或 TB 的数据,或者有成千上万的并发用户,或者有“企业”用例,或者需要细粒度的安全控制,OrientDB 就是您的最佳选择。
如果您要存储 RDF 或类似结构化的链接数据,请选择 OrientDB。
如果您使用 Java,只需选择 OrientDB。
注意:这是(我的看法)今天的比赛状态,事情变化很快,我不会低估 ArangoDB 背后的强大团队的无情效率,我只是认为它还没有完成:)
查尔斯·皮克 (codemix.com)