日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【干货】分库分表最佳实践

發布時間:2025/1/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【干货】分库分表最佳实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

何時分庫分表

MySQL單表(innoDB)可以存儲10億級數據,只是這時候性能比較差,業界公認MySQL單表容量在1KW以下是最佳狀態,因為這時它的BTREE索引樹高在3~5之間。

參考阿里開發手冊建議:

1.單表行數超過 500 萬行或者單表容量超過 2GB,才推薦進行分庫分表;如果預計三年后的數據量根本達不到這個級別,請不要在創建表時就分庫分表。

2.實際情況受mysql機器配置等多方面影響,可能數據量很大但性能依舊不錯,但考慮后續發展一定要進行分庫分表考慮。

如何分庫分表

設置合適的分片數量

根據實際的業務場景選擇合適的分片數據,參考如下:

  • 滿足當前數據平均后的數據量在一個合理的范圍(<=100w)
  • 預估未來5年的數據量發展情況,數據量在一個合理的范圍(500w左右,有合理的歸檔備份機制)

選擇合適的分片字段

根據實際的業務場景選擇適當的分片字段,要達到如下要求:

  • 字段類型常規
  • 字段不易過多
  • 字段應該是業務場景大多數都會被使用的

設計合理的分片規則

分表數量和分表字段確定后,要設計一個合理的分表規則,良好的分表規則要達到如下條件:

  • 規則計算高效,邏輯清晰
  • 規則計算后,分片數據均勻
  • 方便后續擴容分片

如何保證分片數據均勻,參考:

  • 分片字段本身就是隨機均勻的,可以直接使用
  • 分片字段隨機,但不均勻,如對總分片取模后,會導致數據不均勻,建議先對分片字段進行2次隨機處理(如:zebra提供的:md5/crc32 方法)

如何保證方便后續分片擴容,參考:

  • 如果是按照時間或數值范圍進行分片,只需要創建分片庫表,修改分片規則,立即生效
  • 如果是hash分片,條件允許可考慮停服遷移,停止服務,將數據按新分片規則進行遷移,修改分片規則,啟動服務
  • 某些情況下可考慮升級從庫,如2分庫擴容為4分庫,可將從庫升級為主庫并修改分片規則,后續可將冗余的數據進行清除并補上缺失的從庫。
  • 數據庫雙寫,同時按新老分片規則寫入兩套物理表,并逐漸下線老數據模型,可參考-新老遷移參考

SQL使用注意

如何高效的使用分庫分表,核心是做到盡量的路由到最少的表,最好是只路由到一個表里面

核心規則如下:

  • 能帶分片字段的就盡量把其帶上
  • 盡量不使用范圍查詢
  • 無分片使用limit時不要查詢太靠后的數據
  • 盡量不要使用復雜的sql
  • sql寫法盡量規范

新老遷移方案參考

階段一

  • 數據庫雙寫(事務成功以老模型為準),查詢走老模型。
  • 每日job數據對賬,并將差異補平。
  • 通過job導歷史數據。

階段二

  • 歷史數據導入完畢并且數據對賬無誤。
  • 依然是數據庫雙寫,但是事務成功與否以新模型為準,在線查詢切新模型。
  • 每日job數據對賬,將差異補平。

階段三

  • 老模型不再同步寫入,異步補齊(同步數據終態)。
  • 此階段只有離線數據依然依賴老的模型,并且下游的依賴非常多,待改造完就可以完全廢除老模型了。

總結

以上是生活随笔為你收集整理的【干货】分库分表最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。