首頁 >後端開發 >php教程 >PHP結合MySQL實現千萬級資料處理

PHP結合MySQL實現千萬級資料處理

藏色散人
藏色散人轉載
2020-11-18 15:10:495071瀏覽

推薦:《PHP影片教學

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分散式之分庫(查,刪除)

##mysql分散式之分庫(查,刪除)PHP 结合 MySQL 千万级数据处理
原理類似

PHP 结合 MySQL 千万级数据处理
刪除

執行佇列

mysql分散式快取(memcache)的應用程式PHP 结合 MySQL 千万级数据处理

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

PHP 结合 MySQL 千万级数据处理

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

以上是PHP結合MySQL實現千萬級資料處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除