开源NoSQL数据库ArangoDB浅析
1). arangod
ArangoDB数据库的守护程序,运行后就是ArangoDB数据库服务器的守护进程。
此服务器程序旨在作为守护程序进程/服务运行,以通过TCP / HTTP为服务器提供各种客户端连接。它还提供了一个Web界面。
2). arangosh
ArangoDB shell。实现读取 - 评估 - 打印循环(REPL)并提供访问和管理ArangoDB服务器的功能的客户端。
3). arangoimp
ArangoDB数据库导入工具。ArangoDB服务器的批量导入程序。它支持JSON和CSV
4). arangoexport
ArangoDB数据库导出工具。ArangoDB服务器的批量导出器。它支持JSON,CSV和XML。
5). arangodump
ArangoDB数据库的备份工具
6). arangorestore
ArangoDB数据库的恢复工具,将备份加载回ArangoDB数据库的工具。
7). foxx-manager
一个Shell脚本,管理Foxx应用程序
8). arango-dfdb
ArangoDB的数据文件调试器(仅限MMFiles存储引擎)。
9). arangobench
ArangoDB的测试和评分工具,主要用于ArangoDB的开发和测试。它可用于性能和服务器功能测试。
10). arangodb
ArangoDB Starter,可轻松部署ArangoDB实例。
11). arangoinspect
收集服务器设置信息的检查工具。
12). arangovpack
将VelocyPack数据转换为JSON的实用程序。
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)。
ArangoDB中的索引类型分为:Primary、Edge、Hash、Skiplist、Persistent、Geo、Fulltext。
ArangoDB会自动对文档中的_id、_key、_from、_to字段建立索引。
ArangoDB集群使用满足CP的master/master模式,牺牲了一定的集群可用性。ArangoDB集群由3部分组成:agent、coordinator、dbserver。集群内部之间采用HTTP+ VelocyPack的方式进行通讯。
Agent是一个类似etcd、consul的实现,由多个实例组成,负责统一存储整个集群的配置。
采用Raft算法保证一致性
负责Leader选举、分布式协调服务
支持事务读写
支持以HTTP callback的方式订阅配置的变更
内部维护一个巨大的configuration tree
Coordinator是ArangoDB集群中直接面向客户端对外提供服务的角色。
无状态
负责AQL的解析、执行计划的优化与运行
负责运行Foxx服务
DBserver负责数据的物理存储以及响应Coordinator的查询请求,按照不同的角色又可以分为Primary、Secondary两种。
Primary、Secondary分别为一主一从,Secondary向Primary异步复制数据,若采用同步复制则可以不需要Secondary DBserver
每个Primary可以有多个Secondary
定时向Agent发送心跳(心跳超时15s)
自动fail-over
MVCC多版本并发控制
目前ArangoDB支持两种存储引擎:MMFILES、RocksDB(3.2及以上版本支持)。
内存映射文件存储引擎为适合存放于内存的数据而优化设计。
能够支持快速的并发读
使用collection级别的锁,所以并发写性能较差,并且写入时会阻塞读
索引存于内存中,具有高效的查询性能,但重启时需要重建耗时较久
RocksDB是Facebook开源的嵌入式KV存储引擎,基于LSMTree构建。
支持超过内存的大数据集的存储
高速、稳定的写入性能
索引在磁盘持久化,内存中cache
使用document级别的锁,支持并发读写