NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

Mariadb(MySQL 5.5.X) 水平分區(分表)實際設計介紹by Neil

 Range  水平分區實作

create table xrange (  no int not null , name  varchar(30) null,  

sptime varchar(50) null,  burn date not null,  weapon varchar(50) not null,

power int not null  )  


partition by range columns(burn)                    #使用brun 年份分區,5年為一Prartition p0~p3

                                                                          maxvalue 大於1997-07-16紀錄於"p4 " 

(  partition p0 values less than ('1982-01-01'),  

 partition p1 values less than ('1987-01-01'),

 partition p2 values less than ('1992-09-09'),

 partition p3 values less than ('1997-07-16'),  

PARTITION p4 VALUES LESS THAN MAXVALUE  );

OK 接下來我們將前一步建立的xtable 範例資料表單全部倒入方才設計xrange (水平分區表單)

   insert into xrange select * from xtable;

  Then  來檢視驗證各筆資料是否成功被水平分割到指定Partition 存放

   Partition: p4    由於burn >  
 partitions p3 values less than ('1997-07-16'),  故該筆資料
 
   將落點到p4 分割區存放  參考下圖OK

爾後我現手動加一筆新資料測試是否落在不同Partition 區間
insert into xrange (no,name,sptime,burn,weapon,power) values ('12','Zack','銅時空','1988-09-18','鬼靈焰火球','24000');
 Range 條件約束區間  > p1 但 < p2  故落點配置到p2  已符合我們水平分割設計Range需求
 List  水平分區實作,取欄位值"Sptime"  角色所在時空區各主角存在於哪個時空  ?金.銀.銅.鐵

 
就終極系列多部描述至今已推出 金時空(終極一班) ,鐵時空(終極一家,X宿舍),銀時空(終極三國)

 及即將推出下一部銅時空(終極惡女),
本例將以
角色存在"時空背景"設計list 條件table "xlist" 表


 下圖為: 從鐵時空穿越到金時空的"汪大東" 

List 水平分割Schema如下


create table xlist (

no int not null ,

name  varchar(30) null,

sptime varchar(50) null,

burn date not null,

weapon varchar(50) not null,

power int not null

)

partition by list columns(sptime) (             #選擇sptime varchar 欄位做水平分割         

partition p0 values in ('金時空','錫時空'),    #sptime = 金時空 或 錫時空 丟到 p0 分區

partition p1 values in ('銀時空'),                #sptime = 銀時空 丟到 p1分區

partition p2 values in ('鐵時空'),               #sptime = 鐵時空 丟到 p2分區

partition p3 values in ('銅時空')               #sptime = 銅時空 丟到 p3分區 


);

OK 接下來我們將前一步建立的xtable 範例資料表單全部倒入方才設計xlist (水平分區表單)

 insert into xlist  select * from xtable;  
 

explain partitions select count(1) from xlist where sptime='金時空' and no <=9 order by no G;

得 parttition p0   #金時空角色有三位被配置到 p0 分區:  汪大東,丁小雨,王亞瑟

再來看看"錫時空" ,終極系列本無介紹"錫時空" 故Neil自建一筆虛擬Record Insert 測試

因為'錫時空" 與'金時空" 被配置在同一個Partition "P0" 故該筆紀錄存在於"P0" 分區(合理)

  備註:  List 無 Range 擁有 maxvalue 設計,不在List 選項內Insert 時將出現錯誤 

             
Range 是拘限一定連續範圍區間,List 不受此影響僅選擇符合條件對分區資料分配存儲


Hash 分區實作 (P0 ~ P5):  根據自定義表達式返回值分區.返回值不能是負數

終極系列每個角色多數具有戰力指數(下圖右下角計量表),我們計畫將"戰力指數(Power)做水平分割


create table xhash (

no int not null ,

name  varchar(30) null,

sptime varchar(50) null,

burn date not null,

weapon varchar(50) not null,

power int not null

)

partition by hash(power) partitions 6;      #hash 分區使用欄位"power"戰力指數劃分.分割數= 6
 
OK 接下來我們將前一步建立的xtable 範例資料表單全部倒入方才設計xhash(範例表單)

   insert into xhash select * from xtable;    #擷取"關羽,華陀"Record 


    下圖中檢視" Power=13000" 欄位 得Partition=P4   # EX: 關羽(hash演算法分散資料存儲)


下圖中檢視" Power=0" 欄位 得Partition=P0  戰力指數Power=0    EX: 華陀



[分區管理]

Range: 刪除指定分區所有資料,我們刪除測試  P2

between '1987-01-10  ~'1992-09-09'   本存在Partition 2   一筆關於銀時空 Zack 紀錄

刪除後:

alter table xrange drop partition p2    # 我們可以輕易刪除此Partition所存在資料


[插入新的Partition] 僅允許從最尾端Partition.接續新增資料分區 (本人預設把Maxvalue移除掉)

 alter table xrange add partition( partition p4 values less than('2003-05-30'))

成功新增新的Partition P4   #List 分區亦是如此新增刪除現有分區

相簿設定
標籤設定
相簿狀態