卖家可以设置一类商品在价格高于 x 元时每分钟自动降价 y 元,请问如何设计数据库效率最高? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rv54ntjwfm3ug8
V2EX    数据库

卖家可以设置一类商品在价格高于 x 元时每分钟自动降价 y 元,请问如何设计数据库效率最高?

  •  
  •   rv54ntjwfm3ug8 2021-04-10 12:02:20 +08:00 via iPhone 2386 次点击
    这是一个创建于 1715 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需要如何分表和设置索引呢?将对整个分类的设置复制到每个商品能够提高效率吗?
    13 条回复    2021-04-12 11:06:20 +08:00
    MeteorCat
        1
    MeteorCat  
       2021-04-10 12:10:53 +08:00 via Android
    商铺价格自动降价字段或者降价规则,用户访问的时候判断当前价格高于 X 元,高于 X 元跑降价字段或者降价规则
    learningman
        2
    learningman  
       2021-04-10 12:11:32 +08:00
    保存开始降价的 timestamp,当前价格计算得出行不?
    rv54ntjwfm3ug8
        3
    rv54ntjwfm3ug8  
    OP
       2021-04-10 12:14:22 +08:00 via iPhone   1
    @MeteorCat #1
    @learningman #2 感谢回复,想到过这种方案,但这样如何实现搜索结果按价格排序呢?
    xuegy
        4
    xuegy  
       2021-04-10 12:21:54 +08:00 via iPhone
    后台跑一个进程一直不停的排序吧。应该没什么特别好的算法,因为降价的开始 /结束时间都不一致。
    markgor
        5
    markgor  
       2021-04-10 12:25:36 +08:00
    目标:商品类别。
    逻辑:高于 X 元每分钟自动减少 Y 元。
    不确定因素:
    商品价格扣减 Y 元后是否允许高于 X 元?
    每分钟自动降价是否有个价格 /时间阈值?

    多一个条件和少一个条件做法都不一样,建议先确定好需求,再想方法。
    pimin
        6
    pimin  
       2021-04-10 12:29:26 +08:00
    显示价格是计算价格,数据库效率最高
    至于排序,如果商品数量不是超级多,比如只有几百条几千条,维持一个实时价格榜单,在需要排序的时候调用就行。
    rv54ntjwfm3ug8
        7
    rv54ntjwfm3ug8  
    OP
       2021-04-10 12:42:27 +08:00 via iPhone   1
    @markgor #5 我觉得您说的这两个因素是确定的。
    1. 商品价格扣减 y 元后肯定允许高于 x 元呀。
    2. 降价前价格不能低于 x 元算不算价格阈值呢?
    pkupyx
        8
    pkupyx  
       2021-04-10 13:52:02 +08:00
    具体电商业务理论上每次编辑商品信息都得创建新的商品快照,编辑价格也一样。所以创建假超管账户,然后走人工编辑创建快照的逻辑吧。
    no1xsyzy
        9
    no1xsyzy  
       2021-04-10 18:41:27 +08:00   1
    显然应该用 redis 作排序啊(笑

    @markgor “每分钟”显然蕴含了你可以指望大部分情况下扣减 Y 元后是高于 X 元的。
    也一定程度上暗示了终止条件是价格不高于 X 元为止。
    但不确定因素还有:
    如果输入错误,Y>X 是否会导致价格为负?(因为可能越过“用户输入校验”)
    是否可能导致长时间大量行更新?表的大小是多少?数据库撑得住吗?

    除此以外,这种逻辑简直是跟商业技巧反着来的:每等分钟你都能获得更优惠的价格,那么几乎所有人都会等价格降低,而一旦等待,就会造成强制冷静反思自己是不是需要这个商品。为了抵抗强制冷静,必须设置商品数量有限,实质是带一口价的拍卖,请直接换成拍卖。
    MintZX
        10
    MintZX  
       2021-04-11 06:51:12 +08:00
    什么数据库? postgres 写个 procedure 用 pg_cron 后台 run 就行了

    ms sql server 也有同样的功能
    DoctorCat
        11
    DoctorCat  
       2021-04-11 17:44:54 +08:00
    @MintZX 你这方法迁移性太差,不适合大规模电商业务。
    DoctorCat
        12
    DoctorCat  
       2021-04-11 17:49:09 +08:00   1
    lz 这明显是动态字段嘛,保留原价格字段,然后额外增加一个状态字段最好。
    这似乎跟分表没啥必然联系啊。如果是为了提升效率那就增加一个动态计价的服务通过商品表中的状态字段关联,把价格计算与最终成交订单数据分离,服务挂了可以降级为:价格不变原价交易。
    hui314
        13
    hui314  
       2021-04-12 11:06:20 +08:00
    redis 有序集合, 商品 id 为 key, 价格为 score.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2488 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 10:55 PVG 18:55 LAX 02:55 JFK 05:55
    Do have faith in what you're doing.
    ubao msn 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