1. 程式人生 > >mysql分庫 分頁查詢

mysql分庫 分頁查詢

當前 ash 排序 路由算法 org answer clas png 方案

Mysql海量數據分表分庫如何列表分頁?

1.現在使用ElasticSearch了。基於Lucene的解決方案

2.必須將mysql裏的數據寫入到類似hbase這樣的分布式數據庫,查詢快。但分頁、查詢的話,可以在hbase前加一層solr,用於建立數據索引

如何對分庫後的數據進行分頁查詢?

yeyingsheng 發布於 2015/04/21 10:18 閱讀 7K+ 收藏 1 答案 7 技術分享圖片Spring 技術分享圖片iBATIS si項目,現在連接6臺mysql數據庫,路由分庫算法是根據id的hash值%6,根據值不同分別存入6臺數據庫。現在不知道如何做分頁查詢列表,請問有誰知道嗎 收藏 (1)
舉報 最多投票最新 0 技術分享圖片 三階魔方 2015/04/21 13:50

1、直接使用跨庫的多表聯合查詢。不建議。

2、向6臺數據庫server均發送一個查詢請求,然後對所有查詢結果進行匯總,再處理分頁邏輯。

3、建立一個總數據庫,只負責維護主鍵和必要的索引,以供分頁查詢。

4、使用redis維護一個主鍵序列,分頁操作就是截取該序列的一部分,其結果就是主鍵id集合。拿到id後便可以映射到多臺mysql服務器上查詢數據了。但畢竟數據被分布式存儲了,取到完整結果集必須要多次、多臺的數據庫訪問,這個肯定是避免不了。

註:“多臺”數據庫訪問的問題無解,但同臺“多次”數據庫訪問的問題可以通過程序優化。

評論 (1) 舉報 技術分享圖片 yeyingsheng 2015/04/21 14:35 感覺使用redis維護一個主鍵序列比較靠譜一點,但是沒有用過 回復 舉報 0 技術分享圖片 hylent 2015/04/21 13:07 另建一個主庫,有所有分庫的數據 評論 (3) 舉報 技術分享圖片 yeyingsheng 2015/04/21 14:45 回復 @hylent : 你說的也挺有道理,不知道大家采取最多的方式是什麽? 回復 舉報 技術分享圖片 hylent 2015/04/21 14:38 回復 @1157624952 : 嗯,單點,可以主備。最佳答案中的,在redis裏維護索引的方法,也不錯,不過,就要和業務掛鉤了,多種排序方式需要維護多個序列。不過我還是覺得,數據放在內存中不太穩妥。。 回復
舉報 技術分享圖片 yeyingsheng 2015/04/21 14:32 這樣的話就會出現主機單點問題了 回復 舉報 0 技術分享圖片 Jack_Q 2015/04/21 13:20 有沒有使用cobar或mycat 評論 (1) 舉報 技術分享圖片 yeyingsheng 2015/04/21 14:33 沒有使用 回復 舉報 0 技術分享圖片 Brin想寫程序 2015/04/21 14:28

復雜查詢情況下,只去前20頁的內容。。也就是默認取200條,然後200*10做好排序,然後去前200條,分20頁給用戶顯示出來。

對於基於日期,序號的有序數組的分頁,可以記錄當前分頁最後一個的被分頁的值,作為stub,然後往後組裝。

評論 (4) 舉報 技術分享圖片 Brin想寫程序 2015/04/21 16:58 回復 @1157624952 : 直接查各個數據庫啊。。跟路由算法沒關系。。 回復 舉報 技術分享圖片 yeyingsheng 2015/04/21 15:52 @Brin想寫程序 額,我是根據路由算法插入相應的數據庫的,沒法每個查啊 回復 舉報 技術分享圖片 Brin想寫程序 2015/04/21 15:24 回復 @1157624952 : limit 200,每個表都執行一遍。。 回復 舉報 技術分享圖片 yeyingsheng 2015/04/21 14:46 但是我如何去取前二十頁呢 回復 舉報 0 技術分享圖片 hylent 2015/04/21 14:42

單純就索引來說的話,可以試試一些專門做全文索引的服務軟件。

不過這個只是我的想法,功能上應該可以,沒實際中這樣跑過,不知道穩定性怎麽樣

評論 (1) 舉報 技術分享圖片 yeyingsheng 2015/04/21 14:47 這個沒有試過 回復 舉報 0 技術分享圖片 郭幻程 2015/04/21 16:24

向每個庫發送同樣的數據,匯總,排序,分頁

為毛不用mycat

評論 (0) 舉報 0 技術分享圖片 匿名t3a 2015/04/21 21:18

你需要一個中間件

試試 Amoeba for MySQL 看看行不行

評論 (0) 舉報

mysql分庫 分頁查詢