Re: [问题] 关于分布式取值

楼主: gohomexx (gohomexx)   2016-06-28 11:52:24
※ 引述《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 去加速存取特定资料的话,那不如全部都捞取吧。

Links booklink

Contact Us: admin [ a t ] ucptt.com