我必須使用表(行)中的每個元素的嚴格順序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