簡體   English   中英

在MySQL中嚴格自動增加值

[英]Strictly auto-increment value in MySQL

我必須使用表(行)中每個元素的嚴格順序ID創建MySQL InnoDB表。 ID中不能有任何間隙-每個元素必須具有不同的ID,並且必須順序分配它們。 並發用戶在此表上創建數據。

我遇到了MySQL“自動遞增”行為,如果事務失敗,則不使用PK號,從而留出間隔。 我已經閱讀了在線復雜的解決方案,這些解決方案無法說服我,而其他一些解決方案卻不能真正解決我的問題( 在MySQL / InnoDB中模擬自動增量, 在同步的mysql服務器上設置手動增量值

  • 我想最大程度地提高並發性。 我付不起讓用戶在桌子上寫字並等待很長時間。
  • 我可能需要分片表...但仍要保留ID計數。
  • 表中元素的順序並不重要,但是ID必須是順序的(即,如果在另一個元素之前創建一個元素不需要具有較低的ID,但不允許在ID之間留有空隙)。

我能想到的唯一解決方案是使用附加的COUNTER表來保持計數。 然后在表中使用空的“ ID”(不是PK)創建元素,然后鎖定COUNTER表,獲取數字,將其寫入元素,增加數字,解鎖表。 我認為這可以正常工作,但有一個明顯的瓶頸:在鎖定期間,任何人都無法寫入任何ID。 此外,如果保存該表的節點不可用,也是單點故障。 我可以創建一個“大師-大師”嗎? 復制,但是我不確定是否以這種方式冒着使用過期ID計數器的風險(我從未使用過復制)。

謝謝。

對此我感到遺憾,但是允許高並發實現高性能並同時要求嚴格的單調序列是相互矛盾的要求。

要么你有控制/單一故障點發出的ID,並確保有沒有重復,也不是一個跳過, 否則你將不得不接受一個或這兩種情況的機會。

如您所述,已經嘗試了避免這種問題的方法,但是最終您總會發現需要在速度和正確性之間進行權衡,因為一旦允許並發,您就可能陷入腦裂的情況。或種族條件。

也許對於許多服務器/數據庫/表中的每一個,嚴格的單調序列都可以嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM