2012-03-29 73 views
0

我正在爲每個事務添加一系列記錄(例如100)。我希望每條記錄都有一個「交易ID」字段,該字段對於每個新交易都是遞增的,並且對於在特定交易中插入的每條記錄都是相同的值。我希望這樣做,以便客戶端可以執行查詢,然後在將來的某個時刻執行相同的查詢,但只檢索具有較新事務ID的記錄。做這件事的最好方法是什麼?我真的不想在應用程序級別生成ID,因爲數據庫被多個進程訪問,所以我必須協調ID分配跨進程。或者我可以有一個專用的TXID表和一個autoincrememt列,在開始事務之前插入,並使用last_insert_rowid()作爲TXID,但是爲了生成ID,存儲遞增數字表似乎有點低效。有什麼想法嗎?謝謝。sqlite:爲多插入事務創建事務ID

回答

1

如果你想要一個遞增的整數,你應該確實做你所建議的 - 有另一個表維護事務ID。您可以定期掃描這張表以刪除行,儘管它們會非常小巧高效,所以這不應該成爲一個大問題。

還有其他各種可能的解決方案,但正如您已經想到的那樣,其中大多數解決方案在您的情況下不起作用(根據您所需的保真度,碰撞的可能性)。如果你需要利用數據庫來保證唯一性,這是在SQLite中唯一的方法。或者,您可以嘗試類似randomrandomblobfunctions,但顯然沒有針對PRG的唯一性保證。

如果需要一個單調遞增的整數,你也可以生成一個RFC 4122 UUID在應用層面(這些仍然衝突,但是很少,如果你是從許多過程編寫 - 你可能還需要標記它與一個特定於流程的字符串並使其成爲URN,類似於urn:uuid:<tag>+<uuid>)。如果所有作者都在同一臺機器上,使用類似pid這樣的標籤就足以保證唯一性。

+0

感謝您的回答。我想過UUID,但我需要確保每個新ID都大於最後一個。將做TXID表解決方案。 – gimmeamilk 2012-03-29 20:45:51