database - 选择多模型DBMS时应考虑哪些因素? (OrientDB与ArangoDB)

标签 database orientdb arangodb foundationdb multi-model-database

我希望将自己投入到多模型DBMS的世界中,我没有特定的用例,只是想开始学习。

我发现有两个突出的标记-OrientDBArangoDB,但是找不到它们之间的任何meaningful比较,即unopinionated。有人可以阐明两者之间功能的区别,以及在使用一个之上时的任何警告吗?如果我学到了一个,就可以轻松过渡到另一个?

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

这个问题要求在OrientDB与ArangoDB 之间进行一般的比较,以供希望学习有关多模型DBMS的人使用,而而不是是关于哪个更好的有根据的答案。

最佳答案

Disclaimer: I would no longer recommend OrientDB, see my comments below.



通过同时使用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可在更多平台上运行,包括树莓派。这也意味着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以及Record Level Security具有用户和角色的概念。这可能对您来说是杀手feature,对我而言。它还支持基于 token 的身份验证,因此可以将OrientDB用作授权/身份验证用户的主要方式。 OrientDB还具有LDAP集成。相反,ArangoDB仅支持一个非常简单的auth选项。

  • 两种系统都有各自的优势,因此在它们之间进行选择取决于您自己的情况:
  • 如果您正在构建一个小型应用程序,并且您是为开发人员效率进行优化的Web开发人员,则使用ArangoDB可能更容易快速启动并运行。
  • 如果您要构建一个更大的应用程序,该应用程序可能存储许多GB或TB的数据,或者具有成千上万的并发用户,或者具有“企业”用例,或者需要细粒度的安全控件,那么OrientDB就是您的最佳选择。
  • 如果要存储RDF或类似结构的链接数据,请选择OrientDB。
  • 如果您使用的是Java,则只需选择OrientDB。

  • Note: This is (my opinion of) the state of play today, things change quickly and I would not underestimate the ruthless efficiency of the awesome team behind ArangoDB, I just think that it's not quite there yet :)



    查尔斯·皮克(codemix.com)

    关于database - 选择多模型DBMS时应考虑哪些因素? (OrientDB与ArangoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28553942/

    相关文章:

    sql - SQL 数据库过载的原因是什么?

    java - Orientdb并发问题-获取服务器'node75'上的记录#46:0的锁定时超时(5000ms)。已被请求锁定0.324309

    java - orientdb 属性约束(例如 MANDATORY)不会因不正确的 java api 插入而失败

    arangodb - 如何在用户定义的函数中使用 AQL 函数?

    android - 在android上存储图像

    sql - 如何通过安装程序部署复杂的 SQL 解决方案?

    java - OrientDB bean唯一字段

    c++ - 如何从桌面应用程序访问嵌入式 ArangoDB?

    go - 如何使用 cursor.ReadDocument() 从 arangodb 读取任意对象

    php - 从数据库中删除逗号分隔列表中的值