我必须使用表(行)中的每个元素的严格顺序ID来创建MySQL InnoDB表。 ID中不能有任何空白 - 每个元素必须有不同的ID,并且它们必须按顺序分配。并发用户在此表上创建数据。在MySQL中严格自动增加值
我遇到过MySQL的“自动增量”行为,如果一个事务失败,PK号码不会被使用,留下空隙。我已阅读我希望最大限度地编写并发网络复杂的解决方案,并没有说服我和其他一些是真的不解决我的问题(Emulate auto-increment in MySQL/InnoDB,Setting manual increment value on synchronized mysql servers)
- 。我不能让用户在桌子上写字,等待很长时间。
- 我可能需要对表格进行分片...但仍保留ID号。
- 表中元素的顺序并不重要,但ID必须是顺序的(例如,如果元素是在另一个元素之前创建的,不需要具有较低的ID,但ID之间的间距不允许)。
我能想到的唯一解决方案是使用额外的COUNTER表来保持计数。然后用空的“ID”(不是PK)在表中创建元素,然后锁定COUNTER表,获取数字,将其写入元素,增加数字,解锁表格。我认为这样做可以正常工作,但有明显的瓶颈:在锁定期间,没有人可以写任何ID。 另外,如果持有该表的节点不可用,则是单点故障。我可以创建一个“主 - 主”?复制,但我不知道是否这样我冒着使用过时的ID计数器(我从来没有使用过复制)的风险。
谢谢。
需要连续ID的性质是什么?这是一个面向用户的价值吗?也许是因为您将该ID传递给用户。如果是这样,我会创建一个代理ID值,您传递给用户。这给你以后的设计灵活性。 你说“最大化写入并发性”很重要,但是“不要等很长时间”会留下很多回旋余地 - 与“最大化写入并发性”非常不同。一个更容易,那是哪个呢? 将它定义为“不要等很长时间”似乎可以让你做一些额外的,但轻量级的工作来满足你的要求。 – gillyspy 2013-05-03 04:12:46
我写了一个innodb差距答案[在这里](http://stackoverflow.com/a/38363271) – Drew 2016-07-14 00:12:21