分表是分散資料庫壓力的好方法。
分表,最直白的意思,就是將乙個表結構分為多個表,然後,可以再同乙個庫里,也可以放到不同的庫。
當然,首先要知道什麼情況下,才需要分表。個人覺得單錶記錄條數達到百萬到千萬級別時就要使用分表了。
1,分表的分類
1>縱向分表
將本來可以在同乙個表的內容,人為劃分為多個表。(所謂的本來,是指按照關係型資料庫的第三正規化要求,是應該在同乙個表的。)
分表理由:根據資料的活躍度進行分離,(因為不同活躍的資料,處理方式是不同的)
案例:對於乙個部落格系統,文章標題,作者,分類,建立時間等,是變化頻率慢,查詢次數多,而且最好有很好的實時性的資料,我們把它叫做冷資料。而部落格的瀏覽量,回覆數等,類似的統計資訊,或者別的變化頻率比較高的資料,我們把它叫做活躍資料。所以,在進行資料庫結構設計的時候,就應該考慮分表,首先是縱向分表的處理。
這樣縱向分表後:
首先儲存引擎的使用不同,冷資料使用myisam 可以有更好的查詢資料。活躍資料,可以使用innodb ,可以有更好的更新速度。
其次,對冷資料進行更多的從庫配置,因為更多的操作時查詢,這樣來加快查詢速度。對熱資料,可以相對有更多的主庫的橫向分表處理。
其實,對於一些特殊的活躍資料,也可以考慮使用memcache ,redis
之類的快取,等累計到一定量再去更新資料庫。或者mongodb 一類的nosql 資料庫,這裡只是舉例,就先不說這個。
2>橫向分表
字面意思,就可以看出來,是把大的表結構,橫向切割為同樣結構的不同表,如,使用者資訊表,user_1,user_2 等。表結構是完全一樣,但是,根據某些特定的規則來劃分的表,如根據使用者id來取模劃分。
分表理由:根據資料量的規模來劃分,保證單錶的容量不會太大,從而來保證單錶的查詢等處理能力。
案例:同上面的例子,部落格系統。當部落格的量達到很大時候,就應該採取橫向分割來降低每個單錶的壓力,來提公升效能。例如部落格的冷資料表,假如分為100個表,當同時有100萬個使用者在瀏覽時,如果是單錶的話,會進行100萬次請求,而現在分表後,就可能是每個表進行1萬個資料的請求(因為,不可能絕對的平均,只是假設),這樣壓力就降低了很多很多。
如何分庫分表
當資料大的時候,都會考慮分庫分表的實現。分庫分表可以在不同的層做。一般來說有以下幾種 無論怎麼做分庫分表,其基本思路都是一樣的。需要有分庫路由,分庫規則,分庫關鍵字等。下面簡單用spring在dao層做乙個分庫的實現。假如有2個資料來源,通過在routekey選擇不同的資料來源。設計路由關鍵字 pu...
mysql分表分庫實現 MySql分表分庫思路
一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...
MySQL範圍分表分庫 mysql 分表分庫策略
唯一id的生成 下面列舉幾種常見的唯一id生成方案,需要滿足兩大核心需求 1.全域性唯一 2趨勢有序 1.用資料庫的auto increment 自增id 來生成,每次通過寫入資料庫一條記錄,利用資料庫id自增的特性獲取唯一,有序的id。優點 使用資料庫原有的功能,相對簡單 能夠保證唯一 能夠保證遞...