Датамодель для чата в Firestore - PullRequest
0 голосов
/ 31 октября 2018

Итак, я прочитал всю официальную документацию, касающуюся Firestore, и понимаю все основы и большинство продвинутых тем. Но в конце концов я задал два вопроса:

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

  • Давайте возьмем известный пример чата и рассмотрим множество групп чатов (например, WhatsApp). Когда пользователь открывает чат, он может видеть информацию о чате и участниках этого чата. Но вот тут возникает мой второй вопрос: не означает ли показ участников чата, что, когда кто-то открывает чат, будет загружаться другая коллекция, содержащая указанное имя пользователя и его имя? Если у вас есть группа «WhatsApp» с 10 людьми в ней, это будет означать 11 чтений (одно для самой группы, 10 для изображения / имени участников) всякий раз, когда кто-либо открывает группу. Давайте расширим эту идею и сделаем группы общедоступными, что приведет к безумному количеству операций чтения, просто чтобы увидеть основную информацию о группе. Поскольку Firestore взимает плату за чтение, это очень быстро взорвется, не так ли?

1 Ответ

0 голосов
/ 31 октября 2018

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

Максимальная глубина вложений: 100

По вашему вопросу:

Есть ли преимущество использования подколлекций над коллекциями корневого уровня?

Насколько я знаю, Firestore может так же быстро найти узел на уровне 1, как и на уровне 100. Поэтому для обычной базы данных глубина не должна быть фактором, влияющим на скорость на техническом уровне. ИМХО, лучше, чтобы данные были как можно более плоскими.

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

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