5.3 Понимание идентификаторов документов
В этом разделе подробно описывается, как генерируются идентификаторы документов и как их интерпретировать. X DevAPI полагается на генерацию идентификаторов документов на сервере, что приводит к последовательно возрастающим идентификаторам документов для всех клиентов. использует идентификатор документа в качестве первичного ключа, что обеспечивает эффективное разделение страниц и реорганизацию деревьев.
В этом разделе описываются свойства и формат автоматически сгенерированных идентификаторов документов.
Свойства идентификатора документа
Поле _id документа ведет себя так же, как и любые другие поля документа при запросах, за исключением того, что его значение нельзя изменить после вставки в коллекцию. Поле _id используется в качестве первичного ключа коллекции. Можно переопределить автоматическую генерацию идентификаторов документов, вручную включив идентификатор в вставляемый документ.
X Plugin не отслеживает данные, вставленные в коллекцию, включая любые ручные идентификаторы документов, которые вы используете. При использовании ручных идентификаторов документов необходимо убедиться, что они не конфликтуют с любыми идентификаторами, которые могут быть сгенерированы сервером автоматически (см. Генерация идентификаторов документов для получения подробной информации), чтобы избежать ошибок из-за дублирования первичных ключей.
В случае, если значение поля _id отсутствует во вставляемом документе, сервер генерирует значение _id. Сгенерированное значение _id для документа возвращается клиенту в рамках объекта Result (Result для Connector/J) операции add(). Если вы используете X DevAPI в InnoDB Cluster, автоматически сгенерированный _id должен быть уникальным для всего кластера. Установив уникальное значение для каждого экземпляра кластера, вы можете гарантировать уникальность идентификаторов документов во всех экземплярах.
Поле _id должно быть последовательным (всегда увеличивающимся) для оптимальной производительности вставки в InnoDB (по крайней мере, в рамках одного сервера). Последовательность значений _id сохраняется после перезагрузки сервера.
В многоглавном окружении Group Replication или InnoDB Cluster сгенерированные значения _id таблицы уникальны для каждого экземпляра, чтобы избежать конфликтов первичных ключей и минимизировать подтверждение транзакций.
Генерация идентификаторов документов
В этом разделе описывается формат идентификаторов документов.
Формат автоматически сгенерированного идентификатора документа:
| unique_prefix | start_timestamp | serial |
|---|---|---|
| 4 байта | 8 байт | 16 байт |
Где:
unique_prefix— значение, назначенное InnoDB Cluster экземпляру, которое используется для обеспечения уникальности идентификатора документа в рамках всех экземпляров одного кластера. Диапазон значенийunique_prefixот 0 до 216-1, представлен в шестнадцатеричном формате. Значение по умолчанию — 0, если оно не установлено ни InnoDB Cluster, ни системной переменной.start_timestamp— отметка времени запуска экземпляра сервера, представлена в шестнадцатеричном формате. В маловероятном случае переполнения значенияserialзначениеstart_timestampувеличивается на 1, а значениеserialвозвращается к 0.serial— автоматически увеличивающийся целочисленный порядковый номер значения для каждого экземпляра, представлен в шестнадцатеричном формате и имеет диапазон от 0 до 264-1. Начальное значениеserialустанавливается системной переменной, а шаг увеличения значения устанавливается системной переменной.
Этот формат идентификатора документа гарантирует, что:
Значение первичного ключа монотонно увеличивается для вставок, исходящих из одного экземпляра сервера, хотя интервал между значениями не является однородным внутри таблицы.
При использовании многоглавного Group Replication или InnoDB Cluster вставки в одну и ту же таблицу из разных экземпляров не имеют конфликтующих значений первичного ключа, при условии, что у экземпляров правильно настроены системные переменные и (см. описания переменных для получения подробной информации).
© 2025 Oracle
Licensed under the GPLv2 License.