拍卖系统中如何实现代理出价? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
a81874678
V2EX    程序员

拍卖系统中如何实现代理出价?

  •  
      a81874678 2015-10-19 15:40:51 +08:00 4461 次点击
    这是一个创建于 3647 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PHP 开发一个拍卖功能分为:常规竞拍和代理竞拍
    参考 http://www.kongfz.cn/19722841/ (其实就是想实现和它一样的功能^_^,淘宝拍卖好像也可以设置代理出价)

    在设置代理竞拍后系统怎么实现自动竞拍
    比如商品起拍价为 1 元、最小加价为 3 元。
    当 A 用户为第一个出价人出价为 1 元, B 用户出价为 4 元,如果 C 用户在 B 出价后设置代理价为 10 元,那么系统会自动出价 7 元,如果 A 出价为 10 元,这里最高价 10 元+最小加价 3 元已经大于 C 设置的最高代理价,所以 C 之前设置的代理价无效,系统不会自动出价。

    目前想到方法
    1 、单独写一个方法然后通过 计划任务 /Crontab 执行
    Windows 下最小的 1 分钟(但可以设置多个触发器)
    Linux Crontab 楼主不熟 Google 说可以设置以秒为周期来执行

    那么问题来了,楼想要实现最好是代理可以实时执行,但执行周期太短会不会两次执行出现冲突。执行周期太长怕用户在最后 1 、 2 秒出价,代理不能执行的问题。

    2 、在用户每次出价或是设置代理价的时候都检查有没有用户设置代理,然后执行。算是手动触发。

    大家有什么好的方法分享一下,或是说一下上面哪种方法好点。

    还有一个商品,特别是在设置了代理价后,他的出价记录很容易出现上千条记录,这些数据怎么存好一点呢,放一个表里随着时间和商品数量的增长,记录会越来越多,每个商品的出价记录分一表还是几百个分一个表,求指点!

    24 条回复    2015-10-21 08:22:33 +08:00
    owei
        1
    owei  
       2015-10-19 16:10:55 +08:00   1
    如果多个用户都设置的代理出价,根据你的逻辑是不是一个无线的循环了(在理论上,可以想象一个为一个多人触发的出价循环),我个人觉得,这个才是代出价的关键点吧
    1 , 2 的方案都是可以的,区别就是实时性的问题了
    oott123
        2
    oott123  
       2015-10-19 16:38:04 +08:00 via Android
    2
    a81874678
        3
    a81874678  
    OP
       2015-10-19 16:46:05 +08:00
    @owei 如果是多个用户都设置代理出价,那将循环到只剩下最高价的那个, 1 的方法就是将所有设置代理的商品统一执行一边, 2 的方法就只是执行当前操作的商品,感觉第二个实时性和效率更高,只是不知道会不会有什么没想到的问题。
    a81874678
        4
    a81874678  
    OP
       2015-10-19 16:49:29 +08:00
    @oott123 (眨眼
    domty
        5
    domty  
       2015-10-19 17:02:59 +08:00   1
    如果只是想在别人家的网站做个类似的自动排名插件,那无非就是“监听-请求”模型
    如果是想在自己的网站里为用户提供自动出价功能,请注意数据请求的同步问题。所以把竞拍请求按时间顺序往一个请求队列里放,在取出每个请求的时候过滤掉一些无效的请求。
    最后,要设置代理出价的话,这个代理出价的触发条件是啥。
    SYP
        6
    SYP  
       2015-10-19 17:53:38 +08:00   1
    参考里面用的是方案 1 ,最后一两秒好解决,结算的时候把有效代理考虑进去就行了,具体排序规则看业务需求;
    方案 2 不好控制同时大量并发的问题,多人设置代理会突发性生成大量记录。
    CRVV
        7
    CRVV  
       2015-10-19 22:35:21 +08:00   1
    有这么复杂么...

    首先这个东西的本质并不是 代理出价,只是某一种拍卖的玩法而已

    出价最高的人买到商品,他需要付的钱是 第二高的出价 + 最小加价。并且,最高的出价不公开,公开第二高的出价

    每次有人出价了按这个逻辑算一遍就好呗
    a81874678
        8
    a81874678  
    OP
       2015-10-20 08:17:10 +08:00
    @domty 是在自己的网站想要实现同样的功能。
    我不太懂你所说的代理出价的触发条件这句是什么意思。

    就是当有人出价,如果小于另一个人的代理价,那么代理将自己出代理价,当然可以同理出现多个人设置代理,这样就按价钱从小到大一直代理上去
    a81874678
        9
    a81874678  
    OP
       2015-10-20 08:20:19 +08:00
    @SYP 方案 1.你的意思是结算的时候取有效的出价就好了是吧。但这个时候就会出现还剩 1 、 2 秒代理没有出价的可能。

    方案 2.确实不要控制并发
    a81874678
        10
    a81874678  
    OP
       2015-10-20 08:24:19 +08:00
    @CRVV 你说的这种是拍卖规则的一种,我这里要实现的是最高出价的人买到商品,并且公开所有出价
    现在主要的问题是出现多个人设置代理,怎么实现系统快速的作出代理出价的响应
    SYP
        11
    SYP  
       2015-10-20 09:45:00 +08:00
    @a81874678 代理的最后出价结算时也是可以获取的,是按照时间线上的出价还是代理设置价格看业务需求了;反正到了这个时候已经没有输入了,只是把最后的数据做展示而已。
    domty
        12
    domty  
       2015-10-20 11:05:01 +08:00
    @a81874678
    做个假设,有两个买家设置了代理出价,一个设置的是 100 元,另外一个设置的是 90 元。
    现在出价到 85 元,哪个先出价。
    CRVV
        13
    CRVV  
       2015-10-20 11:30:44 +08:00
    @a81874678
    你确定你要公开所有出价?
    “ C 用户在 B 出价后设置代理价为 10 元,那么系统会自动出价 7 元”
    这个 10 元要公开么?
    a81874678
        14
    a81874678  
    OP
       2015-10-20 12:49:49 +08:00
    @CRVV 设置的代理价 10 就只有自己 可以看到,是不公开的,公开的是用户所出的(包括系统代理出的价格) 7 元或之前出过的价格
    a81874678
        15
    a81874678  
    OP
       2015-10-20 12:52:38 +08:00
    @domty 我现在是按照先设置代理价先出的原则,
    a81874678
        16
    a81874678  
    OP
       2015-10-20 12:54:53 +08:00
    @SYP 你是意思是说在结束的时候,就算是代理当时没有出价在结算的时候也可以补进去。不知道是不是我理解错了。
    SYP
        17
    SYP  
       2015-10-20 13:19:33 +08:00
    @a81874678 就是这样,这个时候交互已经结束,只是数据处理就很随意了,应该还有一些超时的数据要清理。
    Felldeadbird
        18
    Felldeadbird  
       2015-10-20 15:55:58 +08:00
    不需要 cron 定时执行。
    帮楼主简单化流程。 ABC 三个用户,他们最终出价分别为 10 、 20 、 15. (这里是最终的,如何计算业务逻辑省去)。
    程序获得所有用户的价格后,进行最终确认谁最高价最拍卖到。
    ---------------
    得到上述信息后,假设 ABC 他们在不同时段进入。只要 PHP 端做好 有人访问 指定商品,或者列表页,则触发 “最终确认谁最高价最拍卖到” 该动作则可。
    楼主可能会有疑问了,要是 ABC 同时访问,程序处理过程不是存在快慢问题吗?
    在这个并发的过程,可以锁表 或者开启事务。防止上述情况,但不论怎样,最终结果都是一样的。只是快和慢而已。
    ----------------
    至于 cron ,最大的好处就是提升了 商品的结算时间。若拍卖系统有大量的结算操作,从 web 服务软件经过 PHP 过程,已经消耗了很多的时间。。。
    Felldeadbird
        19
    Felldeadbird  
       2015-10-20 15:58:57 +08:00   1
    再补充一句,不论代理出价如何。其实最终程序还是要结算出所有参与拍卖的用户出价。 其实简单地来说,这个就像 我发表一篇 25 号才可以看到的文章,那么 SQL 就这样:
    SELECT * FROM post WHERE post_data <= '.time().' ;
    a81874678
        20
    a81874678  
    OP
       2015-10-20 17:05:30 +08:00
    @Felldeadbird 多谢指导,但是我这里还需要每次用户出价和时间的记录都要显示出来,并不是时间结束后再计算所有用户的出价。也就是说除了代理出价,还有用户手动出价的。
    越看你的头像,我的大脑就越是一片空白,哈哈。不知道我说的和你上面讲的会不会有冲突。

    你的建议是访问商品再触发事件,应该是处理所有设置代理的商品的业务流程吧?

    再次感谢!
    Felldeadbird
        21
    Felldeadbird  
       2015-10-20 19:58:23 +08:00 via iPhone
    @a81874678 如果要保留过程,那么就将计算过程入库就可以了。反正方法都一样的。
    frienmo
        22
    frienmo  
       2015-10-20 20:37:34 +08:00
    @CRVV 让我想到了暗黑 3 的拍卖场
    CRVV
        23
    CRVV  
       2015-10-20 22:40:10 +08:00
    @a81874678
    你仔细地看一下我的第一条回复,和你设计的交易方式和规则,是不是一样的
    a81874678
        24
    a81874678  
    OP
       2015-10-21 08:22:33 +08:00
    @CRVV 基本是一样的,最后价高者得,但是要显示出所有用户的出价记录

    这里的出价记录是用户‘手动出价’和系统‘代理出价’的集合按时间和金额从高到低排序。

    但并不会显示用户设置的‘代理金额’。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:50 PVG 04:50 LAX 13:50 JFK 16:50
    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