下一个独特的价值我有我开发我的组织跟踪工作订单的MySQL数据库(InnoDB的)。有多个“点”,并且每个站点都有工单号为100。MySQL的获得不带自动增量
WorkorderID SiteID SiteWorkorderNum
1 1 100
2 1 101
3 2 100
开始WorkorderID是自动递增领域。
SITEID和SiteWorkorderNum都设置为唯一约束。
每当一个新的工作秩序即将被插入一个特定的网站,为最大(SiteWorkorderNum)的任何人所登录的SITEID应用程序检查和返回值的INSERT语句。我想避免的问题是,如果同一个网站的两个用户同时进入新的工作订单。
我有几个可能的解决方案,但我想看看是否有更好的方法,因为每个都有缺点,但我肯定会比另一个更好,当然我也接受新的想法。
1)锁表,以保证没有其他用户检索SiteWorkorderNum值,直到经过我们检索和插入我们的价值观(但是让我们假设我们有用户试图进入工单,每分钟几千,岂不如果我收到一个唯一的约束错误,捕获错误并再试一次,请不要锁定表,并检索下一个可用的SiteWorkorderNum并尝试插入到数据库中直到我成功。 (这可能保持腾出表,但再次假装我们在同一地点有成千上万的用户,将在多个数据库调用有点低效?)
我是不是太偏执了有关如何这两种解决方案“可能'效果表现?当然,我没有成千上万的用户,但我想在这个设计的情况下,我曾经在一个项目里面确实有高流量的工作应用的最佳实践。