V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Marser
V2EX  ›  算法

论坛楼层号如何保证唯一性?

  •  
  •   Marser · 2017-08-28 18:01:50 +08:00 · 3471 次点击
    这是一个创建于 2404 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以百度帖吧为例,每个楼层,都有一个楼层号码。在回复的时候,就已经生成了这个楼层号码写进数据库。在前台显示的时候,楼层号码可以不连续(因为有可能中间某个回复被禁掉了)。那么,在生成楼层号码的时候,如何保证唯一性呢? 之前的考虑是在 mysql 中记录每个回复的楼层号,然后在添加新的回复时,通过 select max(楼层号) ,再加 1,就生成新的楼层号。但是这种方式在并发情况下,可能取到相同的 max(楼层号),导致生成的新楼层号存在重复的。 大家有没有好的思路?

    7 条回复    2017-08-29 09:25:35 +08:00
    silentoy
        1
    silentoy  
       2017-08-28 18:05:54 +08:00
    discuz 里是做的帖子 ID 和楼层号的唯一索引,仅供参考
    qq292382270
        2
    qq292382270  
       2017-08-28 18:06:50 +08:00
    好吧.. 你非要这样的话可以建议你用时间来排序..
    giuem
        3
    giuem  
       2017-08-28 18:09:14 +08:00 via iPhone
    为什么不用自增主键
    gamexg
        4
    gamexg  
       2017-08-28 18:29:43 +08:00
    难道删除操作是真实的数据库删除?
    不都是只打个标吗?
    这样楼层号码直接计算就是
    evlos
        5
    evlos  
       2017-08-28 18:53:03 +08:00 via iPhone
    前端算啊,反正知道当前是第几页,被禁的回复后端也可以给个返回
    Mogugugugu
        6
    Mogugugugu  
       2017-08-28 18:55:36 +08:00
    前端算吧、后台根据时间排序返回一个列表,被禁的回复返回一个禁用的状态。
    Marser
        7
    Marser  
    OP
       2017-08-29 09:25:35 +08:00
    @silentoy 好的,我有考虑过这种实现。非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1267 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:53 · PVG 01:53 · LAX 10:53 · JFK 13:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.