【技术解密】SequoiaDB分布式存储原理
分布式架构势在必行
在传统的数据库技术中,为了保证数据的安全与高性能,通常会选择高端的外置存储作为数据库的主要存储源,而本地磁盘则被视为不可靠的性能低下的一种设备。这种观念的产生,主要是由于过去本地磁盘的生产技术存在一定的瓶颈,并且其稳定性和性能确实都远落后于高端存储。
- 互联网应用迅猛发展
在过去, IT行业的发展远没有现在蓬勃,大家更多的是在家里或者办公室通过桌面级设备上网查询资料和浏览世界各类时事新闻。在这样的时代背景下,互联网企业和像银行、通讯类公司这种对IT部门十分依赖的传统企业,一台小型机和一个优秀的关系型数据库就能够很好的处理企业内部多个系统之间的数据了。
但是在最近10年,甚至更短的时间里,每个人手中都拥有了一部或者多部智能移动终端,它们除了能够打电话、发短信,也能够像笔记本电脑一样,上网、玩游戏、购物、聊天。各种智能应用和业务场景也被开发者发掘出来了,这些新颖的应用也正在被大部分消费者所接受。
- 硬件成本大大降低
一台小型机+一个优秀的关系型数据库已经越来越不能满足IT部门对急速膨胀的数据量的处理需求了,重要一个原因,传统的数据库技术无法做到方便快捷地将海量数据分配给多台服务器去计算,而永远只能通过垂直扩容硬件的方式提升系统性能。
经过这10几年的发展,过去不被企业认可的磁盘技术有了很大的进步,从SATA磁盘到SAS磁盘,从机械磁盘到SSD磁盘,技术的进步,使得本地磁盘的稳定性和读写性能都有了非常大的提升。它们也逐渐被企业使用在重要的生产环境中。
- 分布式大数据技术革新
与磁盘技术同时发展起来的,还有各种大数据技术。先有谷歌的三篇著名论文,后有各种技术特点的NoSQL/NewSQL数据库。它们的技术实现,都是基于廉价的X86服务器和本次磁盘作为主要的硬件服务器而设计。
并且各种NoSQL/NewSQL数据库的技术特点,都包含了数据分布式存储的功能技术,以解决当前企业数据量快速膨胀,客户对IT系统的相应时间要求越来越高的技术难题。
数据库分布式原理介绍
Hash 方式分布数据
数据库Hash方式分布数据,原理就是用户在建立集合时,指定此集合的切分方式为Hash,并且显式指定ShardingKey 为记录中哪个字段。

图1
当应用APP向数据库发送写入记录的请求时,首先会将记录与请求发送到数据库的Coord节点,Coord节点会根据此集合的切分方式,例如ShardingKey=id,ShardingType=Hash,以及记录中ShardingKey的Hash值,判断应该将此记录分发给哪个数据分区组。一旦数据分区组接收到写入记录请求与写入的数据信息,数据分区组会调用数据库中相应的方法将此记录持久化到磁盘上,并且同时更新此数据分区组中对应集合的索引数据。
Range 方式分布数据
数据库Range方式分布数据,原理就是用户在建立集合时,指定此集合的切分方式为Range,并且显式指定ShardingKey 为记录中哪个字段。

图2
当应用APP向数据库发送写入记录的请求时,首先会将记录与请求发送到数据库的Coord节点,Coord节点会根据此集合的切分方式,例如ShardingKey=id,ShardingType=Range,以及记录中ShardingKey的值,判断此记录是属于哪个范围的数据分区组,然后再将此记录发送给对应的数据分区组。一旦数据分区组接收到写入记录请求与写入的数据信息,数据分区组会调用数据库中相应的方法将此记录持久化到磁盘上,并且同时更新此数据分区组中对应集合的索引数据。
Partition 方式分布数据
在SequoiaDB数据库中,对比其他的NoSQL数据库的简单数据切分功能,使用了“主子表”的功能,这个功能与部分关系型数据库的Partition功能类似,都是在数据库中建立一张逻辑的总视图,然后将多个Partition通过某个字段的范围限定挂载到总视图上。
通过“主子表”这种分布式方式,用户可以按照需求对于数据进行更好、更细化的切分工作。同时,类似于时间序中或冷热数据可以做到天然的切分,这样更有利于硬件资源的充分利用。
在SequoiaDB中,main collection 对应关系型数据库的总视图,sub collection 对应关系型数据库的partition。而SequoiaDB数据库中,比较特殊的是,sub collection 实际上就是一个普通的集合,而main collection 则是只存在于数据库的编目节点中,并不会在任何数据分区组中写入任何数据。
用户基本可以理解为main collection为逻辑视图,只在编目节点中保留一些数据范围信息,而sub collection 则是数据库中普通建立的集合,只是在配合main collection 一起使用时,才被称呼为sub collection。

图3
在一般情况下,用户建立一个集合,此集合会随机被分配到某个数据分区组上。如果用户要利用主子表功能来实现数据的分布式存储,还需一些小技巧。用户在建立集合时,可以通过显式指定此集合被分配到哪个数据分区组上,从而避免sub collection扎堆在某个数据分区组上。
用户最后一个步骤就是给每个sub collection 划定范围分区,然后将各个sub collection attach到main collection 上。
多维分区
在SequoiaDB数据库多种分布式原理上,最为复杂和最为高效的方法,就是数据多维分区。多维分区,顾名思义,就是在对集合做数据分区时,不止一种分区方式同时作用在一个集合上。
如图4 ,多维分区实际上就是主子表和Hash分区相结合的一种方式。

图4
目前SequoiaDB的多维分区可以为一个集合提供两个字段的做分区。一般情况下,用户可以在主子表中对time字段做范围切分,然后再对sub collection 的id字段做Hash切分。
用户使用多维分区的方式,主要的优势在于可以将一个海量数据的集合以更加小的颗粒度做数据均衡,以提升数据库的性能。
用户在使用多维分区功能时,还可以结合数据库的Domain 功能,来更好地处理数据分区任务。

图5
Domain,就是数据库将多个数据分区组整合在一起的一个逻辑域,用户可以在建立集合空间时直接指定此集合空间属于哪个Domain上,然后基于此集合空间建立的集合,只要是ShardingType=Hash的,数据库就会自动将此集合按照ShardingKey的Hash 值分发给属于此Domain的数据分区组。
分布式架构是未来大数据甚至所有互联网应用的大势所趋,而对于海量数据的存储和管理,分布式架构天然具有高性能、高可用等等核心优势点。
SequoiaDB巨杉数据库提供的多种数据分布/分区功能,不仅在存储架构上提供了多样化的选择,满足了更多大数据应用场景下的需求。同时,通过我们的“主子表”、“多维分区”等数据分区功能,在满足业务需求同时还大大的提升了系统的性能。
SequoiaDB巨杉数据库2.6最新版下载
SequoiaDB巨杉数据库技术博客
SequoiaDB巨杉数据库社区

【技术解密】SequoiaDB分布式存储原理的更多相关文章
- 【操作教程】SequoiaDB分布式存储教程
1.各模式适用场景介绍 由于SequoiaDB对比其他的NoSQL有更多的方式将数据分布到多台服务器上,所以下面笔者为阅读者一一介绍每种分布式方式适合于哪种场景. 1.1 Hash 方式分布数据 在H ...
- 非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...
- 《大型网站技术架构:核心原理与案例分析》【PDF】下载
<大型网站技术架构:核心原理与案例分析>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 本书通过梳理大型网站 ...
- 2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165232 Exp2 后门原理与实践 1. 后门原理与实践实验说明及预备知识 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 ( ...
- 2018-2019-2 20165237《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 20165237<网络对抗技术>Exp2 后门原理与实践 一.实践目标 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...
- 2018-2019-2 网络对抗技术 20165325 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165325 Exp2 后门原理与实践 实验内容(概要): (1)使用netcat获取主机Shell,cron启动 首先两个电脑(虚拟机)都得有netcat, ...
- 2018-2019-2 网络对抗技术 20165206 Exp2 后门原理与实践
- 2018-2019-2 网络对抗技术 20165206 Exp2 后门原理与实践 - 实验任务 (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主 ...
- 2018-2019-2 网络对抗技术 20165323 Exp2 后门原理与实践
2018-2019-2 网络对抗技术 20165323 Exp2 后门原理与实践 一.实验要求 (3.5分) (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用soc ...
- 2018-2019-2 20165235《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 20165235<网络对抗技术>Exp2 后门原理与实践 实验内容 1.使用netcat获取主机操作Shell,cron启动 2.使用socat获取主机操作Shel ...
随机推荐
- Node.js~ioredis处理耗时请求时连接数瀑增
回到目录 关于redis连接数过高的解释 对于node.js开发环境里,使用传统的redis或者使用ioredis都是不错的选择,而在处理大数据请求程中,偶尔出现了连接池( redis服务端的最大可用 ...
- java多线程面试总结
一:基本知识点 1.1线程与进程区别: 1.进程是资源分配的最小单位,线程是CPU调度的最小单位 2.一个进程由一个或多个线程组成 3.进程之间相互独立,每个进程都有独立的代码和数据空间,但同一进程下 ...
- C#基础知识-编程思想之封装(七)
既然是学习面向对象的编程那自然要了解面向对象中的三大基石,封装.继承和多态. 我觉得要解释这三大基本概念用一篇文档很难解释清楚,想要具体形象的去了解,还是需要每一个概念用一个篇幅来说明,将封装.继承和 ...
- SparkMLlib分类算法之支持向量机
SparkMLlib分类算法之支持向量机 (一),概念 支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最 ...
- spring-线程池(1)
多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...
- AjaxPro.AjaxMethod 简单应用,
用AjaxPro无刷新实现站内信息实时提示功能,用AjaxPro.2.dll实现表数据绑定和无刷新分页 首先,必不可少的就是dll-----AjaxPro.2 下载地址:http://down7.pc ...
- centos7下,解决Apache错误日志文件过大问题
1,日志文件太大问题 第一步:停止Apache服务的所有进程,删除 /var/log/httpd目录下的 error.log.access.log文件 第二步:打开 /etc/httpd/conf ...
- Windows下以Local模式调试SparkStreaming的WordCount例子
1.下载Windows版的NetCat https://eternallybored.org/misc/netcat/ 2.启动NetCat nc -l -p 9999 3.将SAPRK_HOME\c ...
- TCP:三次握手、四次握手、backlog及其他
TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数据都会经过数据的封装和解封的过程,流程如下图所示: 在 ...
- 一位菜鸟的java 最基础笔记
java的特性 简单性(Simple). 结构体系中立(Architecture Neutral). 面向对象(Object Oriented). 易于移植(Portable). 分布式(Distri ...