中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

常州市中大建設(shè)工程有限公司網(wǎng)站百度應(yīng)用商店app下載安裝

常州市中大建設(shè)工程有限公司網(wǎng)站,百度應(yīng)用商店app下載安裝,江西省建設(shè)廳網(wǎng)站首頁,做seo時網(wǎng)站發(fā)文目的優(yōu)質(zhì)博文:IT-BLOG-CN 背景:我們系統(tǒng)上云后,數(shù)據(jù)根據(jù)用戶UDL部分?jǐn)?shù)據(jù)在國內(nèi),部分?jǐn)?shù)據(jù)存儲在海外,因此需要考慮分庫查詢的分頁排序問題 一、分庫后帶來的問題 需求根據(jù)訂單創(chuàng)單時間進(jìn)行排序分頁查詢,在單表…

優(yōu)質(zhì)博文:IT-BLOG-CN

背景:我們系統(tǒng)上云后,數(shù)據(jù)根據(jù)用戶UDL部分?jǐn)?shù)據(jù)在國內(nèi),部分?jǐn)?shù)據(jù)存儲在海外,因此需要考慮分庫查詢的分頁排序問題

一、分庫后帶來的問題

需求根據(jù)訂單創(chuàng)單時間進(jìn)行排序分頁查詢,在單表中的查詢SQL如下(省略部分查詢內(nèi)容):每頁獲取10條記錄

select orderId, orderStatus from t_order order by create_time asc limit 20, 10

我們做了分庫之后,如果需要完成上述的需求,需要在兩個表中直接執(zhí)行如下兩條SQLoffset都需要從0開始,否則數(shù)據(jù)就不正確了。我這里為了區(qū)分,表的名字后面帶上對應(yīng)的環(huán)境,實際生產(chǎn)sql是一樣的,只是查詢的庫不同而已。

select * from t_order_sha order by create_time asc limit 0,30;select * from t_order_fra order by create_time asc limit 0,30;

如上所示:我們需要將前3頁的數(shù)據(jù)全部查出來,然后在內(nèi)存中重新排序,最后從中取出第3頁的數(shù)據(jù),也稱為“全局查詢法”。

該方案存在的問題: 隨著頁碼的增加,每個節(jié)點返回的數(shù)據(jù)會增多,性能也隨著下降。同時,服務(wù)層需要進(jìn)行二次排序,增加了服務(wù)層的計算量,如果數(shù)據(jù)過大,對內(nèi)存和cpu的要求也非常高。

不過這種方案也有很多優(yōu)化方案,Sharding-JDBC中就對此方案做出優(yōu)化,采用的是流式處理和歸并排序避免內(nèi)存的過量占用。

二、禁止跳頁查詢法

我們部分系統(tǒng)(航班列表頁)是通過點擊“更多”按鈕展示下一頁的數(shù)據(jù)(只提供了查詢下一頁的功能),此時頁面上展示的是前n頁的數(shù)據(jù)集。

上述的功能在分庫分頁查詢的情況下,可以極大的降低業(yè)務(wù)的復(fù)雜度,因為當(dāng)查詢第二頁數(shù)據(jù)的時候,可以將上一頁的最大值最為查詢條件,此時的SQL可以改寫為:

select * from t_order_sha where create_time>1726671336 order by time asc limit 10;select * from t_order_fra where create_time>1726671336 order by time asc limit 10;

查詢到數(shù)據(jù)后需要在內(nèi)存中進(jìn)行重新排序,但相對于“全局查詢”數(shù)據(jù)量已經(jīng)減少了很多,頁碼越大性能提升越明顯。此方案的缺點也非常明顯:不能跳頁查詢,只能一頁一頁查詢。

三、二分查找法

二分查找法既能滿足性能要求,也能滿足業(yè)務(wù)要求,不過相對前面兩種方案理解起來比較困難。

我們還是以上述的查詢語句為例(這里為了演示方便,修改為查詢第二頁,每頁返回5條數(shù)據(jù)):

select orderId, orderStatus from t_order order by create_time asc limit 5, 5;

【1】SQL改寫: 原先的SQLoffset=5,稱之為全局offset,這里由于是拆分成了兩張表,因此改寫后的offset=全局offset/2=5/2=2

核心思想:第一頁的5數(shù)據(jù)肯定包含在t_order_shat_order_fra表中的二分后的0-2之中

最終的落到每張表的SQL如下:

select * from t_order_sha order by create_time asc limit 2,5;select * from t_order_fra order by create_time asc limit 2,5;

紅色部分表示查詢結(jié)果

t_order_shat_order_fra
0000000000100000000002
0000000000300000000008
0000000000400000000009
0000000000500000000010
0000000000600000000011
0000000000700000000012
0000000001300000000014

【2】返回查詢數(shù)據(jù)中的最小值: t_order_sha = 00000000003 (這個過程只需要比較各個分庫的第一條數(shù)據(jù),時間復(fù)雜度很低)

【3】查詢二次改寫: 第二次查詢使用beteween語句,起點是第二部返回的最小值,終點是每個表第一次查詢后的最大值。

t_order_sha 這張表,第一次查詢的最大值00000000013,則SQL改寫后:

select * from t_order_1 where time between 00000000004 and 00000000013 order by time asc;

t_order_fra 這張表,第一次查詢的最大值00000000014,則SQL改寫后:

select * from t_order_1 where time between 00000000004 and 00000000014 order by time asc;

紅色部分為第次的查詢結(jié)果

t_order_shat_order_fra
0000000000100000000002
0000000000300000000008
0000000000400000000009
0000000000500000000010
0000000000600000000011
0000000000700000000012
0000000001300000000014

在每個結(jié)果集中虛擬一個time_min記錄,找到time_min在全局的offset。

下圖藍(lán)色部分為虛擬的time_min,紅色部分為第2步的查詢結(jié)果集。

t_order_shat_order_fra
0000000000100000000002
0000000000300000000004
0000000000400000000008
0000000000500000000009
0000000000600000000010
0000000000700000000011
0000000001300000000012
00000000014

t_order_sha中的第一條數(shù)據(jù)就是time_min,則offset=3。
t_order_fra中的第一條數(shù)據(jù)為00000000008,這里的offset2,則向上推移一個找到了虛擬的time_min,則offset=1。

那么此時的time_min的全局offset=1+3=4

【5】查找最終結(jié)果: 找到了time_min的最終全局offset=4之后,再根據(jù)第2步獲取的兩個結(jié)果集在內(nèi)存中重新排序。

[00000000004,00000000005,00000000006,00000000007,00000000008,00000000009,00000000010,00000000011,00000000012,00000000013,000000000104]

現(xiàn)在time_min也就是00000000004offset=4,那么原先的SQLselect * from t_order order by time asc limit 5,5;,此時可以發(fā)現(xiàn)SQL中的總偏移量和最小值的偏移量的差值5-4=1,因此需要對排序后的結(jié)果集向后推移一位取值。同時因為最小值也包含在集合中的,無論前面的差值是多少,這里都需要將最小值踢出去,所以也需要再向后移一位。根據(jù)SQL5條數(shù)據(jù),就能夠得到如下結(jié)果:

00000000006,00000000007,00000000008,00000000009,00000000010

這種方案的優(yōu)點:可以精確的返回業(yè)務(wù)所需數(shù)據(jù),每次返回的數(shù)據(jù)量都非常小,不會隨著翻頁增加數(shù)據(jù)的返回量。
缺點也是很明顯:需要進(jìn)行兩次查詢。

http://www.risenshineclean.com/news/5802.html

相關(guān)文章:

  • 班服定制網(wǎng)站百度發(fā)布信息的免費平臺
  • 網(wǎng)站建設(shè)高端crm網(wǎng)站
  • 網(wǎng)站素材免費網(wǎng)站seo優(yōu)化效果
  • 申請網(wǎng)頁空間的網(wǎng)站長沙本地推廣平臺
  • 網(wǎng)站設(shè)計公司 上seo賺錢方法大揭秘
  • 裝飾公司怎樣做網(wǎng)站交換友情鏈接的渠道
  • 通達(dá)oa 做網(wǎng)站企業(yè)培訓(xùn)權(quán)威機(jī)構(gòu)
  • 恐怖小說網(wǎng)站怎么做小廣告模板
  • 新媒體公司網(wǎng)站怎么做2345網(wǎng)址導(dǎo)航瀏覽器下載
  • 仿網(wǎng)站建設(shè)免費b2b網(wǎng)站有哪些
  • 汕頭人才招聘網(wǎng)最新招聘信息北京seo全網(wǎng)營銷
  • 用c 做的網(wǎng)站怎么打開域名免費注冊0元注冊
  • 攝影師簽約有哪些網(wǎng)站線上宣傳渠道
  • 成都娛樂場所關(guān)閉最新消息武漢建站優(yōu)化廠家
  • 中糧網(wǎng)站是哪個公司做的上海高端seo公司
  • 長春二道網(wǎng)站建設(shè)百度明星搜索量排行榜
  • 響應(yīng)式網(wǎng)站wordpress攝影家居seo整站優(yōu)化方案
  • 網(wǎng)站開發(fā)量計算百度一下你就知道移動官網(wǎng)
  • 如何做商業(yè)推廣網(wǎng)站提高關(guān)鍵詞排名的軟文案例
  • 網(wǎng)站站點文件夾權(quán)限設(shè)置青島網(wǎng)站關(guān)鍵詞優(yōu)化公司
  • 中國做網(wǎng)站推廣哪家好武漢外包seo公司
  • 浦東新區(qū)消息今天淘寶seo什么意思
  • 網(wǎng)站怎么做三級的游戲優(yōu)化大師
  • 建行網(wǎng)站登錄不了荊門網(wǎng)絡(luò)推廣
  • 深圳網(wǎng)站制作必選祥奔科技域名訪問網(wǎng)站怎么進(jìn)入
  • 長沙理財網(wǎng)站建設(shè)魔方優(yōu)化大師官網(wǎng)
  • 網(wǎng)站做推廣頁需要什么軟件注冊公司
  • 在putty上怎樣安裝wordpress刷關(guān)鍵詞優(yōu)化排名
  • 如何給網(wǎng)站做301重定向搜索引擎有哪幾個網(wǎng)站
  • 一個公司做兩個網(wǎng)站的好處seo上海培訓(xùn)