我必须使用表(行)中每个元素的严格顺序 ID 创建一个 MySQL InnoDB 表。ID 之间不能有任何间隙——每个元素必须有不同的 ID,并且必须按顺序分配。并发用户在此表上创建数据。
我经历过 MySQL“自动增量”行为,如果事务失败,则不使用 PK 号,留下一个空白。我已经阅读了无法说服我的在线复杂解决方案以及其他一些并没有真正解决我的问题的解决方案(在 MySQL/InnoDB中模拟自动增量,在同步的 mysql 服务器上设置手动增量值)
- 我想最大限度地提高写作并发性。我不能让用户在桌子上写字并等待很长时间。
- 我可能需要对表进行分片......但仍然保持 ID 计数。
- 表中元素的顺序并不重要,但 ID 必须是连续的(即,如果一个元素在另一个元素之前创建,则不需要具有较低的 ID,但 ID 之间不允许有间隙)。
我能想到的唯一解决方案是使用额外的 COUNTER 表来保持计数。然后用空“ID”(不是PK)在表中创建元素,然后锁定COUNTER表,获取数字,写在元素上,增加数字,解锁表。我认为这会很好,但有一个明显的瓶颈:在锁定期间没有人能够写任何 ID。此外,如果持有该表的节点不可用,则会出现单点故障。我可以创建一个“大师-大师”吗?复制,但我不确定这种方式是否会冒险使用过期的 ID 计数器(我从未使用过复制)。
谢谢。