文件首頁
X DevAPI 使用者指南
下載本手冊
PDF (美國信紙) - 1.4Mb
PDF (A4) - 1.4Mb


X DevAPI 使用者指南  /  使用文件  /  了解文件 ID

5.3 了解文件 ID

本節詳細說明如何產生文件 ID 以及如何解讀它們。X DevAPI 依賴伺服器端的文件 ID 產生,這會導致所有用戶端的文件 ID 依序遞增。InnoDB 使用文件 ID 作為主要索引鍵,從而實現有效率的分頁分割和樹狀結構重組。

本節說明自動產生文件 ID 的屬性和格式。

文件 ID 屬性

文件的 _id 欄位的行為與查詢期間文件的任何其他欄位相同,只是其值一旦插入集合後就無法變更。_id 欄位用作集合的主要索引鍵。可以藉由在插入的文件中手動包含 ID 來覆寫文件 ID 的自動產生。

重要事項

X 外掛程式不知道插入到集合中的資料,包括您使用的任何手動文件 ID。使用手動文件 ID 時,您必須確保它們不會與伺服器可能自動產生的任何 ID 發生衝突(請參閱文件 ID 產生以了解詳細資訊),以避免因主索引鍵重複而導致的任何錯誤。

每當插入的文件中不存在 _id 欄位值時,伺服器就會產生 _id 值。用於文件的已產生 _id 值會作為 add() 操作的 Result(Connector/J 為 Result)物件的一部分傳回給用戶端。如果您在 InnoDB Cluster 上使用 X DevAPI,則自動產生的 _id 在整個叢集中必須是唯一的。透過將 mysqlx_document_id_unique_prefix 設定為每個叢集執行個體的唯一值,您可以確保文件 ID 在所有執行個體中都是唯一的。

_id 欄位必須是循序的(始終遞增),以獲得最佳的 InnoDB 插入效能(至少在單一伺服器內)。_id 值的循序性質在伺服器重新啟動時會維持不變。

在多主要群組複寫或 InnoDB Cluster 環境中,資料表的已產生 _id 值在各個執行個體之間是唯一的,以避免主要索引鍵衝突並減少交易驗證。

文件 ID 產生

本節說明文件 ID 的格式設定方式。

自動產生文件 ID 的格式為

unique_prefix start_timestamp serial
4 個位元組 8 個位元組 16 個位元組

其中

  • unique_prefix 是 InnoDB Cluster 指派給執行個體的值,用於使來自相同叢集的所有執行個體的文件 ID 成為唯一。 unique_prefix 的範圍是從 0 到 216-1,以十六進位編碼。如果 InnoDB Cluster 或 mysqlx_document_id_unique_prefix 系統變數皆未設定該值,則預設值為 0。

  • start_timestamp 是伺服器執行個體啟動時間的時間戳記,以十六進位編碼。在不太可能發生的 serial 值溢位的情況下,start_timestamp 會遞增 1,然後 serial 值會從 0 重新開始。

  • serial 是每個執行個體自動遞增的整數序號值,以十六進位編碼,範圍為 0 到 264-1。serial 的初始值設定為 auto_increment_offset 系統變數,值的遞增量由 auto_increment_increment 系統變數設定。

此文件 ID 格式可確保

  • 主要索引鍵值對於來自單一伺服器執行個體的插入會單調遞增,儘管資料表內的值之間間隔不一致。

  • 當使用多主要群組複寫或 InnoDB Cluster 時,只要執行個體正確設定了 auto_increment_offsetauto_increment_increment 系統變數(詳細資訊請參閱變數的說明),來自不同執行個體且插入到相同資料表的插入不會有衝突的主要索引鍵值。