开源NoSQL数据库ArangoDB浅析

一、ArangoDB简介

ArangoDB(https://www.arangodb.com/)是一个开源的分布式多模型NoSQL数据库,支持Key-Value、Document、Graph存储。ArangoDB使用类SQL的AQL语言进行查询。

《开源NoSQL数据库ArangoDB浅析》

1.1 ArangoDB的主要特性

1.多模型数据库

   可以灵活的使用键值对、文档、图及其组合构建数据模型

2.分布式

  支持水平扩展,Sharding,多副本

3.AQL查询语言

   AQL同时支持Key-Value、Document、Graph的查询

4.可通过JavaScript进行扩展

   无语言范围的限制,可以从前端到后端都使用同一种语言。

5.Foxx -构建自己的API

  用JavaScript和ArangoDB构建应用,Foxx运行在DB内部,可快速访问数据。

6.空间利用率高

  跟其它文档型数据库相比,ArangoDB占用的存储空间更少,因为ArangoDB是模式自由的元数据模式。

7.多OS支持

   ArangoDB支持Windows、Linux和OSX等操作系统,还支持树莓派,同样也支持以Docker、DC/OS、Mesos方式部署。

8.开源免费

   ArangoDB采用Apache 2许可证协议。

1.2 ArangoDB自带程序介绍

arangod – ArangoDB数据库的守护程序,运行后就是ArangoDB数据库服务器的守护进程

arangosh – ArangoDB的Shell环境

arangoimp – ArangoDB数据库导入工具

arangoexport – ArangoDB数据库导出工具

arangodump – ArangoDB数据库的备份工具

arangorestore – ArangoDB数据库的恢复工具

foxx-manager – 管理Foxx应用程序

arango-dfdb – ArangoDB的数据文件调试器

arangobench – ArangoDB的测试和评分工具

1.3 AQL查询示例

《开源NoSQL数据库ArangoDB浅析》
《开源NoSQL数据库ArangoDB浅析》

二、ArangoDB数据模型与索引

2.1 数据模型

ArangoDB的数据模型分为数据库(databse)、集合(collection)、文档(document),分别与RDBMS中的数据库、表、行对应。

数据类型包括:string、boolean、number、array、document/object

Collection:分为document collection、edge collection两种类型。其中documentcollection在Graph中又被称为vertex collection,edge collection只在Graph中使用。

Document: ArangoDB的document数据在展现层使用JSON格式,但物理存储时采用的是二进制的VelocyPack(一种高效紧凑的二进制序列化和存储格式)。document由一个主键(_key)、_id、_rev、0个或者多个属性组成,其中_key作为sharding的依据。Edgecollection中的文档要比documentcollection中的文档多两个特殊的属性(_from、_to)。

2.2 索引

ArangoDB中的索引类型分为:Primary、Edge、Hash、Skiplist、Persistent、Geo、Fulltext。ArangoDB会自动对文档中的_id、_key、_from、_to字段建立索引。

三、ArangoDB集群组成

ArangoDB集群使用满足CP的master/master模式,牺牲了一定的集群可用性。ArangoDB集群由3部分组成:agent、coordinator、dbserver。集群内部之间采用HTTP+ VelocyPack的方式进行通讯。

《开源NoSQL数据库ArangoDB浅析》
《开源NoSQL数据库ArangoDB浅析》

Agent

Agent是一个类似etcd、consul的实现,由多个实例组成,负责统一存储整个集群的配置。

采用Raft算法保证一致性

负责Leader选举、分布式协调服务

支持事务读写

支持以HTTP callback的方式订阅配置的变更

内部维护一个巨大的configuration tree

Coordinator

Coordinator是ArangoDB集群中直接面向客户端对外提供服务的角色。

无状态

负责AQL的解析、执行计划的优化与运行

负责运行Foxx服务

DBserver

DBserver负责数据的物理存储以及响应Coordinator的查询请求,按照不同的角色又可以分为Primary、Secondary两种。

Primary、Secondary分别为一主一从,Secondary向Primary异步复制数据,若采用同步复制则可以不需要Secondary     DBserver

每个Primary可以有多个Secondary

定时向Agent发送心跳(心跳超时15s)

自动fail-over

MVCC多版本并发控制

四、ArangoDB存储引擎

目前ArangoDB支持两种存储引擎:MMFILES、RocksDB(3.2及以上版本支持)。

4.1 MMFILES

内存映射文件存储引擎为适合存放于内存的数据而优化设计。

能够支持快速的并发读

使用collection级别的锁,所以并发写性能较差,并且写入时会阻塞读

索引存于内存中,具有高效的查询性能,但重启时需要重建耗时较久

4.2 RocksDB

RocksDB是Facebook开源的嵌入式KV存储引擎,基于LSMTree构建。

支持超过内存的大数据集的存储

高速、稳定的写入性能

索引在磁盘持久化,内存中cache

使用document级别的锁,支持并发读写

    原文作者:stuxuhai
    原文地址: https://www.jianshu.com/p/d86b0fddea0e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞