具體拆分方案已經有了:
但是在操作的時候還是有點小問題,但基本上是按照這個設計實作的。
首先是mycat的,mycat正式版本是1.3.0.3-release,但是這個不包括partitionbymonth這個類,其次partitionbymonth 這個類的輸入參數是日期也不好按月進行分表。
還好這類可以轉換月,不用修改代碼,也可以将就着用。
打包partitionbymonth這個類生成一個jar。這個類在1.4-rc包裡面有。将新jar放到lib目錄下面。
partitionbymonth這個類非常簡單,對比下日期然後傳回分區的序号。
如果業務複雜不是一個月一個月的分區可以直接寫死邏輯然後打包使用,比如按季度分區,半個月一分區,或者在2015-06月以前是一個表以後是按月分區等等。
首先建立資料庫,預設分4個表,所有建立4個資料庫,同理可以直接建立好一年的12個表,這裡隻是舉例子。
在這4個資料庫中建立表,表做10個分區(具體分區數可根據業務量劃定,每個月的mysql分區可以不一樣),按照gid做分區。
配置mycat 的rule.xml,這裡用到了一個小技巧。month的格式化是
schema.xml配置:
server.xml配置:
如果mycat啟動正常,檢視logs/wrapper.log沒有異常,且資料庫連接配接已經建立。
java用戶端調用說明,首先msg表的id是按照gid連續自增的,如果id > 1,且當月沒有查詢到資料,查詢前一個月的資料,直到id = 1 為止。
使用遞歸函數往前一個月一個月查詢資料,直到查詢到id = 1 為止。查詢結果如下,每次顯示20條資料,插入的100 條 % 28 分别插入4個月資料。
查詢結果可以跨月查詢:
mycat可以支援按月插入資料,但是查詢起來要自己做好分月查詢方案。
由于使用者插入的資料有可能分散在多個月的資料表中,查詢的時候需倒序一個月一個月的查詢。
資料的存儲可以按照年,500g資料放到一個磁盤,一年增加一個磁盤,新資料都寫到新磁盤上面,保證資料随着時間增長隻需要新增加資料庫和磁盤即可,不需要進行資料遷移。