l**o 发帖数: 356 | 1 以前的面经上看到的
4. system design: 每个record有个很大field,比如年龄,性别,爱好等。给一个
field的组合,比如小于25岁,爱好体育,query满足这些组合条件的用户个数
这个应该怎么回答呀?
谢谢 |
g*****g 发帖数: 34805 | 2 上 elastic search做几个索引即可。
【在 l**o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 以前的面经上看到的 : 4. system design: 每个record有个很大field,比如年龄,性别,爱好等。给一个 : field的组合,比如小于25岁,爱好体育,query满足这些组合条件的用户个数 : 这个应该怎么回答呀? : 谢谢
|
e********3 发帖数: 229 | 3
没用过es,可以具体点不
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 上 elastic search做几个索引即可。
|
x*******9 发帖数: 138 | 4 “年龄,性别,爱好”
这种都是值比较少的field。例如年龄最多不过100个,性别算上trans最多不过10个。
爱好可以多选,如果我们限制一下,最多1000种组合。
这样算起来<年龄,性别,爱好>做一个联合Key的话,最多只有10^6种情况。
所以,我的设计是将这些值域比较小的Key做一个联合。然后再在上面加索引,直接维
护key->size(value)。
每次请求拿一个Key或多个Key即可。
这种方法的局限是对于范围查询效率较低,这时我们就要做一个tradeoff,在控制查询
精确性和结果精确性之间做一个平衡。
例如:
满足“20~25岁,男,爱好体育”这种查询就要比 “25岁,男,爱好体育”要简单。
因为我们将20~25岁看做一个年龄范围,这样我们索引的值域就要小很多。对于数据的
聚合也就更有效率。 |
b**********5 发帖数: 7881 | 5 in the 90s, we would do sql tables, age, sex, hobbies would be 3 tables, and
we would put indexes on those tables, and when we do query, we would join
those 3 tables.
now, cassandra/solr (
【在 l**o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 以前的面经上看到的 : 4. system design: 每个record有个很大field,比如年龄,性别,爱好等。给一个 : field的组合,比如小于25岁,爱好体育,query满足这些组合条件的用户个数 : 这个应该怎么回答呀? : 谢谢
|