01 概述
提供原生的SDB API进行数据库管理及数据CURD操作; 提供兼容 MySQL、MariaDB、PostgreSQL 与 SparkSQL的四种关系型数据库实例; 提供兼容基于JSON的JSON文档类MongoDB数据库实例; 提供兼容S3对象存储与PosixFS文件系统的非结构化数据实例。
02 部署规划佳实践探索
操作系统:CentOS 7.6 SequoiaDB版本:5.0.1
对于磁盘的配置是选择用裸盘还是用RAID,各有什么优缺点 决定了磁盘的配置后如何规划数据组的数量? 数据分布怎么配置更合理?
问题一:裸盘还是RAID
问题二:数据节点数量规划
为避免多个数据节点部署在一块盘上,在业务压力大时候发生IO抢占的问题,我们建议按照每块盘上部署一个数据节点的方式来规划,终数据节点规划方案如下图。
问题三:如何规划数据分布
SequoiaDB在集群的管理上定义了数据域、分区组的概念。数据域由若干个复制组(ReplicaGroup)组成的逻辑对象。每个域都可以根据定义好的策略自动管理所属数据,如数据切片和数据隔离等。分区组又被称为复制组,一个复制组内可以包含一个或多个数据节点(或编目节点),节点之间的数据使用异步日志复制机制,保持终一致。
一个集群可以根据不同的业务系统来划分不同的数据域,不仅实现将不同业务系统数据在物理层面的隔离存储,同时也实现了不同业务系统数据的统一调度管理,而且以后的集群扩容也可以根据域的使用需求而只针对此域进行集群扩容,假定将测试环境的数据域按照存储数据的结构来划,则数据域规划方案如下:
下面演示一下如何划分数据域,以及如何通过不同的分区方式来管理超大表和小表。具体步骤如下。
1. 划分数据域
创建结构化域d1
创建非结构化域d2
创建表空间metaCS
创建主表’metaCL’
创建子表metaCL2020用于存储2020年的数据
创建子表metaCLMin用于存储2020年以前的数据
创建子表metaCLMax用于存储2020年之后的数据
将子表metaCL2020挂载到主集合上,用于存储2020年的数据
将子表metaCLMin挂载到主集合上,用于存储2020年以前的数据
将子表metaCLMax挂载到主集合上,用于存储2020年以后的数据
创建完多维分区表之后,我们简单插入几条数据:
{"YEAR": 2021, "Name": "Meppo"}
{"YEAR": 2020, "Name": "Tiny"}
{"YEAR": 2019, "Name": "Tommy"}
查看数据分布,可以看到数据根据YEAR的分区规则进入了各自的子表中
下面我们再向集合中插入几条数据,验证数据是否会分布在不同复制组中,可以看到新插入的数据都分布到了group2和group3中
新建smallCL表,分区组指定为group1
向集合中插入三条测试数据
查看smallCL表的数据分布,所有数据全都存在指定的数据组group1上,可以看到所有的数据都存储在group1中
03 总结
没有”完美”的规划,只有合适的规划,SequoiaDB作为一款开源的金融级分布式关系型数据库,系统部署规划方案灵活可配,用户可以通过数据域的划分让用户可以在复杂集群环境中对资源进行逻辑与物理划分隔离,可以划分多个数据组来解决单点数据量大的问题,可以选择裸盘使用来追求佳性能,也可以使用硬盘做RAID来降低日常运维的难度,因此只要确认好实际的业务需求,就能制定合适的部署规划方案。