分表是分散資料庫壓力的好方法。
分表,最直白的意思,就是將乙個表結構分為多個表,然後,可以再同乙個庫里,也可以放到不同的庫。
當然,首先要知道什麼情況下,才需要分表。個人覺得單錶記錄條數達到百萬到千萬級別時就要使用分表了。
1,分表的分類
1>縱向分表
將本來可以在同乙個表的內容,人為劃分為多個表。(所謂的本來,是指按照關係型資料庫的第三正規化要求,是應該在同乙個表的。)
分表理由:根據資料的活躍度進行分離,(因為不同活躍的資料,處理方式是不同的)
案例:對於乙個部落格系統,文章標題,作者,分類,建立時間等,是變化頻率慢,查詢次數多,而且最好有很好的實時性的資料,我們把它叫做冷資料。而部落格的瀏覽量,回覆數等,類似的統計資訊,或者別的變化頻率比較高的資料,我們把它叫做活躍資料。所以,在進行資料庫結構設計的時候,就應該考慮分表,首先是縱向分表的處理。
這樣縱向分表後:
首先儲存引擎的使用不同,冷資料使用myisam 可以有更好的查詢資料。活躍資料,可以使用innodb ,可以有更好的更新速度。
其次,對冷資料進行更多的從庫配置,因為更多的操作時查詢,這樣來加快查詢速度。對熱資料,可以相對有更多的主庫的橫向分表處理。
其實,對於一些特殊的活躍資料,也可以考慮使用memcache ,redis
之類的快取,等累計到一定量再去更新資料庫。或者mongodb 一類的nosql 資料庫,這裡只是舉例,就先不說這個。
2>橫向分表
字面意思,就可以看出來,是把大的表結構,橫向切割為同樣結構的不同表,如,使用者資訊表,user_1,user_2 等。表結構是完全一樣,但是,根據某些特定的規則來劃分的表,如根據使用者id來取模劃分。
分表理由:根據資料量的規模來劃分,保證單錶的容量不會太大,從而來保證單錶的查詢等處理能力。
案例:同上面的例子,部落格系統。當部落格的量達到很大時候,就應該採取橫向分割來降低每個單錶的壓力,來提公升效能。例如部落格的冷資料表,假如分為100個表,當同時有100萬個使用者在瀏覽時,如果是單錶的話,會進行100萬次請求,而現在分表後,就可能是每個表進行1萬個資料的請求(因為,不可能絕對的平均,只是假設),這樣壓力就降低了很多很多。
分庫分表相關
timestamp zookeeper node number sequence local hash goupid shopid 1.timestamp 32位unix時間戳,包含年月資訊,用於分表 2.zookeeper node number 通過zookeeper獲取唯一node numbe...
DDL(資料庫 表的操作)表相關
create 建立 新增 show 檢視 顯示 alter 修改 drop 刪除 database 資料庫 table 表 常見資料型別mysql 整數型別 int浮點型 double 引數一,引數二 引數一 總長度 引數二 小數點後有幾位 double 5,2 總長度是5位,小數點後面2位 和 錢...
常用資料庫及表相關操作語句
新建乙個資料庫 create database database name character set utf8 建立乙個表 create table table name 欄位名 型別.charset utf8 檢視當前資料庫 show databases 使用乙個資料庫 use database...