Как я могу сделать собственные автоматически сгенерированные идентификаторы для документов в FireStore - PullRequest
0 голосов
/ 20 апреля 2019

Для моего проекта мне нужны идентификаторы, которыми можно легко обмениваться, поэтому автоматически сгенерированные идентификаторы firestores не будут работать.
Я ищу способ автоматической генерации идентификатора, например 8329423, который будет увеличен или случайно выбран в диапазоне от 0 до 9999999.

1 Ответ

1 голос
/ 20 апреля 2019

Поля автоматического идентификатора Firestore предназначены для статистической гарантии того, что никакие два клиента никогда не сгенерируют одно и то же значение.Вот почему они такие же длинные: они гарантируют, что в них достаточно случайности (энтропии).

Это позволяет Firestore полностью определять эти ключи на стороне клиента без необходимости поиска на сервере.был ли сгенерированный ключ уже сгенерирован ранее на другом клиентеА это, в свою очередь, имеет следующие основные преимущества:

  1. Поскольку ключи генерируются на стороне клиента, они также могут генерироваться, когда клиент не подключен к какому-либо серверу.
  2. Посколькуключи генерируются на стороне клиента, для генерации нового ключа нет необходимости в обратном направлении на сервер.Это значительно ускоряет процесс.
  3. Поскольку ключи генерируются на стороне клиента, между клиентами, генерирующими ключи, нет разногласий.Каждый клиент просто генерирует ключи по мере необходимости.

Если эти преимущества важны для вашего сценария использования, вам следует тщательно продумать, можете ли вы создать лучший уникальный идентификатор, чем это делает Firestore.Например, идентификаторы Firestore имеют 62 ^ 20 уникальных значений, поэтому статистически гарантировано, что они никогда не будут генерировать одно и то же значение в течение очень длительного периода времени.Предложенный диапазон от 0 до 9999999 имеет 1 миллион уникальных значений, что, скорее всего, приведет к созданию дубликата.

Если вы действительно хотите использовать эту схему для идентификаторов, вам нужно будет сохранить идентификаторы, которые вы уже далина сервере (вероятно, в Firestore), так что вы можете проверить его при создании нового ключа.Очень распространенный способ сделать это - сохранить счетчик последнего идентификатора, который вы уже получили в документе.Для создания нового уникального идентификатора вы:

  1. Считываете последнее значение счетчика из документа.
  2. Увеличиваете счетчик.
  3. Записываете обновленное значение счетчика вdocument.
  4. Используйте обновленное значение счетчика в своем коде.

Поскольку эта операция чтения-обновления-записи происходит от нескольких клиентов, вам потребуется использовать транзакцию для нее.Также обратите внимание, что клиенты теперь координируют генерацию ключей, поэтому вы будете испытывать ограничения пропускной способности для количества ключей, которые вы можете сгенерировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...