Использование автоматически сгенерированного идентификатора документа Firestore по сравнению с использованием собственного идентификатора - PullRequest
0 голосов
/ 27 мая 2019

В настоящее время я выбираю свою структуру данных Firestore.

Мне понадобится коллекция products, и элементы products будут жить внутри нее как документы.

Вот мои поля продукта :

  • uniqueKey: строка
  • описание: массив строк
  • изображения: массив объектов
  • цена: номер

ВОПРОС

Должен ли я использовать автоматически сгенерированные идентификаторы Firestore для ID моих документов, или лучше использовать мой uniqueKey (который я буду запрашивать во многих случаях) в качестве идентификатора документа? Есть ли лучший вариант между 2?

Я полагаю, что если я воспользуюсь своим uniqueKey, это облегчит мою жизнь при получении одного документа, но мне также придется во многих случаях запрашивать более 1 продукта.

Использование моего uniqueKey в качестве ID:

db.collection("products").doc("myUniqueKey").get();

Использование моего Firestore автоматически сгенерированного ID:

db.collection("products").where("uniqueKey", "==", "myUniqueKey").get();

Достаточно ли причины, чтобы использовать мой uniqueKey вместо автоматически сгенерированного? Есть ли здесь эмпирическое правило? Какова лучшая практика в этом случае?

1 Ответ

8 голосов
/ 27 мая 2019

С точки зрения выполнения запросов от клиента, используя только ту информацию, которую вы указали в вопросе, я не вижу большой практической разницы между получением документа с использованием его известного идентификатора или запросом в поле, котороетакже уникален.В любом случае, на стороне сервера используется индекс, и он стоит ровно 1 прочитанный документ.Документ get () может быть немного быстрее, но не стоит так оптимизировать (по моему мнению).

При принятии решения о моделировании данных, как это, более важно думать о таких вещах, как поведение системы вправила загрузки и безопасности.

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

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

В любом случае решение, которое вы принимаете,не только о том, какой идентификатор «лучше» в общем смысле, но и о том, какой идентификатор лучше для вашей конкретной, ожидаемой ситуации, под нагрузкой, с учетом безопасности .

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