首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

反向查询问题

  •  
  •   fuxinya · 265 天前 · 1149 次点击
    这是一个创建于 265 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现有一个需求,根据某用户的信息反过来匹配宿主。
    现要根据用户的个人资料来匹配这些宿主,将个人资料符合宿主规则的所有宿主查询出来

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

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

    如果簡單對 M 個用戶各用(N 個宿主)的規則查一遍 就需要 M*N 嗎?
        3
    fuxinya   265 天前
    @momocraft 是的啊,因为用户自己设置的信息不全相同,匹配出来结果列表也不一样
        4
    lincanbin   265 天前 via Android
    看量级和一致性要求了,规则复杂的话用 elasticsearch 比较好。
    如果量级不大、对实时性没有很高要求、表的写操作也不频繁,可以再维护一个 memory 引擎的 mysql 表,所有查询在里面做。
        5
    fuxinya   265 天前
    @lincanbin 感谢回复,数据量级不大,但实时性要求高,我试试 memory 引擎效果怎么样。
        6
    Immortal   265 天前   ♥ 1
    其实我觉得 mysql 就可以了
    但给你另外一个思路 -- Redis 集合交集
    每种规则一个 redis 的集合,集合内是用户唯一 id
    比如 性别女是规则 A 年龄 20 以下是 B
    然后需要查询 20 岁以下的女性: SINTER A B
        7
    Immortal   265 天前
    仔细看了下不就是个差集问题么
    宿主 A 和 B 的匹配项都筛选出唯一 id 然后取交集就好了
    没必要想纯粹用 sql 解决 结果用代码处理下很快的
        8
    fuxinya   265 天前
    @Immortal 感谢回复,SINTER 是个解决办法
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1947 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
    ♥ Do have faith in what you're doing.