【数据库之ArangoDB介绍】

ArangoDB是一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型。基于其本地集成多模型特性,您可以搭建高性能程序,并且这三种数据模型均支持水平扩展。

ArangoDB 数据库模型

Document 文档

您可以在文档中存储海量数据(文件大小默认最大值为32MB,但可以根据实际需要进行配置)。ArangoDB功能强大,应用范围广泛,可用于查询和处理诸如JOINs、辅助索引或ACID事物之类的文档。您还可以在JOIN连接上实现水平扩展。

key/value 键/值

每个document文档里均有唯一的键和与其对应的值(键/值对)。如果您在document文件中存储一个值,那么ArangoDB可用作经典的、高度可扩展的键/值对存储,例如用户在电子商务平台上将商品临时存储在购物车里或物联网应用程序中的传感数据等。

Graph 图

ArangoDB包含了graph图形存储的完整功能集。例如模式匹配、最短路径、完全遍历等。与当前许多主流的图形处理方法相比,ArangoDB可以快速执行图形查询。以下具体介绍如何实现这一改进:

当使用ArangoDB存储graph图时,一种特殊类型的文档将会被创建用来表示其边和顶点。这些文档包含指向所连接文档的_to和_from属性(地址属性),因此在查询过程中,可以通过关联上述属性创建和使用边缘索引,实现图的高性能处理和查询。

ArangoDB数据库的独特之处在于如下两个方面:其一是这些边和顶点都包含复杂数据(嵌套属性),其二是所有的graph函数均被深入集成至我们的查询语言AQL中。这两个特征使得ArangoDB在性能上能与其他graph数据库一较高低。此外,ArangoDB还支持对graph图搭建数据库集群。



 

ArangoDB 的独特优势

合并

多模型数据库能够适用于许多不同的用例。因此它能够最小化后台部件。这样有助于降低总拥有成本,增加灵活性,并整合您的整体技术堆栈需求。

简化性能扩展

应用程序都是一步步逐渐成熟。使用ArangoDB可以使架构中的不同组件便可以进行独立扩展。ArangoDB支持垂直和水平扩展来满足您不断增加的需求。如果您对性能的需求降低,您也可以优化后台系统,这样还可以节省硬件消耗和运营成本。

降低操作复杂度

Polyglot Persistence 的目的是为项目选择最适合的工具。只安装单一模型的数据库软件会让您在运行过程中遇到很多挑战。集成这些解决方案本身就是一项复杂的任务,但是创建一个具有不同数据库之间一致数据的大型内聚系统,并且包含容错机制是无法实现的。在数据方面,Polyglot Persistence 更多的是为某一项工作配置其所需的合理的数据模型。原生多模型数据库支持多种数据(合理的数据与数据模型的配对)并且不含Polyglot Persistence 的复杂性。除此之外,ArangoDB还能够确保ACID事务处理的一致性,以及有效提升您的应用软件的容错率。

强大的数据一致性

如果在您的应用程序内没有更高级别的事务处理功能,那么它就不能支持在不同数据库系统之间的事务处理功能。因此,保持不同模型之间的高度一致性是非常困难的。用单一后台来管理不同的数据模型,您可以轻松实现ACID。ArangoDB已经可以确保单实例下的高度一致性和集群模式下的原子性。 ArangoDB的 3.x版本也将会为集群模式提供高度的一致性(MVCC)。

容错性

与其他组件一起构建一个容错系统是一项具有挑战性的任务。在集群模式下尤为困难。对上述系统的搭建和维护需要包含不同技术和技术栈深厚的专业知识。将原本设计为独立运行的多项子系统合并到一起更是会增加工程和运营成本。然而在一个如ArangoDB这样的的可扩展多模型数据库里这些问题都不会出现。这也是ArangoDB 为什么能够使得先进的拥有不同数据模型的模块化架构得以正常运行,并且也可以应用到集群模式下的原因。

降低总体拥有成本

使用不同的数据库技术会增加很多关于硬件,软件,以及与系统运营相关的成本开支。每个数据库技术都需要持续的维护,补丁,错误修复和由供应商提供的其它修改。每个新的更新都必须由专门的团队进行测试,其与当前系统整体是否兼容。使用多模型数据库可以有效地减少这些成本开支。

事务处理

对多台机器提供事务处理保障是非常具有挑战性的,而且几乎所有的NoSQL数据库都不提供这些保障。而ArangoDB原生多模型数据库则会要求事务处理始终确保数据都存储在数据库中。ArangoDB已经可以确保单实例下的高度一致性和集群模式下的原子性。ArangoDB的3.x版本也将会为集群模式提供事务 (MVCC)。

猜你喜欢

转载自gaojingsong.iteye.com/blog/2427438