Можно ли хранить идентификатор пользователя в качестве ключа поля в документе Firestore? - PullRequest
0 голосов
/ 19 января 2019

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

Например, в коллекции «рейтинги» я разделяю индивидуальные оценки, которые каждый пользователь присваивает различным документам, используя созданный мной сложный механизм разбиения, который заполняет документ до максимума.размер документа около 20К, затем начинается заполнение другого документа.скажем, у меня есть 5 документов, каждый заполнен 20k полей.Один из этих документов будет выглядеть так:

uid1: 3.3
uid2: 5
uid3: 1.234
...

Есть ли другая структура, которую я должен использовать для хранения множества отдельных «полей» в Firestore?Я не хочу использовать множество документов для каждого рейтинга, так как это слишком дорого.Массивы недостаточно велики, чтобы хранить множество рейтингов.

1 Ответ

0 голосов
/ 19 января 2019

Массивы недостаточно велики для хранения множества рейтингов

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

Максимальный размер документа: 1 МБ (1 048 576 байт)

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

Согласно официальной документации по данным моделирования в Cloud Firestore :

Cloud Firestore оптимизирован для хранения больших коллекций небольших документов.

Так что пытаться разделить коллекцию, заполняя документы один за другим, не очень хорошая идея.

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

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

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