PHP 結合 MySQL 千萬級資料處理

david111發表於2020-07-04

mysql分表思路


一張一億的訂單表,可以分成五張表,這樣每張表就只有兩千萬資料,分擔了原來一張表的壓力,分表需要根據某個條件進行分,這裡可以根據地區來分表,需要一箇中介軟體來控制到底是去哪張表去找到自己想要的資料。
中介軟體:根據主表的自增id作為中介軟體(什麼樣的欄位適合做中介軟體?要具備唯一性)
怎麼分發?主表插入之後返回一個id,根據這個id和表的數量進行取模,餘數是幾就往哪張表中插入資料。
注意:子表中的id要與主表的id保持一致
以後只有插入操作會用到主表,修改,刪除,讀取,均不需要用到主表

PHP 結合 MySQL 千萬級資料處理

redis訊息佇列

1,什麼是訊息佇列?
訊息傳播過程中儲存訊息的容器
2,訊息佇列產生的歷史原因

PHP 結合 MySQL 千萬級資料處理

訊息佇列的特點:先進先出
把要執行的sql語句先儲存在訊息佇列中,然後依次按照順利非同步插入的資料庫中
應用:新浪,把瞬間的評論先放入訊息佇列,然後通過定時任務把訊息佇列裡面的sql語句依次插入到資料庫中

修改

操作子表進行修改

PHP 結合 MySQL 千萬級資料處理

這樣修改有一個問題,主表和子表的資料會出現不一致,如何讓主表和字表資料一致?

redis佇列保持主表子表資料一致

修改完成後將要修改主表的資料,存入redis佇列中

PHP 結合 MySQL 千萬級資料處理

然後linux定時任務(contble)迴圈執行redis佇列中的sql語句,同步更新主表的內容

PHP 結合 MySQL 千萬級資料處理

mysql分散式之分表(查,刪)

查詢只需要查詢子表,不要查詢總表

PHP 結合 MySQL 千萬級資料處理

刪除,先根據id找到要刪除的子表,然後刪除,然後往訊息佇列中壓入一條刪除總表資料的sql語句
然後執行定時任務刪除總表資料

PHP 結合 MySQL 千萬級資料處理

定時任務:

PHP 結合 MySQL 千萬級資料處理

mysql分散式之分庫

分庫思路

PHP 結合 MySQL 千萬級資料處理

分庫原理圖:

PHP 結合 MySQL 千萬級資料處理

PHP 結合 MySQL 千萬級資料處理

mysql分散式之分庫(增)

PHP 結合 MySQL 千萬級資料處理
注意:操作完一個資料庫一定要把資料庫連線關閉,不然mysql會以為一直連線的同一個資料庫

還是取模確定載入哪個配置檔案連線哪個資料庫

PHP 結合 MySQL 千萬級資料處理

mysql分散式之分庫(改)

原理同新增

PHP 結合 MySQL 千萬級資料處理

mysql分散式之分庫(查,刪)

原理類似

PHP 結合 MySQL 千萬級資料處理
刪除

PHP 結合 MySQL 千萬級資料處理
執行佇列

mysql分散式之快取(memcache)的應用

將資料放入快取中,節省資料庫開銷,先去快取中查,如果有直接取出,如果沒有,去資料庫查,然後存入快取中

PHP 結合 MySQL 千萬級資料處理

在編輯資訊之後需要刪除快取,不然一直讀取的是快取的資料而不是修改過的資料

PHP 結合 MySQL 千萬級資料處理

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章