摘要:缺點(diǎn)每個(gè)分庫需要返回更多的數(shù)據(jù),占用網(wǎng)絡(luò)帶寬需要服務(wù)層的計(jì)算這個(gè)算法隨著頁碼的增大即的增大,性能平方級下降。缺點(diǎn)禁止跳頁查詢。假設(shè)所有分庫總共多出條數(shù)據(jù),則全局。
select * from T order by time offset X limit Y 的跨M個(gè)庫分頁。全局
每個(gè)庫都必須返回 X+Y 個(gè)數(shù)據(jù),所得到的 M*(X+Y) 在服務(wù)層進(jìn)行內(nèi)存排序,然后再取總的偏移量X后的Y條記錄。
優(yōu)點(diǎn): 精準(zhǔn)返回所需數(shù)據(jù)。
缺點(diǎn): (1)每個(gè)分庫需要返回更多的數(shù)據(jù),占用網(wǎng)絡(luò)帶寬;(2)需要服務(wù)層的計(jì)算;(3)這個(gè)算法隨著頁碼的增大(即X的增大),性能平方級下降。
禁止跳頁查詢(業(yè)務(wù)折衷)獲取第一頁的方式和全局策略是一樣的,但獲取第N頁(N>1)時(shí),我們?nèi)?N-1 頁的最大time,即time_max, 對于每個(gè)分庫執(zhí)行 select * from T order by time where time > time_max limit Y,這樣在服務(wù)層再總排序取前Y條記錄。
優(yōu)點(diǎn): 相比全局策略的性能平方級下降,該策略的性能是恒定的。
缺點(diǎn): 禁止跳頁查詢。
[推薦] 二次查詢數(shù)學(xué)原理:對于一個(gè)有序序列分成 M 個(gè)長度不等的有序子序列,M個(gè)有序子序列中每個(gè)有序子序列前X個(gè)元素中的最大值集中起來,再取其中最小值,則該最小值一定小于等于原來有序序列的第 M*X 個(gè)元素值。
假設(shè)該最小值大于原序列的第 MX 個(gè)元素值,那么M個(gè)有序子序列后面第X+個(gè)元素值都大于原序列的第 MX 個(gè)元素值,即構(gòu)成原序列前MX 個(gè)元素只能是M個(gè)有序子序列的前X-個(gè)元素,因?yàn)镸X- < M*X,所以假設(shè)不成立。
步驟:
改寫分庫sql為: select * from T order by time offset ceil(X/M) limit Y
獲取所有分庫sql中返回的最小time中的最小time,即time_min(詳見上面原理)
改寫分庫sql為:select * from T order by time between time_min and 各自分庫的最大time(從第1步中得到)
第3步的各個(gè)分庫的返回結(jié)果比第一步多,當(dāng)然time_min的那個(gè)分庫的返回結(jié)果肯定不變(所以time_min的那個(gè)分庫的sql在實(shí)現(xiàn)時(shí)可以不用執(zhí)行)。假設(shè)所有分庫總共多出 K 條數(shù)據(jù),則全局_offset = ceil(X/M) * M - K 。(詳見上面原理)
將第3步返回的結(jié)果集合并,即第一條數(shù)據(jù)就是time_min的那條,其_offset由第四步已經(jīng)得到;我們直接在該結(jié)果集的中從第(原始sql的offset - _offset + 2)條數(shù)據(jù)開始獲取Y條數(shù)據(jù)。
優(yōu)點(diǎn): 該策略的性能是幾乎恒定。
缺點(diǎn): 兩次查詢;內(nèi)存中要將結(jié)果集合并。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70935.html
摘要:即服務(wù)不能無響應(yīng),或出錯(cuò)分區(qū)的容忍性,這里的分區(qū)不是指數(shù)據(jù)分布式存儲中的分區(qū)。假設(shè)一個(gè)分布式系統(tǒng)中,有兩個(gè)節(jié)點(diǎn),處于分區(qū)狀態(tài)。在大多數(shù)的分布式系統(tǒng)設(shè)計(jì)中,人們多會選擇滿足兩點(diǎn)特性。為了解決最終的一致性,這就涉及到分布式事務(wù)。 showImg(https://segmentfault.com/img/bV7kd4?w=500&h=253); 一、分布式的兩大場景 數(shù)據(jù)存儲的分布式 服務(wù)的...
摘要:即服務(wù)不能無響應(yīng),或出錯(cuò)分區(qū)的容忍性,這里的分區(qū)不是指數(shù)據(jù)分布式存儲中的分區(qū)。假設(shè)一個(gè)分布式系統(tǒng)中,有兩個(gè)節(jié)點(diǎn),處于分區(qū)狀態(tài)。在大多數(shù)的分布式系統(tǒng)設(shè)計(jì)中,人們多會選擇滿足兩點(diǎn)特性。為了解決最終的一致性,這就涉及到分布式事務(wù)。 showImg(https://segmentfault.com/img/bV7kd4?w=500&h=253); 一、分布式的兩大場景 數(shù)據(jù)存儲的分布式 服務(wù)的...
摘要:而在分布式系統(tǒng)中,分表分庫也是常用的一種解決此類瓶頸的手段。支持?jǐn)?shù)據(jù)的多片自動路由與聚合,支持等常用的聚合函數(shù)支持跨庫分頁。支持通過全局表,關(guān)系的分片策略,實(shí)現(xiàn)了高效的多表查詢。支持多租戶方案。 前言 對于業(yè)務(wù)量越來越大的時(shí)候,單表數(shù)據(jù)超過幾千萬,甚至上億時(shí),一張表里面查詢真的會很費(fèi)時(shí)。而在分布式系統(tǒng)中,分表分庫也是常用的一種解決此類瓶頸的手段。今天就選用springboot+myca...
摘要:但你是否知道分庫分表需要哪些要素拆分過程是復(fù)雜的,提前計(jì)劃,不要等真正開工,各種意外的工作接踵而至,以至失控。在實(shí)施分庫分表策略時(shí),這些個(gè)性會造成策略過大不好維護(hù)。 更多文章關(guān)注微信公眾號《小姐姐味道》 https://mp.weixin.qq.com/s?__... 數(shù)據(jù)庫中間件之分庫分表 恭喜你,貴公司終于成長到一定規(guī)模,需要考慮高可用,甚至分庫分表了。但你是否知道分庫分表需要哪...
閱讀 1216·2023-04-25 20:56
閱讀 2255·2023-04-25 14:42
閱讀 1020·2023-04-25 14:06
閱讀 2859·2021-10-14 09:42
閱讀 2136·2021-09-22 16:03
閱讀 978·2021-09-13 10:30
閱讀 1342·2019-08-29 15:41
閱讀 1789·2019-08-29 12:55