暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

开源NoSQL数据库ArangoDB浅析

CodingArt 2017-10-27
888

一、ArangoDB简介

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


1.1 ArangoDB的主要特性

  1. 多模型数据库

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

  3. 分布式

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

  5. AQL查询语言

  6. AQL同时支持Key-ValueDocumentGraph的查询

  7. 可通过JavaScript进行扩展

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

  9. Foxx - 构建自己的API

  10. JavaScriptArangoDB构建应用,Foxx运行在DB内部,可快速访问数据。

  11. 空间利用率高

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

  13. OS支持

  14. ArangoDB支持WindowsLinuxOSX等操作系统,还支持树莓派,同样也支持以DockerDC/OSMesos方式部署。

  15. 开源免费

  16. 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中的数据库、表、行对应。


数据类型包括:stringbooleannumberarraydocument/object


Collection:分为document collectionedge collection两种类型。其中documentcollectionGraph中又被称为vertex collectionedge collection只在Graph中使用。


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


2.2 索引

ArangoDB中的索引类型分为:PrimaryEdgeHashSkiplistPersistentGeoFulltextArangoDB会自动对文档中的_id_key_from_to字段建立索引。


三、ArangoDB集群组成

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



Agent

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

  • 采用Raft算法保证一致性

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

  • 支持事务读写

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

  • 内部维护一个巨大的configuration tree


Coordinator

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

  • 无状态

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

  • 负责运行Foxx服务


DBserver

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

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

  • 每个Primary可以有多个Secondary

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

  • 自动fail-over

  • MVCC多版本并发控制


四、ArangoDB存储引擎

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


4.1 MMFILES

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

  • 能够支持快速的并发读

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

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


4.2 RocksDB

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

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

  • 高速、稳定的写入性能

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

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

文章转载自CodingArt,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论