一、ArangoDB简介
ArangoDB(https://www.arangodb.com/)是一个开源的分布式多模型NoSQL数据库,支持Key-Value、Document、Graph存储。ArangoDB使用类SQL的AQL语言进行查询。
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查询示例
二、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的方式进行通讯。
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级别的锁,支持并发读写