分庫分表的排序
分庫分表的排序
1. 對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案
2. 無論單庫還是多個分庫,都由程式讀取需要資料並作排序。
排序的幾種方式:
大都是按時間排序的,如果在客戶端可以直接判斷在哪個分表最好,可以直接讀取指定分表並作排序
例如:彙總表td_test_all;而分表是按companyid分表的
原始sql:
select * from td_test_all
where companyid = 15997
order by productid desc limit 0,20
程式端完全可以通過companyid判斷在哪個分表讀取資料,改為
select * from td_test7
where companyid = 15997
order by productid desc limit 0,20
這樣資料的排序還是通過資料實現的。
如果where條件裡沒有分割槽字段的話,如何定位到具體分割槽呢?可以在設計階段,在常用字段上埋下分割槽規則的種子, 比如在td_test7.groupid欄位設計由int+7(7表示在分表td_test7裡)
如果資料必須從多個分表取資料的話:
對於取top n條記錄的話場景
程式分表讀取每個分表的前n條記錄(理想的認為資料都**乙個分表,從而減小結果集),如分割槽td_test0所示:
select *
from td_test0
where createtime> str_to_date('2013-04-28 15:34:02','%y-%m-%d %h:%i:%s')
order by createtime desc
limit 0,5
然後程式讀取這些結果集,在應用端彙總排序取top n記錄
對於需要分頁的話場景
這個就只能把每個分表、滿足條件的的所有記錄都load到應用端,然後在程式端很容易做彙總,排序分頁操作
------end----
分庫分表的排序
author skate time 2013 05 20 分庫分表的排序 1.對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案 2.無論單庫還是多個分庫,都由程式讀取需要資料並作排序。排序的幾種方式 大都是按時間排序的,如果在客戶端可以直...
mysql 分表後如何排序 分庫分表的排序
分庫分表的排序 分庫分表的排序 1.對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案 2.無論單庫還是多個分庫,都由程式讀取需要資料並作排序。排序的幾種方式 大都是按時間排序的,如 分庫分表的排序 分庫分表的排序 1.對於單庫,冗餘乙個彙...
mysql分表分庫實現 MySql分表分庫思路
一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...