我希望能够进入多模型DBMS的世界,我没有特别的用例,只想开始学习.
我发现有两个突出的东西 - OrientDB与ArangoDB,但无法找到任何有意义的比较,在它们之间不受影响.有人能否解释两者之间的功能差异,以及使用其中一个的警告?如果我学会了一个,我能够轻松过渡到另一个吗?
(我也标记了FoundationDB,但它是专有的,我可能不会考虑它)
这个问题要求对想要了解多模型DBMS的人进行 OrientDB与ArangoDB之间的一般比较,而不是关于哪个更好的自以为是的答案.
1> codemix..:
免责声明:我不再推荐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非常相似但具有不同的关键字,并且是另一种学习的语言,而如果习惯了SQL,OrientDB的实现会感觉更舒服.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仅支持非常简单的auth选项.
两种系统都有自己的优势,因此在它们之间进行选择取决于您自己的情况:
如果您正在构建一个小型应用程序,并且您是一名优化开发人员工作效率的Web开发人员,那么使用ArangoDB可能更容易启动并快速运行.
如果您正在构建一个更大的应用程序,可能存储数千兆字节或数TB的数据,或拥有数千个并发用户,或拥有"企业"用例,或需要细粒度的安全控制,那么OrientDB就是您的最佳选择.
如果要存储RDF或类似结构的链接数据,请选择OrientDB.
如果您使用的是Java,请选择OrientDB.
注:这是(我的意见)游戏的状态今天,事情很快发生变化,我不会低估背后ArangoDB的真棒团队的无情效率,我只是认为这是不太有尚未 :)
查尔斯皮克(codemix.com)
这篇文章现在已经过了一年多了,而且(除了你自己的观点转移之外),因为这些都是快速发展的产品,我认为当这个优秀的摘要首次编写时,情况已经发生了变化.您或其他任何人是否可以编辑帖子并使用更新的信息进行更新?ArangoDB是否解决了其突出的任何缺点(例如,当数据不在RAM中时,改进的auth,更好的性能,或异步API)?OrientDB,无论是在功能,稳定性还是开发方面?
不幸的是我不能删除这个答案,但我想收回你使用OrientDB的建议.自写这个答案以来,我们遇到了一些非常重要的基本问题,这些问题迫使我们迁移到另一个系统.
由于NDA,我无法提供很多细节,但我们遇到了一系列问题,这些问题是OrientDB开发方式的直接结果,而不是概念上的任何错误.简而言之,它并没有按照您期望从数据库供应商那里获得的高标准开发,虽然它声称具有很多功能,但很多功能都被淘汰或只是不起作用.我们花了很多时间和精力为客户开发OrientDB,最终让所有人失望.
@codemix您无法删除,但您可以在顶部编辑和添加某种"免责声明",您的注释很容易被忽略,但您所写的内容对于那些决定选择数据库供应商的人来说非常重要.
为什么,为什么?
为什么呢,大话到底要放哪儿。我们需要更多信息