網站架構設計
1.大訪問量解決方案?
負載均衡技術:乙太網通道 ; windos NBL ; linux lvs , ; F5
冗餘技術(叢集):linux HA叢集技術
解決單點故障
0 0 (主) 1(從) 叢集圈(叢集圈裡都是通過一根心跳
0 (交換機) nginx(負載均衡) LVS(地址裝換到伺服器) 0 1
0 0
lvs負載均衡技術:
OSI七層模型:
1.物理層 :連線線纜的標準
2.資料鏈路層 :加mac地址的標記(網絡卡的實體地址) 802.3,802.2
3.網路層:源ip地址,目的ip地址 ip
4.傳輸層 : 源埠,目的埠 tcop/udp
5.會話層 :通訊狀態 作業系統
6.表示層 : 編碼方式 ASCII
7.應用層 :
大資料儲存
MySQL 主從複製:
主資料庫用來寫,從資料庫用來讀,通過主資料庫的binary_log日誌進行同步到從資料庫來保證資料的一致性
水平分表:
垂直分表:
分割槽技術:將一張表分成若干張表儲存,業務層無需修改表名,名稱不變
解決水平分表修改業務邏輯sql的維護修改難問題
分割槽(partition by range(year(date))) (by range(一般用這個,給定個連續的區間) ; by list(適合列舉型別確認的固定下拉), by hash(一般用於測試), by key(沒用))
partioton by hash(id)
partioton 5 --以id分五個區域
為什麼用分割槽?:
ans:因為用水平分表的模式,會造成php程式碼層維護更難(需要改查詢的表名,還要寫一個php路由層來判斷選擇哪張表)
邏輯上,物理上減壓,分表技術雖然物理層減壓,但是邏輯上增壓,不符合程式設計,所以產生了分割槽.
分割槽寫法?:
ans:
partition by range(id)(
partition p0 values less than(5)
partition p1 values less than(10)
partioton p2 values less than(15)
);
partition by range(year(peirod))(
partition p1 values less than(2016)
partition p2 values less than(2017)
partition p3 values less than(2018)
partition p4 values less than maxvalue
)
myisam的表,增刪改查的速度快 插入速度 200萬/s
索引大小可能大於資料大小(兩三倍),1000萬行資料佔用250m大小,花了兩分鐘左右時間(id 及索引)
分割槽檔案儲存格式(myisam)?:
ans:
.frm表描述檔案
.par 分割槽標誌
p0.myd 資料存放
p0.myi 索引存放
p1.myd 資料存放
p1.myi 索引存放
p2.myd 資料存放
p2.myi 索引存放
mysql 儲存過程?
寫一個插入八百萬資料,按年來分割槽的儲存過程?:
create procedure load_part()
begin
declare v int default 0;
while v < 8000000 do
insert into part_tab values(v,testing_partitions,adddate('1995-01-01',(rand(v)*36520) mod 3650));
set v = v+1;
end while
end //