資料重新整理中的並行改進(三)
在之前的兩篇中分享了資料重新整理的並行改進,其實在對很多的資料表做了切分之後,資料重新整理的總體負載就基本是平均的了。如何使得重新整理的過程更加平滑和完整,我們還是需要做一些工作的。
首先各個節點中都存在相同的表(其實是物化檢視),所以在重新整理的時候還是基本靠序列的思路來做並行的事情,怎麼理解呢。可以參見下面的圖片。
在有多個節點的情況下,資料從第1個節點到第3個節點重新整理的時候,內部還是序列的,只是在第1個節點重新整理的時候使用了並行,把700多個表分成了多個重新整理的程式來並行處理。對於各個節點之間的重新整理還是序列的過程。
就如同我在圖中用綠色標註的那樣。
我們先來實現節點的序列,可以使用如下的指令碼來使得某個指令碼在對應的節點中都會依次執行。
#ref_active.sh
sqlplus /nolog <
conn prdrefssca/xxxxx@xxxx
set timing on
set echo on
spool $1_prdrefssca.log
@$1
spool off
conn prdusg1ssca/x@xxxx
spool $1_prdusg1ssca.log
@$1
spool off
conn prdusg2ssca/xx@xxx
spool $1_prdusg2ssca.log
@$1
spool off
conn prdusg3ssca/xxxx@xxxx
spool $1_prdusg3ssca.log
@$1
spool off
conn prdusg4ssca/xxx@xxxx
spool $1_prdusg4ssca.log
@$1
spool off
EOF
在這個基礎上,使用使用並行切分的指令碼split_parall.sh 把多個表切分為指定的並行,比如700多個表按照資料情況切分成10個並行的重新整理程式。
然後就可以把指令碼 ref_active.sh利用起來,生成動態的指令碼,其實這個過程中會動態生成一些指令碼。類似這樣的形式 ksh ref_active.sh par1_tab_parall.lst.sql
最後把這些指令碼都合併為一個指令碼,在執行的時候就會更加方便,最後的指令碼是ref_all_active.sh
怎麼具體實現呢。
##### batch_split_parall.sh
tmp_ext_base_dir=`pwd`
ext_base_dir=`dirname $tmp_ext_base_dir`
ksh $ext_base_dir/append/split_parall.sh tab_parall.lst $1
for i in {1..$1}
do
cat ./par${i}_tab_parall.lst
echo "ksh ref_active.sh " par${i}_tab_parall.lst.sql > tmp_par${i}_tab_parall.sh
echo "ksh " tmp_par${i}_tab_parall.sh "&" >> ref_all_active.sh
done
生成的動態指令碼如下:
-rw-r--r-- 1 xxxxx dba 2132 Jun 25 19:07 par10_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4690 Jun 25 19:07 par10_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 101 Jun 25 19:06 par1_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 53 Jun 25 19:07 par1_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 976 Jun 25 19:07 par2_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 2101 Jun 25 19:07 par2_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 1997 Jun 25 19:07 par3_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4345 Jun 25 19:07 par3_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2077 Jun 25 19:07 par4_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4607 Jun 25 19:07 par4_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2055 Jun 25 19:07 par5_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4557 Jun 25 19:07 par5_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2016 Jun 25 19:07 par6_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4489 Jun 25 19:07 par6_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2059 Jun 25 19:07 par7_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4618 Jun 25 19:07 par7_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2038 Jun 25 19:07 par8_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4568 Jun 25 19:07 par8_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2118 Jun 25 19:07 par9_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4647 Jun 25 19:07 par9_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 416 Jun 25 18:29 ref_active.sh
-rw-r--r-- 1 xxxxx dba 301 Jun 25 19:07 ref_all_active.sh
-rw-r--r-- 1 xxxxx dba 73730 Jun 25 19:06 tab_parall.lst
-rw-r--r-- 1 xxxxx dba 2096 Jun 25 18:25 split_parall.sh
-rw-r--r-- 1 xxxxx dba 44 Jun 25 19:07 tmp_par10_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par1_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par2_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par3_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par4_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par5_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par6_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par7_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par8_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par9_tab_parall.sh
首先各個節點中都存在相同的表(其實是物化檢視),所以在重新整理的時候還是基本靠序列的思路來做並行的事情,怎麼理解呢。可以參見下面的圖片。
在有多個節點的情況下,資料從第1個節點到第3個節點重新整理的時候,內部還是序列的,只是在第1個節點重新整理的時候使用了並行,把700多個表分成了多個重新整理的程式來並行處理。對於各個節點之間的重新整理還是序列的過程。
就如同我在圖中用綠色標註的那樣。
我們先來實現節點的序列,可以使用如下的指令碼來使得某個指令碼在對應的節點中都會依次執行。
#ref_active.sh
sqlplus /nolog <
set timing on
set echo on
spool $1_prdrefssca.log
@$1
spool off
conn prdusg1ssca/x@xxxx
spool $1_prdusg1ssca.log
@$1
spool off
conn prdusg2ssca/xx@xxx
spool $1_prdusg2ssca.log
@$1
spool off
conn prdusg3ssca/xxxx@xxxx
spool $1_prdusg3ssca.log
@$1
spool off
conn prdusg4ssca/xxx@xxxx
spool $1_prdusg4ssca.log
@$1
spool off
EOF
然後就可以把指令碼 ref_active.sh利用起來,生成動態的指令碼,其實這個過程中會動態生成一些指令碼。類似這樣的形式 ksh ref_active.sh par1_tab_parall.lst.sql
最後把這些指令碼都合併為一個指令碼,在執行的時候就會更加方便,最後的指令碼是ref_all_active.sh
怎麼具體實現呢。
##### batch_split_parall.sh
tmp_ext_base_dir=`pwd`
ext_base_dir=`dirname $tmp_ext_base_dir`
ksh $ext_base_dir/append/split_parall.sh tab_parall.lst $1
for i in {1..$1}
do
cat ./par${i}_tab_parall.lst
echo "ksh ref_active.sh " par${i}_tab_parall.lst.sql > tmp_par${i}_tab_parall.sh
echo "ksh " tmp_par${i}_tab_parall.sh "&" >> ref_all_active.sh
done
生成的動態指令碼如下:
-rw-r--r-- 1 xxxxx dba 2132 Jun 25 19:07 par10_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4690 Jun 25 19:07 par10_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 101 Jun 25 19:06 par1_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 53 Jun 25 19:07 par1_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 976 Jun 25 19:07 par2_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 2101 Jun 25 19:07 par2_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 1997 Jun 25 19:07 par3_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4345 Jun 25 19:07 par3_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2077 Jun 25 19:07 par4_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4607 Jun 25 19:07 par4_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2055 Jun 25 19:07 par5_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4557 Jun 25 19:07 par5_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2016 Jun 25 19:07 par6_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4489 Jun 25 19:07 par6_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2059 Jun 25 19:07 par7_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4618 Jun 25 19:07 par7_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2038 Jun 25 19:07 par8_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4568 Jun 25 19:07 par8_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 2118 Jun 25 19:07 par9_tab_parall.lst
-rw-r--r-- 1 xxxxx dba 4647 Jun 25 19:07 par9_tab_parall.lst.sql
-rw-r--r-- 1 xxxxx dba 416 Jun 25 18:29 ref_active.sh
-rw-r--r-- 1 xxxxx dba 301 Jun 25 19:07 ref_all_active.sh
-rw-r--r-- 1 xxxxx dba 73730 Jun 25 19:06 tab_parall.lst
-rw-r--r-- 1 xxxxx dba 2096 Jun 25 18:25 split_parall.sh
-rw-r--r-- 1 xxxxx dba 44 Jun 25 19:07 tmp_par10_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par1_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par2_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par3_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par4_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par5_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par6_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par7_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par8_tab_parall.sh
-rw-r--r-- 1 xxxxx dba 43 Jun 25 19:07 tmp_par9_tab_parall.sh
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1712324/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料重新整理中的並行改進(一)並行
- 資料重新整理中的並行改進(二)並行
- [譯] 在 Python 中,如何運用 Dask 資料進行並行資料分析Python並行
- 記一次資料同步需求的改進(三)
- 【譯】.NET 7 中的效能改進(三)
- js操作 新增刪除table行,並進行重新整理JS
- 聚焦“智改數轉” ,三路並進推動企業資料安全建設
- 用R讀取PDF並進行資料探勘
- elmentplus中刪除el-treen 資料時,樹的資料改變了,但是樹不重新整理
- php 建立頁面表單並進行增刪改查PHP
- MySQL資料清理的需求分析和改進MySql
- Spring 通過Spring容器獲得資料來源物件並改進Spring物件
- shell中呼叫shell的三種方式&並行shell並行
- 【python】爬取疫情資料並進行視覺化Python視覺化
- Spotify如何改進資料科學家的資料發現?資料科學
- mogoose 建立資料庫並增刪改查Go資料庫
- LLM並行訓練3-資料並行並行
- 如何利用第三方資料進行大資料分析大資料
- 在Java中本地進行執行緒間資料傳輸的三種方式和原始碼展示Java執行緒原始碼
- 一個資料倉儲資料重新整理的實現機制(三)
- Swift 4.1 中的 Codable 改進Swift
- 改進我們的 Laravel Nova CRM(三)Laravel
- 如何用 Scrapy 爬取網站資料並在 Easysearch 中進行儲存檢索分析網站
- 使用 refreshNuxtData 重新整理 Nuxt應用 中的資料UX
- dbms_mview 並行重新整理 refresh parallelView並行Parallel
- Oracle中的並行Oracle並行
- 並行智慧 | 社交媒體資料在品牌資產管理中的力量並行
- Vue 中利用 eventBus 進行資料通訊的問題Vue
- 動態改變Drawable中我們自定義背景的顏色並設定顏色以16進位制進行設定
- 記一次資料同步需求的改進(二)
- 記一次資料同步需求的改進(一)
- Netty整合SpringBoot並使用Protobuf進行資料傳輸NettySpring Boot
- vuex配sessionStorage進行自動儲存,解決重新整理資料丟失的問題。VueSession
- 在SQL Server中對檢視進行增刪改SQLServer
- 連線資料庫並實現增、刪、改、查資料庫
- shell指令碼不換行重新整理資料指令碼
- 建立一個加密表空間並對錶內資料進行加密的示例加密
- python對介面中的資料進行md5加密Python加密