[求助] 用户查询商品时,应该怎么排除没有权限的商品? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liubx
V2EX    Java

[求助] 用户查询商品时,应该怎么排除没有权限的商品?

  •  
  •   liubx 2020-09-04 17:07:26 +08:00 2633 次点击
    这是一个创建于 1864 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 业务的逻辑是,为用户分配品牌。用户搜索商品,只能搜索出对应品牌的商品。

    • 我现在的做法是: 先查出用户有品牌权限的商品集合。然后查询时条件带上 in(goodsList)。

    • 这种做法,效率太低了。请问有什么好的思路吗?

    22 条回复    2020-09-05 09:40:12 +08:00
    zzw252
        1
    zzw252  
       2020-09-04 17:13:46 +08:00
    启用或登录时返回用户信息中带上权限集合,请求商品列表时回传权限集给后端?
    wj219
        2
    wj219  
       2020-09-04 17:35:14 +08:00
    商品里边有存品牌 id 么,条件用 in (用户有权限的品牌 id) 至少执行的 SQL 长度小一点
    nutting
        3
    nutting  
       2020-09-04 17:39:37 +08:00
    1L 馊主意,权限怎么能前端确定。这没啥思路,就是表关联,条件限制啊。你是说 in 这个做法 sql 低效?
    vone
        4
    vone  
       2020-09-04 17:40:54 +08:00
    拿把菜刀架在用户脖子上,然后说请不要点开没权限的商品。

    或者
    select *
    from 商品表
    join 商品品牌表 on m=n
    join 品牌权限表 on x=y
    locoz
        5
    locoz  
       2020-09-04 17:47:29 +08:00
    后端做效率太低辣,让前端在界面上直接隐藏没权限的商品(狗头保命)
    gaius
        6
    gaius  
       2020-09-04 17:50:05 +08:00 via Android
    搞个用户商品权限范围表,查询时实时获取,用 es 查,不知道有多少商品,想想还挺恐怖的
    A388
        7
    A388  
       2020-09-04 17:50:33 +08:00
    @nutting 可能是 nodejs 做中间层传的撒
    liubx
        8
    liubx  
    OP
       2020-09-04 17:51:21 +08:00
    @nutting 商品多的话,sql 就会很长,这样不影响效率吗?
    pushback
        9
    pushback  
       2020-09-04 17:52:08 +08:00
    create table (user) - (user_goods) - (goods)
    select g.*
    from
    user_goods ug
    left join goods g on ug.goods_id = g.id
    where
    ug.user_id = ?
    liubx
        10
    liubx  
    OP
       2020-09-04 17:54:15 +08:00
    @zzw252 权限是在后端获取的。跟前端没关系的
    liubx
        11
    liubx  
    OP
       2020-09-04 17:54:51 +08:00
    @pushback 嗯,用 join 的话,sql 会短些。
    liubx
        12
    liubx  
    OP
       2020-09-04 17:55:17 +08:00
    @locoz 这样前端会砍死我的
    liubx
        13
    liubx  
    OP
       2020-09-04 17:55:50 +08:00
    @gaius 还没有用上 es,现在就 sql 查了
    Orangutan
        14
    Orangutan  
       2020-09-04 17:57:57 +08:00
    楼主没有说清楚效率低具体是低在哪里? 瓶颈在哪里?
    如果是查询慢,同楼上,一般索引,sql 优化下,如果还是解决不了,可以将用户和相关品牌权限存入缓存. 直接从缓存拿到关系直接单表 in 查询,前提注意缓存更新维护
    liubx
        15
    liubx  
    OP
       2020-09-04 17:59:52 +08:00
    @Orangutan 现在效率还行。主要是担心,以后商品多了,sql 就会非常长,这样会不会导致 sql 查询慢
    redtea
        16
    redtea  
       2020-09-04 18:03:08 +08:00
    一个品牌一个库
    vencent00
        17
    vencent00  
       2020-09-04 18:04:52 +08:00
    用户组不是太多的话把用户组对应的商品 id 存 redis,查询慢的话就上 es 吧,除了价格都走 es 查。
    liubx
        18
    liubx  
    OP
       2020-09-04 18:09:49 +08:00
    @vencent00 嗯,之后会上 es 。现在害得用 mysql
    Orangutan
        19
    Orangutan  
       2020-09-04 18:10:53 +08:00
    @liubx 具体情况具体分析吧,有精力的话可以搞点测试数据模拟一下
    liubx
        20
    liubx  
    OP
       2020-09-04 18:14:57 +08:00
    @Orangutan 嗯,多谢。试试看
    yufeng0681
        21
    yufeng0681  
       2020-09-04 22:18:46 +08:00
    业务体验方面:搜索结果的前两页没有命中用户的诉求,后面一百页都没有人翻看。
    如果是淘宝类的商品
    用户会加筛选条件看前两页(比如筛选地区,筛选信用度,筛选销售量)

    前期没啥商品,性能够用,怎么搞都可以;后面肯定要上 ES 来做更复杂的搜索逻辑,性能就不需要考虑了。 除非你们钱多,请个 DBA 来优化 SQL
    xuanbg
        22
    xuanbg  
       2020-09-05 09:40:12 +08:00
    搞一个商品分组,权限和分组相关,然后联表查询吧。。。效能降低那是肯定的,但也没有更好的办法了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3046 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:34 PVG 08:34 LAX 17:34 JFK 20:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86