Firebase Firestore - переписывает ли создание ссылки на документ и ее использование позже другие документы? - PullRequest
2 голосов
/ 26 марта 2019

Согласно документам Firebase, я получаю ссылку на документ, а затем устанавливаю данные документа в Cloud Firestore.

// Add a new document with a generated id.
   var newCityRef = db.collection("cities").doc();

// later...
   newCityRef.set(data);

Однако в моем приложении сотни документов могут быть написаны одновременно разными пользователями.,Гарантирует ли firebase-firestore, что полученная ссылка на документ не будет повторно использоваться для следующего пользователя?

Например: Пользователь 1 пытается вставить документ, чтобы получить ссылку.Пользователь 2 также пытается вставить документ одновременно.Возможно ли, чтобы пользователь 2 мог также получить ту же ссылку, что и пользователь 1 - поскольку пользователь 1 не завершил свою операцию?

Если ifirestire не справляется с этим, каков правильный способ сделать это?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Когда вы используете следующую строку кода:

var newCityRef = db.collection("cities").doc();

Без передачи какого-либо параметра в функцию doc() это означает, что вы создаете уникальную ссылку на документ в вашей коллекции cities. Столкновения идентификаторов в этом случае невероятно маловероятны. Вот для чего были созданы идентификаторы документов. Так что вам не нужно беспокоиться об этом.

Но обратите внимание, идентификаторы документов Firestore должны быть уникальными в пределах одной коллекции. Они могут быть продублированы в других коллекциях или вложенных коллекциях. Вы можете проверить эту функцию самостоятельно.

Поэтому, пожалуйста, помните, что встроенный генератор уникальных идентификаторов, который используется в Firestore при вызове функции add () CollectionReference или функции doc () CollectionReference, не пропуская никакой параметров, генерирует случайные и крайне непредсказуемые идентификаторы, что предотвращает попадание в определенные горячие точки в серверной инфраструктуре.

Все автоматически сгенерированные идентификаторы документов являются случайными, и вероятность их столкновения практически отсутствует. Клиентский SDK генерирует документ из 20 символов, каждый из которых позволяет:

  • Все строчные буквы
  • Все заглавные буквы
  • Все цифры

Таким образом, существует в общей сложности (26 + 26 + 10) ^ 20 = 7.0e35 возможных комбинаций возможных уникальных идентификаторов, и вы можете / должны предполагать, что они будут полностью уникальными.

1 голос
/ 26 марта 2019

Идентификатор, который вы получаете для newCityRef, уникален во всем мире и отличается от сотен или тысяч идентификаторов документов, которые создаются одновременно вами или другими клиентами.

В документации указано об ссылке, которую вы получаете при вызове функции .doc() без параметра.

Получить DocumentReference для документа в коллекции по указанному пути. Если путь не указан, для возвращенной DocumentReference будет использоваться автоматически сгенерированный уникальный идентификатор .

Каждый вызов db.collection("cities").doc() даст вам уникальную ссылку на документ. Вы можете попробовать это, дважды вызвав функцию и сравнив полученный идентификатор.

В качестве справки о том, как обещают уникальность идентификаторов, вы можете прочитать в статье " 2 ^ 120 способов обеспечения уникальных идентификаторов ", которая была опубликована для push-идентификаторов Firebase. Автоматически сгенерированные идентификаторы Firestore следуют той же философии (исходный код для JS SDK вы можете увидеть здесь ).

Можно с уверенностью сказать, что ссылка на документ каждого пользователя уникальна, и вы можете писать документы одновременно до задокументированных ограничений .

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