【问题标题】:What factors to consider when choosing a Multi-model DBMS? (OrientDB vs ArangoDB)选择多模型 DBMS 时要考虑哪些因素? (OrientDB 与 ArangoDB)
【发布时间】:2015-02-17 02:58:02
【问题描述】:

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

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

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

此问题要求对 OrientDB 与 ArangoDB 进行一般性比较 > 关于哪个更好的固执己见的答案。

【问题讨论】:

  • 我是 ArangoDB 的开发人员之一,因此我无法给出公正的答案。例外是关于“过渡”的最后一个。不幸的是,在 NoSQL 世界中没有像 SQL 这样的通用查询语言。 Gremlin 是向图形数据库的通用 QL 迈进,但恕我直言,仍有很多未解决的问题。随着 Datastax 收购 Titan,我不确定 Tinkerpop3 会发生什么。因此,您需要为真正的多模型学习一种完全不同的查询语言。遍历是在 Java(东方)或 JavaScript(ArangoDB)中完成的——同样是不同的语言。
  • 我是 OrientDB 的创始人(所以是有偏见的),我可以说 OrientDB 是引擎级别的多模型 DBMS,而 ArangoDB 和 FoundationDB 只是在它之上实现了层。这就像在 Oracle 之上使用 Hibernate 并认为您有一个 ODBMS。我的 0,02。
  • 我是 ArangoDB 的另一位创始人,因此也有偏见。 Luca,我担心你弄错了:ArangoDB 从一开始就是作为多模型数据库设计和构建的。所有三个数据模型连同对 API 和查询语言的完全支持在数据库引擎中作为一等公民和高性能 C++ 代码实现。图表和键/值仅作为文档存储顶部的层实现是不正确的。
  • 嘿 weinberger,GraphDB 被定义为“无索引邻接”。 ArangoDB 使用哈希索引来交叉关系,所以它不是“无索引”,抱歉。它是一个JOIN。这就像使用 RDBMS 遍历关系。
  • 这个定义是谁制定的?这比其他任何事情都更具营销性。当我们执行遍历时,它不是 JOIN。你写的不是真的。 j.mp/1EOt8gk

标签: database orientdb arangodb foundationdb multi-model-database


【解决方案1】:

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


使用 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 可以在更多平台上运行,包括例如树莓派。这也意味着 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有用户和角色的概念,还有Record Level Security。这对你来说可能是一个杀手级功能,对我来说。它还支持基于令牌的身份验证,因此可以使用 OrientDB 作为授权/身份验证用户的主要方式。 OrientDB 也有 LDAP 集成。相比之下,ArangoDB 只支持一个非常简单的身份验证选项。

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

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

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

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

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

注意:这是(我对的看法)今天的游戏状态,事情变化很快,我不会低估 ArangoDB 背后令人敬畏的团队的无情效率,我只是觉得它还没有 :)


查尔斯·皮克 (codemix.com)

【讨论】:

  • 很遗憾,我无法删除此答案,但我想撤回我对您使用 OrientDB 的建议。自从写下这个答案后,我们遇到了 OrientDB 的一些非常重要的基本问题,迫使我们迁移到另一个系统。
  • 为什么,在这一切之后,大声明要放在最后。我们需要更多信息
  • 由于保密协议,我无法提供很多细节,但我们面临一长串问题,这些问题是 OrientDB 开发方式的直接结果,而不是概念上的任何问题。简而言之,它没有按照您对数据库供应商所期望的高标准进行开发,虽然它声称有 很多 功能,但其中很多功能是半生不熟或只是不完善不行。我们花了很多时间和精力为我们的客户在 OrientDB 上工作,最后它让他们所有人都失望了。
  • @codemix 你不能删除,但你可以编辑并在顶部添加某种“免责声明”,你的评论很容易被忽略,但你写的东西对去的人很重要做出一些关于选择数据库供应商的决定。
  • 这篇文章刚刚发布一年多,而且(除了你自己的观点转变之外)因为这些都是快速发展的产品,我想情况已经从现状发生了一些变化当这个优秀的总结第一次写出来的时候。您或其他任何人是否可以编辑帖子并使用更多最新信息进行更新? ArangoDB 是否解决了它突出的缺点(例如改进的身份验证、数据不在 RAM 中时更好的性能或异步 API)?有 OrientDB,无论是在功能、稳定性还是开发方法方面?
猜你喜欢
  • 1970-01-01
  • 2016-12-09
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多