作者gohomexx (gohomexx)
看板Prob_Solve
标题Re: [问题] 关於分散式取值
时间Tue Jun 28 11:52:24 2016
※ 引述《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://webptt.com/cn.aspx?n=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