Re: [問題] 關於分散式取值
看板Prob_Solve (計算數學 Problem Solving)作者gohomexx (gohomexx)時間8年前 (2016/06/28 11:52)推噓0(0推 0噓 0→)留言0則, 0人參與討論串1/1
※ 引述《s1497k047 (財財)》之銘言:
: Hi 各位大大
: 現有架構為 a b c 三個資料庫
: 倘若我要取10筆搜尋結果 ,則會分成三台機器,
: a機器查一次吐回1-10筆 給main
: b機器查一次吐回1-10筆 給main
: c機器查一次吐回1-10筆 給main
: 再由一台 main 做條件的排序,過濾等等
: 再取1-10筆,顯示搜尋結果
: 假設我要取回來的結果依照某個屬性來做groupby
: 則會a,b,c資料庫 搜尋時做一次groupby
: 吐回給main時 再做一次groupby ,防止a b c互相有重複的資料。
: 問題來了
: 假設有一筆資料 groupby之後 是再a資料庫的第11筆,但是再b資料庫是第一名
: 依照現行做法 會導致groupby記數錯誤每一筆資料的group_total 非正確結果
: 有沒有一種演算法能夠推估出依照 a b c某筆資料的排名,來設定出應該要取幾筆最安全
: ,ex: 都取抓的目的資料筆數的3倍/5倍,
: 無奈現行分配查尋機制無法更動,又考量到一次全部查詢會有效率上的問題
: 懇請各位專家解惑
剛跟同事討論過了,這個問題有點複雜。
假設要群組起來的資料是分數好了。
然後在 a DB
分數如下 10000, 9999, 9998,.... 9901 分別是前 100 名標記為 a1~a100。
在 b DB 的資料中,a1~a99 沒有分數, a100 有 2 分。
而 b DB 最高分為 9900,亦即, b DB 的分數不影響總排名,
但 a100 只有 2 分排在第 7000 名,你要分數加總正確的話,
b DB 至少要撈取 7000 名了。
我們討論的結論是, a DB 撈取前 100 名後,
以 sn 分數向 b,c DB 要求這 100 名的分數。
然後加總存起來, b, c 比照辦理,
總共要存取 9 次 DB,這樣結果絕對會是正確的。
但如果沒有 sn 去加速存取特定資料的話,那不如全部都撈取吧。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.51.201.195
※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1467085947.A.548.html
※ 編輯: gohomexx (123.51.201.195), 06/28/2016 18:15:58
※ 編輯: gohomexx (123.51.201.195), 06/28/2016 18:17:32
Prob_Solve 近期熱門文章
PTT數位生活區 即時熱門文章