数据刷新中的并行改进(二)

简介: 在之前的博文中分享了数据刷新中的并行改进建议,但是对于方案的落地还是有很多的细节需要实现。 首先是关于很多的表怎么把它们合理的进行并行切分。 根据实际的情况,因为这些数据字典表都相对数据量都不大,所以存在的分区表很少,所以可以考虑按照segment的大小来作为并行切分的基准。
在之前的博文中分享了数据刷新中的并行改进建议,但是对于方案的落地还是有很多的细节需要实现。
首先是关于很多的表怎么把它们合理的进行并行切分。

根据实际的情况,因为这些数据字典表都相对数据量都不大,所以存在的分区表很少,所以可以考虑按照segment的大小来作为并行切分的基准。
所以在分布式环境中,在进行了并行切分之后,数据的刷新速度也是会有差异的。为了尽量减少同一个数据源的刷新瓶颈,所以还是考虑在每个节点考虑采用并行刷新,完成一个节点,然后下一个,所以实际的情况就可能会是下面的样子。
黄色部分表示还没有开始,绿色部分表示正在刷新,灰色部分表示已经完成。所以同样的表在不同的节点中可能刷新速度也会有所不同。

所以目前为止,难点有三个,一个是能够把多个表进行并行切分,第二个就是能够合理的同步刷新的进度,第三个就是能够在多个节点间持续的进行切换。
首先第一个问题是并行切分的部分,可以参考下面的代码。
这个脚本会把多个表进行切分,然后生成物化视图刷新的语句,不同的节点会生成单独的一套脚本便于控制和管理。
par_file_name=$1
sort -rn -k2 $par_file_name > ${par_file_name}_tmp
mv  ${par_file_name}_tmp  ${par_file_name}

par_no=$2
obj_length=`cat ${par_file_name}|wc -l `
echo $obj_length
sid_list=cust01,usg01,usg02,usg03,usg04

for i in {1..$par_no}
do
  for tmp_sid in {$sid_list}
  do
  sed -n ''$i'p' ${par_file_name}> par${i}_${par_file_name}
  done
export par${i}_sum=`cat par${i}_${par_file_name}|awk '{print $2}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo \\${par${i}_sum}`
done

function getMin
{
param_no=$#

for i in {1..$param_no}
do
export par${i}_=`eval echo \\${${i}}`
done

min_sum=$par1_
min_par=par1_

for i in {2..$param_no};
do
j=`expr $i - 1`
tmp_cur_par=par${i}_
tmp_cur_sum=`eval echo   \\${${tmp_cur_par}}`
if [ $min_sum -le $tmp_cur_sum  ]
then
 min_sum=$min_sum
 min_par=$min_par
else
 min_sum=$tmp_cur_sum
 min_par=$tmp_cur_par
fi
done
echo  $min_par
}

function getSumList
{
for k in {1..$par_no}
do
#export par${k}_sum=`cat par${k}_${par_file_name}|awk '{print $2}' | awk '{sum+=$1}END{print sum}'`
#echo `eval echo \\${par${k}_sum}`

#par_list="$par_list  `eval echo \\${par${k}_sum}`"
#echo $par_list

tmp_sum=`cat par${k}_${par_file_name}|awk '{print $2}' | awk '{sum+=$1}END{print sum}'`
echo $tmp_sum
#tmp_par_list=${tmp_par_list} "" $tmp_sum
done
#echo $tmp_par_list
}


j=`expr $par_no + 1`
for i in {$j..${obj_length}}
do
tmp_obj=`sed -n ''$i'p' ${par_file_name}'`
tmp_obj2=`sed -n ''$i'p' ${par_file_name}|awk '{print "execute dbms_mview.refresh('\''"$1"'\'','\''C'\'');"}'`

par_list=`getSumList`
tmp_par=`getMin  $par_list`
echo 'move '`sed -n ''$i'p' ${par_file_name}|awk '{print $1}'` ' to '$tmp_par
echo $tmp_obj >> ${tmp_par}${par_file_name}
for tmp_sid in {$sid_list}
do
echo $tmp_obj2 >> ${tmp_par}${par_file_name}.$tmp_sid
done
tmp_par=0
done

for i in {1..$par_no}
do
cat par${i}_${par_file_name}|awk '{print $2}' | awk '{sum+=$1}END{print sum}'
done

脚本运行方式如下,比如我们需要把tab_parall.lst中的内容进行切分,切分为10个并行线程,可以这样运行脚本。
ksh split.sh tab_parall.lst 10

tab_parall.lst的内容如下:
table1    1000000
table2     800000
table3     500000
table4     300000
.....
生成的脚本如下:
-rw-r--r-- 1 prodbuser dba  2132 Jun 22 18:36 par10_tab_parall.lst
-rw-r--r-- 1 prodbuser dba  4639 Jun 22 18:36 par10_tab_parall.lst.cust01
-rw-r--r-- 1 prodbuser dba  4639 Jun 22 18:36 par10_tab_parall.lst.usg01
-rw-r--r-- 1 prodbuser dba  4639 Jun 22 18:36 par10_tab_parall.lst.usg02
-rw-r--r-- 1 prodbuser dba  4639 Jun 22 18:36 par10_tab_parall.lst.usg03
-rw-r--r-- 1 prodbuser dba  4639 Jun 22 18:36 par10_tab_parall.lst.usg04
-rw-r--r-- 1 prodbuser dba   101 Jun 22 18:35 par1_tab_parall.lst
-rw-r--r-- 1 prodbuser dba   976 Jun 22 18:36 par2_tab_parall.lst
-rw-r--r-- 1 prodbuser dba  2045 Jun 22 18:36 par2_tab_parall.lst.cust01
-rw-r--r-- 1 prodbuser dba  2045 Jun 22 18:36 par2_tab_parall.lst.usg01
-rw-r--r-- 1 prodbuser dba  2045 Jun 22 18:36 par2_tab_parall.lst.usg02
-rw-r--r-- 1 prodbuser dba  2045 Jun 22 18:36 par2_tab_parall.lst.usg03
-rw-r--r-- 1 prodbuser dba  2045 Jun 22 18:36 par2_tab_parall.lst.usg04
-rw-r--r-- 1 prodbuser dba  1997 Jun 22 18:36 par3_tab_parall.lst
-rw-r--r-- 1 prodbuser dba  4296 Jun 22 18:36 par3_tab_parall.lst.cust01
-rw-r--r-- 1 prodbuser dba  4296 Jun 22 18:36 par3_tab_parall.lst.usg01
-rw-r--r-- 1 prodbuser dba  4296 Jun 22 18:36 par3_tab_parall.lst.usg02
-rw-r--r-- 1 prodbuser dba  4296 Jun 22 18:36 par3_tab_parall.lst.usg03
-rw-r--r-- 1 prodbuser dba  4296 Jun 22 18:36 par3_tab_parall.lst.usg04
-rw-r--r-- 1 prodbuser dba  2077 Jun 22 18:36 par4_tab_parall.lst



目录
相关文章
|
数据采集 网络协议 定位技术
Socks5代理IP可以运用到哪些应用场景?
Socks5代理与HTTP代理对比,Socks5支持多种协议,提供更强认证,适合P2P和UDP,适用于匿名上网、突破网络限制、低延迟游戏、P2P文件共享、SEO和网络爬虫。其多功能性、安全性和广泛支持使其在多个场景中优于HTTP代理。随着技术发展,Socks5代理的应用前景广阔。
|
7月前
|
数据库
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
【YashanDB知识库】数据库一主一备部署及一主两备部署时,主备手动切换方法及自动切换配置
|
9月前
|
边缘计算 容灾 网络性能优化
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
254 4
|
7月前
|
数据可视化 数据挖掘 BI
强大的Quick BI体验
作为一名Python开发工程师,我日常涉及数据分析工作。近期体验了阿里云的Quick BI——一款全场景数据消费式BI平台。它支持拖拽操作、实时分析海量数据,并提供丰富的可视化组件,如柱状图、地图等,助力高效决策。本文分享了从申请账号到使用测试数据进行可视化的全过程,肯定其便捷性与强大功能的同时,也建议加强与Python的集成、扩展高级分析模型及用户自定义功能。适合对数据分析感兴趣的读者了解与尝试。
241 84
|
7月前
|
开发框架 缓存 自然语言处理
HarmonyOS ArkTS声明式UI开发实战教程
本文深入探讨了ArkTS作为HarmonyOS生态中新一代声明式UI开发框架的优势与应用。首先对比了声明式与命令式开发的区别,展示了ArkTS如何通过直观高效的代码提升可维护性。接着分析了其核心三要素:数据驱动、组件化和状态管理,并通过具体案例解析布局体系、交互组件开发技巧及复杂状态管理方案。最后,通过构建完整TODO应用实战,结合调试优化指南,帮助开发者掌握声明式UI设计精髓,感受ArkTS的独特魅力。文章鼓励读者通过“破坏性实验”建立声明式编程思维,共同推动HarmonyOS生态发展。
312 3
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
《揭秘AI语音助手:从“听”到“说”的智能之旅》
在数字化时代,AI语音助手如Siri、Alexa、小爱同学等成为生活中的得力伙伴。它们通过自动语音识别(ASR)将语音转换为文本,利用自然语言处理(NLP)理解语义并生成回应,再通过文本到语音转换(TTS)输出自然语音。ASR捕捉、预处理和分析语音信号;NLP解析文本、理解意图;TTS合成流畅语音。这三项技术协同工作,使语音助手能听懂、理解并回应用户,为人机交互带来便利与创新。
709 1
|
9月前
|
存储 数据采集 Cloud Native
极速数仓ClickHouse步入云原生新纪元
极速数仓ClickHouse步入云原生新纪元,由ClickHouse核心研发团队技术总监王鹏程及长桥航行服务架构负责人刘文全主讲。内容涵盖ClickHouse的优势与应用场景、架构解析、最佳实践及未来展望。特别介绍了ClickHouse Enterprise版本在阿里云上的优化与创新,支持实时查询、高性能资源利用和丰富的SQL扩展。长桥证券分享了其基于阿里云ClickHouse构建行情服务的实践经验,展示了如何通过ClickHouse实现高效的数据存储与处理,显著降低存储成本并提升写入性能。
215 0
|
11月前
|
人工智能 自然语言处理 算法
企业内训|AI/大模型/智能体的测评/评估技术-某电信运营商互联网研发中心
本课程是TsingtaoAI专为某电信运营商的互联网研发中心的AI算法工程师设计,已于近日在广州对客户团队完成交付。课程聚焦AI算法工程师在AI、大模型和智能体的测评/评估技术中的关键能力建设,深入探讨如何基于当前先进的AI、大模型与智能体技术,构建符合实际场景需求的科学测评体系。课程内容涵盖大模型及智能体的基础理论、测评集构建、评分标准、自动化与人工测评方法,以及特定垂直场景下的测评实战等方面。
527 4
|
人工智能 Ubuntu Linux
RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
开始搭建RK3568的基础虚拟机,具备基本的通用功能,主要包含了串口工具minicom,远程登陆ssh,远程传输filezilla,代码编辑工具vscode。
RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传输、安装vscode和samba共享服务
|
数据采集 缓存 安全
浅谈WAF产品如何来拦截攻击
浅谈WAF产品如何来拦截攻击
413 0