反向查询问题

2019-01-26 14:45:24 +08:00
 fuxinya
现有一个需求,根据某用户的信息反过来匹配宿主。
现要根据用户的个人资料来匹配这些宿主,将个人资料符合宿主规则的所有宿主查询出来

例如:宿主 A 设置了匹配规则:性别为男的,且年龄小于 20,宿主 B 匹配规则:性别为女的,且年龄小于 20
用户张三性别为女,年龄 18,则搜索结果: [宿主 B]

PS:这个查询很频繁,使用 sql 查询是否还可行?我目前把宿主存在 redis 缓存里面,但是查询时遇到瓶颈,平时都是正着查,现在反着来不知道怎么办了
匹配规则还有很多,上面只是举例两个
2064 次点击
所在节点    程序员
8 条回复
lhx2008
2019-01-26 14:49:44 +08:00
规则存的时候存规范一点可以直接用 mysql 查,效率应该还凑合吧
momocraft
2019-01-26 14:55:01 +08:00
宿主...第一眼看到以爲是星際

如果簡單對 M 個用戶各用(N 個宿主)的規則查一遍 就需要 M*N 嗎?
fuxinya
2019-01-26 14:58:00 +08:00
@momocraft 是的啊,因为用户自己设置的信息不全相同,匹配出来结果列表也不一样
lincanbin
2019-01-26 15:11:30 +08:00
看量级和一致性要求了,规则复杂的话用 elasticsearch 比较好。
如果量级不大、对实时性没有很高要求、表的写操作也不频繁,可以再维护一个 memory 引擎的 mysql 表,所有查询在里面做。
fuxinya
2019-01-26 15:17:53 +08:00
@lincanbin 感谢回复,数据量级不大,但实时性要求高,我试试 memory 引擎效果怎么样。
Immortal
2019-01-26 15:39:09 +08:00
其实我觉得 mysql 就可以了
但给你另外一个思路 -- Redis 集合交集
每种规则一个 redis 的集合,集合内是用户唯一 id
比如 性别女是规则 A 年龄 20 以下是 B
然后需要查询 20 岁以下的女性: SINTER A B
Immortal
2019-01-26 15:43:18 +08:00
仔细看了下不就是个差集问题么
宿主 A 和 B 的匹配项都筛选出唯一 id 然后取交集就好了
没必要想纯粹用 sql 解决 结果用代码处理下很快的
fuxinya
2019-01-26 15:55:40 +08:00
@Immortal 感谢回复,SINTER 是个解决办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX