ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Data-Stash数据导出分库分表、多活部署

2022-07-17 13:00:32  阅读:153  来源: 互联网

标签:分库 数据 导出 system Stash 分表 区块 Data


分库分表

分库分表配置

system.db.sharding=false //是否进行分库分表
system.db.shardingNumberPerDatasource=0  //分表个数
//数据源连接,用户名,登录密码
system.db0.dbUrl= 
system.db0.user=
system.db0.password=

原理
分库分表的方式分为垂直拆分和水平拆分,而数据仓库采用的是水平拆分即通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中。数据仓库根据配置的导出数据数据源个数确定分多少个库,根据配置shardingNumberPerDatasource确定每个库的每张表(block_task_pool,contract_info除外)有多少份,表的名称方式为表名+i(第几份)。数据仓库根据每张表的block_height字段(块高)进行分库分表,分库规则为block_height%数据库个数,分表规则为block_height%shardingNumberPerDatasource。即如果分两个库每个库每一张表有两份,区块高度为5的区块数据会被保存在第二个库的第二份表中,区块高度为6的区块数据会被保存在第一个库的第一份表中。

数据仓库使用sharding-jdbc来支撑分库分表增删改查功能。Sharding-JDBC尽量透明化水平分库分表所带来的影响,让使用方尽量像使用一个数据库一样使用水平分片之后的数据库集群,或者像使用一个数据表一样使用水平分片之后的数据表。

多活部署

多活部署配置

system.multiLiving=false  // 启动多活开关
system.zookeeperServiceLists=IP:2181 // zk服务节点列表
system.zookeeperNamespace=   //zk命名空间
system.prepareTaskJobCron= //任务准备job定时配置 ,主要用于读取当前区块链块高,将未抓取过的块高存储到数据库中
system.dataFlowJobCron= //任务分片执行job定时配置,主要用于执行区块下载任务
system.dataFlowJobItemParameters= //分片序列号和参数用等号分隔,多个键值对用逗号分隔,分片序列号从0开始,不可大于或等于作业分片总数
system.dataFlowJobShardingTotalCount= //任务分片数目

原理
数据导出组件使用Elastic-Job来调配数据导出应用集群,保证集群只保存一份区块数据,而不是每一个数据导出应用都保存同一份区块数据。根据数据导出流程,数据导出组件数据导出流程分成了两个任务,一个任务是prepareTask任务即将要从节点或者数据仓库获取区块数据的区块高度保存到blockTaskPool表中,状态设为0(init状态)。另一个任务DataFlowJob任务即从blockTaskPool中获取init状态的区块高度,然后从节点或者数据仓库中获取区块数据、解析、然后保存从区块数据中解析出来的数据到数据库各个表中。
prepareTaskJob任务被配置为一次只能有一个数据仓库应用执行。DataFlowJob任务则根据dataFlowJobShardingTotalCount参数拆分为多个子任务,分发集群中各个数据导出应用完成。如dataFlowJobShardingTotalCount = 8,数据导出集群为3,那么按照平均分配的策略,数据导出应用0将分配到【0,3,6】子任务,数据导出应用1将分配到【1,4,7】子任务,数据导出应用2将分配到【2,5】子任务。那么对应到要处理的区块数据的区块高度分别是 block_height % 8 = 【0,3,6】归数据导出应用0,block_height%8=【1,4,7】归数据导出应用1,block_height %8=【2,5】归数据导出应用。当集群中新群或者下线数据导出应用,将会重新分配子任务。

标签:分库,数据,导出,system,Stash,分表,区块,Data
来源: https://www.cnblogs.com/zhangchenwei/p/16486698.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有