欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

解決分庫分表查詢問題的巧妙設(shè)計:異構(gòu)索引表

admin
2024年4月28日 16:9 本文熱度 829

異構(gòu)索引表的作用

如果《面試官:分庫分表有什么好的方案?》說的是分庫分表的方法和策略,那么本文所探討的“異構(gòu)索引表”,則是在實施分庫分表過程中一個非常巧妙的設(shè)計,用來解決分庫分表的查詢問題

分庫分表的查詢問題

問題說明

在哈希分庫分表時,為了避免分布不均勻造成的“數(shù)據(jù)傾斜”,通常會選擇一些數(shù)據(jù)唯一的字段進行哈希操作,比如ID。

以訂單表為例,通常有(id、uid、status、amount)等字段,通過id進行哈希取模運算分庫分表之后,效果如下圖

哈希分庫分表效果

這樣分庫分表的方法沒有問題,但是,在后期的開發(fā)和維護過程中,可能會存在潛在的問題。

舉個例子:現(xiàn)在要查詢uid為1的記錄,應(yīng)該去哪個表或庫去查詢?

對于用戶來講,這個場景可以說是非常頻繁的。

這個時候就會發(fā)現(xiàn),要想查詢uid為1的記錄,只能去所有的庫或分表上進行查詢,也就是所謂的“廣播查詢”。

整個查詢過程大概是這樣的

分庫分表查詢

性能問題

顯然,整個查詢過程需要進行全庫掃描,涉及到多次的網(wǎng)絡(luò)數(shù)據(jù)傳輸,一定會導(dǎo)致查詢速度的降低和延遲的增加

數(shù)據(jù)聚合問題

另外,當這個用戶有成千上萬條數(shù)據(jù)時,不得已要在一個節(jié)點進行排序、分頁、聚合等計算操作,需要消耗大量的計算資源和內(nèi)存空間。對系統(tǒng)造成的負擔也會影響查詢性能。

這是一個非常典型的“事務(wù)邊界大”的案例,即“一條SQL到所有的數(shù)據(jù)庫去執(zhí)行”。

那么如何解決這一痛點?

解決分庫分表的查詢問題

本文重點:“異構(gòu)索引表”是可以解決這個問題的。

引入異構(gòu)索引表

簡單來說,“異構(gòu)索引表”是一個拿空間換時間的設(shè)計。具體如下:

添加訂單數(shù)據(jù)時,除了根據(jù)訂單ID進行哈希取模運算將訂單數(shù)據(jù)維護到對應(yīng)的表中,還要對uid進行哈希取模運算,將uid和訂單id維護在另一張表中,如圖所示。

異構(gòu)索引表

引入“異構(gòu)索引表”后,因為同一個uid經(jīng)過哈希取模運算后得到的結(jié)果是一致的,所以,該uid所有的訂單id也一定會被分布到同一張user_order表中。

當查詢uid為1的訂單記錄時,就可以有效地解決數(shù)據(jù)聚合存在的計算資源消耗全庫掃描的低效問題了。

接下來,通過查詢過程,看看這兩個問題是怎么解決的。

引入后的查詢過程

引入“異構(gòu)索引表”后,查詢uid為1的訂單記錄時,具體過程分為以下幾步:

  1. 應(yīng)用向中間件發(fā)送select * from order where uid = 1,請求查詢uid為1的訂單記錄。
  2. 中間件根據(jù)uid路由到“異構(gòu)索引表”:user_order,獲得該uid相關(guān)的訂單ID列表(排序、分頁可以在此sql操作)。
  3. 中間件根據(jù)返回的訂單ID,再次準確路由到對應(yīng)的訂單表:order
  4. 中間件將分散的訂單數(shù)據(jù)進行聚合返回給應(yīng)用。

引入異構(gòu)索引表查詢

看上去引入“異構(gòu)索引表”之后,多了一個查詢步驟,但換來的是:

  1. 根據(jù)訂單ID準確路由到訂單表,避免了全庫掃描。
  2. user_order表進行了排序、分頁等操作,避免大量數(shù)據(jù)回到中間件去計算。

異構(gòu)索引表解決不了的場景

“異構(gòu)索引表”只適合簡單的分庫分表查詢場景,如果存在復(fù)雜的查詢場景,還是需要借助搜索引擎來實現(xiàn)。

總結(jié)

異構(gòu)索引表作為一種巧妙的設(shè)計,避免了分庫分表查詢存在的兩個問題:全庫掃描不必要的計算資源消耗

但是,異構(gòu)索引表并不適用所有場景,對于復(fù)雜的查詢場景可能需要結(jié)合其他技術(shù)或策略來解決問題。


該文章在 2024/4/28 20:56:32 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved