分庫分表的排序

來源:互聯網
上載者:User

author:skate
time:2013/05/20

 

分庫分表的排序

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----

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.