Arango浅析

参考文章:  

开源NoSQL数据库ArangoDB浅析

0.特征

  • 多模型:文档,图形和键值对 - 根据您的应用对您的数据进行建模。
  • 连接:方便地加入属于一起的灵活的临时查询,减少数据冗余。
  • 交易:轻松应用程序开发,确保数据的一致性和安全性你的客户没有麻烦。
  • 使用ArangoDB Foxx以数据为中心的微服务方法,将您的应用程序逻辑和数据库融合在一起,以实现最大吞吐量
  • 适用于所有人的JavaScript:没有语言动物园,您可以使用浏览器中的一种语言到后端
  • 灵活的数据建模:将您的数据建模为键值对,文档或图形的组合 - 非常适合社交关系
  • 不同的存储引擎:ArangoDB提供了一个主要用于内存操作的存储引擎,以及一个基于RocksDB的备用存储引擎,它可以处理比RAM大得多的数据集。
  • 强大的查询语言(AQL)来检索和修改数据
  • 事务:使用可选的事务一致性和隔离在多个文档或集合上运行查询
  • 复制和分片:以主从配置设置数据库或在多个服务器之间传播更大的数据集
  • 可配置的耐久性:让应用程序决定是否需要更高的耐用性或更高的性能
  • 无架构模式使您可以将MySQL的空间效率与NoSQL的性能结合起来
  • 免费索引选择:为您的问题使用正确的索引,无论是跳过列表还是全文搜索
  • ArangoDB是多线程的 - 利用所有核心的强大功能
  • 它是开源的(Apache License 2.0)

1.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的实用程序。

1.2 AQL查询示例

Arango浅析_第1张图片

二、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的方式进行通讯。

Arango浅析_第2张图片

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级别的锁,支持并发读写

你可能感兴趣的:(arangodb)