phalapi-進階篇6(解決大量數據存儲數據庫分表分庫拓展)

#phalapi-進階篇6(解決大量數據存儲數據庫分表分庫拓展)#git

##前言##算法

時隔半個月隨着PHP7的推出爲PHP打了一瓶興奮劑,在性能提高了一倍的狀況下咱們會逐漸發現,瓶頸會集中在數據庫操做,那咱們的內容就接着數據庫讀寫分離,來聊聊分表分庫應該怎麼玩,應爲PhalApi的分表分庫並非很是方便,筆者在這裏提供了一個分表分庫數據庫集羣的拓展,詳細文檔請見博客基於PhalApi的DB集羣拓展 V0.1bate 你們能夠自行在開源中國擴展Git地址中找到Cluster進行下載使用.sql

先在這裏感謝phalapi框架創始人@dogstar,爲咱們提供了這樣一個優秀的開源框架.數據庫

附上:api

官網地址:http://www.phalapi.net/緩存

開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release架構

開源中國擴展Git地址:http://git.oschina.net/dogstar/PhalApi-Library框架

##1. 場景##性能

在實際工做中,我信奉一句話一切拋開業務的架構設計都是耍流氓因此咱們從場景進行開篇.net

###1.1 單條數據多查多寫多改###

這裏作的例子,你們都在玩遊戲把,玩遊戲裏面是否是有角色,角色是否是有裝備,經驗,物品以及等等,並且他會有一個特別的要求就是實時(由於我角色打了一個怪物得到了100xp咱們不可能告訴他你等6個小時緩存時間結束了再來看,必須是實時的),固然咱們可使用緩存來解決這個問題咱們下節會說道這個問題

那麼在這種場景下,一個用戶對於角色的操做很是頻繁並且惟一咱們就很好採用分表分庫的操做了,相對於單表操做他會把全部的操做分散到各各數據庫去操做,這樣對於單個數據庫總執行sql語句量就會有個指數級的降低,以及數據量也會均衡分配到每一個數據庫,可是當咱們進行這類單條數據操做的時候根本不會對性能有任何的影響,由於只是經過算法得出了這條記錄存在於那個庫那張表而已,

###1.2 日誌記錄分析###

就已上面的例子咱們繼續講,若是有一天你的領導過來提了個需求,我須要一個數據分析系統來統計用戶天天什麼時間段最活躍.用戶平均沒人充值了多少錢啊,多少等級下用戶衝錢最多啊,若是遇到這種問題大家會怎麼辦?三分鐘思考

咱們先來看看咱們會遇到什麼樣子的問題,數據量大積累當1000w+以後數據庫執行sql基本無法看,大量的寫入數據對數據庫壓力大

咱們再來看看分表分庫怎麼解決這個問題,1000w+數據庫的狀況下 好比你是4表4庫一共16張表,那每張表的數量就是1000w/16=62w也就是每張表只須要存儲62w的數據就ok了,當寫入數據的時候會根據ID的順序均衡寫入4庫執行sql的壓力也就分佈到了4個數據庫,惟一的問題就是在執行where條件的時候可能須要對前置表進行遍歷,而前置表的數據量就是1000w,固然前置表裏面只存放ID和where條件的字段

##2. 實現思路##

就筆者在工做中接觸到了不少案例的分表分庫使用了根據城市,或者是其餘的特性進行分表分庫規則,這樣必定會出現用戶分佈不均勻致使的莫一個庫表壓力巨大,我這裏使用了均等分分割

你們先看一組圖就會明白了

  1. 當咱們進行插入的時候的操做以下:

    插入前置表獲取主鍵,經過id得出應該存入幾庫幾表在相應的地方寫入數據

  2. 當咱們進行單條讀取操做的時候操做以下:

    經過id獲取應該在幾庫幾表在相應的地方獲取數據

  3. 當咱們使用where查詢的時候操做以下:

    若是where條件在前置表存在從前置表經過where獲取結果集ID,經過ID分組到庫和表,而後進行查詢在拼接結果集統一返回

##3. 優缺點##

  1. 優勢:

    很好的避開了數據庫存放數據過多效率底下的瓶頸

    在單條記錄操做性能指數及提高

    數據量大的狀況下where條件查詢性能提升基本

    能對億級的數據進行處理並且效率較高

    不須要考慮分表分庫規則數據均等分佈

  2. 缺點

    where查詢字段必須預先添加到,前置表否則就必須遍歷數據庫數量 * 表數量才能獲得想要的結果

    where查詢就算有前置表的狀況下最壞的狀況也須要遍歷數據庫數量 * 表數量才能獲得想要的結果

    對一些特定查詢天生不足好比排序

##4. 總結##

在本小節的最好簡單說起一下,基於PhalApi的DB集羣拓展 V0.1bate功能展現比較侷限童鞋們能夠根據本身的業務需求來以爲是否使用,筆者也會在後期繼續更新維護完善爲一個比較方便的集羣拓展.

注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!

官網QQ交流羣:421032344 歡迎你們的加入!

相關文章
相關標籤/搜索