鸿 网 互 联 www.68idc.cn

SequoiaDB 笔记

来源:互联网 作者:佚名 时间:2014-12-30 20:42
SequoiaDB 笔记:# SequoiaDB 笔记 _这几天翻了翻SequoiaDB的代码,记了点笔记。不保证下面内容的正确性(肯定有错的地方...

SequoiaDB 笔记

发表于1天前(2014-12-29 13:55)   阅读(63) | 评论() 0人收藏此文章,

赞0

1月10日 #长沙# OSC 源创会第32期开始报名

摘要 这几天翻了翻SequoiaDB的代码,记了点笔记。不保证下面内容的正确性(肯定有错的地方)


目录[-]

SequoiaDB 笔记

这几天翻了翻SequoiaDB的代码,记了点笔记。不保证下面内容的正确性(肯定有错的地方)

个人观感 优点 八卦&吐槽 综述

关于整体介绍,要看官方文件(这份文件看起来有些原始,应该是不同时期不同人的文件堆积起来的,创业公司不能要求太高),如果只关注一个摘要的话,请参考这个ppt。

SequoiaDB 数据库是一款新型企业级分布式非关系型数据库,帮助企业用户降低 IT 成本,并对大数据的存储与分析提供了一个坚实,可靠,高效与灵活的底层平台。

优势
通过非结构化存储与分布式处理,提供了近线性的水平扩张能力,让底层的存储不再成为瓶颈
提供了精确到分区级别的高可用性,预防服务器,机房故障以及人为错误,让数据24x7永远在线
提供了完善的企业级功能,让用户轻松管理高并发性任务,以及海量数据分析
增强的非关系型数据模型,帮助企业快速开发和部署应用程序,做到应用程序的随需应变 提供了最终一致性的保障,从根本上杜绝数据缺失
提供了在线应用与大数据分析的后台数据库的结合,通过读写分离机制做到同系统中数据分析与在线业 务互不干扰

系统架构

SequoiaDB 使用分布式架构,下图提供了对 SequoiaDB 体系结构的一般概述。

Alt text


在客户机端(或应用程序端),本地或/和远程应用程序都与 SequoiaDB 客户机库链接。本地与远程客户机 使用 TCP/IP 协议与协调节点进行通讯。
协调节点不保存任何用户数据,仅作为请求分发节点将用户请求分发至相应的数据节点。 编目节点保存系统的元数据信息,协调节点通过与编目节点通讯从而了解数据在数据节点中的实际分布。一
个或多个编目节点可组成复制组集群。

Alt text


数据节点保存用户的数据信息。一个或多个数据节点可以构成一个复制组(又称分区组)。复制组中每个数 据节点都存储该复制组的一份完整数据,又称为复制组实例(或分区组实例);复制组中的数据节点之间采 用最终一致性同步数据,不同的复制组中保存的数据无重复。
每个复制组中可以包含一个或多个数据节点。当存在多个数据节点时,节点间数据进行异步复制。复制组中 可以存在最多一个主节点与若干从节点。其中主节点可以进行读写操作,从节点进行只读操作

Alt text


从节点离线不影响主节点的正常工作。主节点离线后会在从节点中自动选举出新的主节点处理写请求

Alt text


节点恢复后,或新的节点加入复制组后会进行自动同步,保障数据在同步完成时与主节点一致。

在单个数据节点中的体系结构如下:

Alt text


在数据节点,活动由引擎可调度单元(EDU)控制。每一个节点为操作系统中的一个进程。每个 EDU 在节点 中为一个线程。对于外部用户请求其处理线程为代理线程,对于集群内部请求则由同步代理线程处理分区内 同步事件;或分区代理线程处理分区间同步事件。
所有对数据的写操作均会记录入日志缓冲区,通过日志记录器将其异步写入磁盘。 用户数据会由代理线程直接写入文件系统缓冲池,然后由操作系统将其异步写入底层磁盘。

对外接口

基本上和MongoDB区别不大,用js搞得,接口粗看起来也差不多,努努力估计双方能兼容。SQL的支持通过postgresql实现,同时还实现了rest接口。

数据模型

SequoiaDB 数据库使用 JSON 数据模型,而非传统的关系型数据模型。
JSON 数据结构的全称为 JavaScript Object Notation,是一种轻量级的数据交换格式,非常易于人阅读和编 写,同时也易于机器生成和解析。其底层存储是BSON。The same as MongoDB
单个文件的限制依然是16MB。

存储模型

其具体实现也是经典的文件–数据段—数据页结构
文件可以跨页(废话,页的大小最大64k),,但是跨不了块。
不知道是copy mongoDB还是处于系统简化的考虑,底层实际上还是mmap,也就是说读和换页什么的还是靠系统自己去搞得,相对于mongoDB的改进在于有后台任务刷脏页到磁盘。

一致性和持久性 事务模型

SequoiaDB 是 ACID 兼容文档级别,支持提交回滚等事务操作。默认情况下,SequoiaDB为了保证性能关闭事务的支持,如果用户需要则可以在启动数据库时指定参数打开事务。
在关闭事务支持时,一个单一操作能够写一个或多个字段,包括多个子文档的更新和数组元素更新。SequoiaDB 的 ACID 保证了文档更新的完整隔离性,任何错误都会引发回滚操作,以及客户能得到文档的一致性视图。
而当事务打开时,任何在事务启动到提交(回滚)之间的操作都会在数据节点写入事务日志并跟踪事务 ID。更改的记录在事务提交(回滚)前持有互斥锁,不可被其他会话更改。当前 SequoiaDB 事务的隔离级别为 UR。

一致性

SequoiaDB 采用集合级别的可配置一致性策略,允许用户在对记录修改时,根据该记录所在集合判断是否需要等待备节点的确认。
譬如,对于一个对性能要求较高、对数据可靠性要求一般的集合来说,可以在创建集合时将 write concern 参数设置为 1,代表只要写入主节点就可以返回成功信息。而该操作会在后台异步地发送给从节点执行。
而对于性能要求较低、对数据可靠性要求很高的集合来说,可以在创建集合时指定 write concern 参数为 3,代表该操作最少被三个节点确认执行成功后才能够返回。
当 write concern 的数量与该集合所在每个副本集中包含节点数量相等时,系统可以被认为是强一致,否则为最终一致。

对比 VS MongoDB
网友评论
<