{eval=Array;=+count(Array);}
公司做了自己的分庫分表組件,下面就自己的經驗來看下分庫分表的優點和碰到的問題!
何為分庫分表?采取一定的策略將大量的表數據分布在不同的數據庫,表中實現數據的均衡存儲!
分庫分表的背景:隨著信息數據的急劇增長,單點數據庫會有宕機,或者單庫單表性能低下,查詢和存儲效率低的問題,使用分庫分表實現數據的分布存儲,性能更好,適合現在數據量多,用戶需求高的特點!
分庫分表的優點:數據分布在不同的數據庫中,單表數據量低,查詢速度快!可以在每個節點搭建集群防止數據丟失!
分庫分表遇到的問題:
1,多庫多表需要不重復的ID生成策略,但是數據重復!
解決方案:UUID,全局序列號等等!
2,如果是按照hash等方式實現的分庫分表,可能難以擴展
解決方案:1,使用時間段或者ID等進行劃分,可持續擴展(會帶來別的問題),2,數據重新遷移!
3,連接查詢,統計等出現困難:
解決方案:1,按照某個指定的分庫分表字段(ID)(分布在同一個庫中)進行連接查詢!2,將主要字段進行冗余,方便統計和連接查詢!
分庫分表的組件有很多,mycat是最流行的一個!
怎么使用mycat進行分庫分表?
1,下載安裝mycat,配置環境變量!
2,配置文件(啟動內存等),使用命令行啟動和停止!
3,創建多庫多表!
4,選擇分庫分表策略(水平和垂直),算法等!
5,配置server.xml,schema.xml,rule.xml用于配置映射,規則等!
6,連接測試!
具體的mycat應用不是幾句話可以說的清的,最好是自己搭建環境,自己寫Demo測試,方能掌握!
我的Demo還在寫,到時候分享,需要的朋友,敬請關注。。。
分庫/分表
顧名思義,分庫分表就是按照一定的規則,對原有的數據庫和表進行拆分,把一個數據庫分成多個庫,把一張表拆分成為多張表。
為什么要分庫/分表
隨著時間和業務的發展,數據庫和表中的數據量會越來越多,對硬件特別是磁盤消耗是越來越大,磁盤尋址、IO操作、系統內存都有很大的開銷,為了提升數據庫操作的效率,因此以空間換時間。打個比方,你把五顏六色的玻璃球放到一個籃子里,如果去找各種顏色球的數量是不是很麻煩。如果按照顏色分開放,找綠色的球直接去綠色區,不用顧及其他顏色,是不是效率就高了很多。就是這個原理
垂直分庫/分表
垂直劃分數據庫是根據業務進行劃分,將一張表的幾個字段分成幾張表,把大表變成小表,把一個大庫按照業務 拆分幾個專門庫,比如商品,按照商品類別,商品詳情,訂單詳情,訂單 ,劃分到 商品庫,訂單庫中 。通過降低單庫(表)的大小來提高性能 放入不同的庫中。
水平分庫/分表
水平劃分是根據一定規則,例如時間或hash值等進行數據的拆分。這種拆分都是行級別拆分,也就是所有拆分的都是完整的一條數據。比如把用戶表按照年份拆分2018年注冊的用戶,2019年的用戶,2018之前注冊的用戶。
MyCat
Mycat是一款開源的數據庫中間件,主要是用作數據庫代理,也就是消費數據庫數據的消費方不直接接觸數據庫,通過mycat來代理訪問。就像明星一樣,你有商演想找明星,不會直接找到明星,會找到經紀人,經紀人來談具體事宜,經紀人再告訴明星。
Mycat的原理中最重要是在sql執行前可以攔截處理一些邏輯,它攔截了用戶發送過來的SQL語句,首先對SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發往后端的真實數據庫,并將返回的結果做適當的處理,最終再返回給用戶。因此對于分庫分表來說把分庫分表的規則寫入攔截器,攔截器通過分析來指向真實的地址獲取數據,還可以將數據進行邏輯處理后返回消費方。這樣就完成了分庫分表的操作。這樣就達成了對開發無感知的目的,避免分庫分表造成了路由邏輯的編寫。
以下就是網上找來的mycat分庫分表的示意圖,相信很容易看懂。
以上就是分庫分表和mycat分庫分表的簡單介紹。如果深入了解可到mycat社區進一步學習。希望我的回答能夠解決你的問題,如果有不同觀點可留言討論。點個贊關注一下吧。
0
回答0
回答1
回答0
回答0
回答0
回答1
回答0
回答0
回答0
回答