共计 4281 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章给大家介绍分布式数据库如何玩转 HTAP 场景,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
传统数据库架构面临的痛点
1. 集群分散不利于整合,数据结构同步工作量大
第一招:数据源的数据同步
通过开发消费 kafka 的程序将数据同步到 SequoiaDB 数据中,保持和生产实时同步。以下为数据同步加载架构图:
第二招:弹性扩容
第三招:多模数据引擎使用
MySQL 实例适用于比较熟悉 MySQL 的操作人员,适合精准查询、业务数据写入、柜面查询、OLTP 场景。增删查改操作和 MySQL 完全一致,底层数据保存在 SequoiaDB。
PostgreSQL 实例适用于比较熟悉 PostgreSQL 的操作人员,适合精准查询和 OLAP 场景。支持增删查改等功能和 PostgreSQL 使用完全一致,采用外表的方式将数据保存在 SequoiaDB 中。
Spark 实例为分布式集群,SparkSQL 适合报表分析、大表关联查询和 OLAP 场景。跨库关联查询比较友好,支持标准 SQL、支持 JDBC 访问、支持 Python 对接查询。
第四招:多种 SQL 引擎关联使用方法
4.1 MySQL 创建表
创建 temp.test 这张表,其中字段信息如下所示:
create table temp.test
(
numcode smallint,
agentcode char(12),
bankname varchar(120),
flag decimal(8,4),
timecode datetime
);
给 temp.test 这个表插入下面的 4 条记录:
insert into temp.test (numcode,agentcode,bankname,flag,timecode)values(1, test1 , beijingbank1 ,10.1, 2019-06-21 10:07:52’);
insert into temp.test (numcode,agentcode,bankname,flag,timecode)values(2, test2 , beijingbank2 ,10.2, 2019-06-22 10:07:52’);
insert into temp.test (numcode,agentcode,bankname,flag,timecode)values(3, test3 , beijingbank3 ,10.3, 2019-06-23 10:07:52’);
insert into temp.test (numcode,agentcode,bankname,flag,timecode)values(4, test4 , beijingbank4 ,10.4, 2019-06-24 10:07:52
更新 temp.test 中 numcode=1 的记录中 bankname 为 guangzhoubank
mysql update temp.test set bankname= guangzhoubank where numcode=1;
Query OK, 0 rows affected (0.00 sec)Rows matched: 0 Changed: 0 Warnings: 0
更新后再次查询,显示更新已经成功
mysql select * from temp.test;
删除 temp.test 表中 numcode=1 的这条记录
mysql delete from temp.test where numcode=1;
Query OK, 0 rows affected (0.01 sec)
mysql select * from temp.test;
在 PostgreSQL 客户端创建映射表,能够查询出数据
temp=# create foreign table test
temp-# (
temp(# numcode int,
temp(# agentcode text,
temp(# bankname text,
temp(# flag decimal(8,4),
temp(# timecode text
temp(# )
temp-# server sdb_server
temp-# options ( collectionspace temp , collection test , decimal on );
连接 SparkSQL 客户端创建映射表,能够查询出数据
create table temp.test (
numcode int,
agentcode string,
bankname string,
flag decimal(8,4),
timecode string
)USING com.sequoiadb.spark OPTIONS ( host 10.139.***.***:11810 , collectionspace temp , collection test) ;
以上证明 MySQL、PostgreSQL 和 Spark 三者之间数据是通的,数据可以共用。
4.2 使用 Spark 生成子表
连接 Spark 客户端,使用 create table as 的方式创建新表 test2
create table temp.test2 USING com.sequoiadb.spark OPTIONS (
host 10.139.***.***:11810’,
domain allDomain’,
collectionspace temp’,
collection test2’,
ignoreduplicatekey true ,
shardingkey {_id :1}’,
shardingType hash’ ,
compressiontype lzw’ ,
autosplit true’ )as select * from temp.test ;
连接 MySQL 客户端,映射 Spark 创建的新表能够查询出同步的数据
mysql create table temp.test2
- (
- numcode smallint,
- agentcode char(12),
- bankname varchar(120),
- flag decimal(8,4),
- timecode datetime
- );
mysql select * from temp.test2;
第五招:多副本机制的应用
5.1 同城三副本高可用架构
其中有主备两个机房,其中主机房部署两个节点,备机房部署一个节点。三台机器共同组成一个数据组,其中选举逻辑遵循 Raft 协议。
5.2 主备一致性设置
在分布式系统中,一致性是指数据在多个副本之间数据保持一致的特性。SequoiaDB 巨杉数据库支持不同级别的主备一致性策略,以适配不同的应用场景。用户可根据业务对数据安全性和服务可用性的要求,选择不同的一致性策略。
1)强一致性
写所有节点当发生写操作时,数据库会确保所有复制组节点都同步完成才返回。写操作处理成功后,后续读到的数据一定是当前复制组内最新的。优势是能够有效的保证数据的完整性和安全性,劣势则是会降低复制组的写入性能,并且当集群内有一个节点故障或者异常时,无法写入数据,降低高可用性。
在核心交易型业务中,为了保证数据安全性,同时可以牺牲一定的写入性能时,推荐使用强一致性策略。
2)最终一致性
为了提升数据库的高可用性,以及实现数据的读写分离,SequoiaDB 默认采用“最终一致性”策略。在读写分离时,读取的数据在某一段时间内可能不是最新的,但副本间的数据最终是一致的。
写主节点在主节点执行写操作成功后,写操作即可返回。对数据查询一致性要求不高的业务,如历史数据查询平台,夜间批量导入数据以及白天提供查询业务,推荐使用写主节点的最终一致性策略。
其中强一致还是最终一致创建集合时由 ReplSize 这个参数来指定,创建集合时如设置 ReplSize 为 - 1 表示强一致,默认为 ReplSize 值为 1 表示最终一致。根据使用场景来选择使用强一致还是最终一致,用户可以通过 db.setAttributes() 修改 ReplSize 属性。
第六招:多样化的监控工具
SequoiaPerf 工具除了能够协助用户对慢查询快速定位分析,还能够帮助用户全面监控 SequoiaDB 数据集群。在 SequoiaPerf 的首页上,用户可以对 SequoiaDB 数据库集群运行情况做一个宏观的浏览,快速查阅当前集群的运行情况。
在 SequoiaPerf 的服务器资源页面上,用户可以了解服务器更加详细的信息。
例如服务器磁盘的 I / O 使用情况,可以通过放大图表获得更加详细的数据。同时用户也可以通过页面右上角的时间栏,选择查看近期一段时间的资源使用情况。
小结
1. 数据库在数据管理中的突出能力
SequoiaDB 巨杉数据库是一款金融级分布式关系型数据库,产品引擎采用原生分布式架构,100% 兼容 MySQL 语法和协议,支持完整的 ACID 和分布式事务。同时 SequoiaDB 还提供多模(multi-model)数据库存储引擎,原生支持多数据中心容灾机制,是新一代分布式数据库的首选。SequoiaDB 巨杉数据库可以为用户带来如下价值:
完全兼容传统关系型数据,数据分片对应用程序完全透明
高性能与无限水平弹性扩展能力
分布式事务与 ACID 能力
同时支持结构化、半结构化与非结构化数据
金融级安全特性,多数据中心间容灾做到 RPO = 0
HTAP 混合负载,同时运行联机交易与批处理任务且互不干扰
多租户能力,云环境下支持多种级别的物理与逻辑隔离
2. 实践成果
数据库完美解决目前传统数据库面临的痛点,降低了 IT 成本、提高运维效率,使数据能够有效给企业提供服务。其优势如下:
提高查询效率,使用 Spark 大表查询效率提高 20 倍。
容量多,合并同步了多个生产库、历史库的全部数据。
模式新,支持多种数据类型、结构化和非结构化。
扩容简单,支持快速扩容和缩容,基本有机器就能扩容。
上手简单,一键部署使用,降低 dba 学习成本。
查询引擎丰富,支持多种 SQL 查询引擎,丰富业务使用。
接口丰富,除了 SQL 还支持 JDBC、ODBC 和 API 多种接口,灵活使用。
系统完备,有新的业务系统随时可以接入。
关于分布式数据库如何玩转 HTAP 场景就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。