Пагинация комментариев с помощью Firebase Firestore - PullRequest
0 голосов
/ 06 августа 2020

В своем приложении я пытаюсь реализовать комментирование сообщения.

Я использую Flutter с Firebase в качестве бэкэнда.

В настоящее время у меня есть коллекция в Firebase: 'Сообщения 'где информация о записи хранится в документе в этой коллекции. Я хочу разрешить пользователям добавлять комментарии к сообщениям. Моя первоначальная мысль - добавить в почтовый документ массив со всеми данными комментариев.

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

Я придумал 2 способа сделать это, но у обоих есть компромиссы, когда дело доходит до цены на firebase модель, как я ее понимаю, и, надеюсь, есть лучшее решение, о котором я не думал.

1-я идея: для каждого сообщения добавьте коллекцию комментариев. В коллекции каждый комментарий - это документ. Это упростило бы разбиение на страницы, просто запрашивая документы комментариев с помощью инструментов разбиения на страницы firebase. Моя проблема с этой идеей: Firebase взимает с вас плату каждый раз, когда вы пишете / читаете документ (~ 0,12 доллара США / 100 тыс.). Это был бы самый дорогой метод с точки зрения записи документов.

Вторая идея: иметь 1 документ, в котором хранятся все комментарии к данному посту. Поэтому мне нужно было бы читать / писать только один документ (избегая затрат), но я не смог бы разбить данные комментария на страницы, если бы все они были в одном документе (поправьте меня, если я ошибаюсь), и я бы набрал больше плата за сетевой трафик c (0,01 доллара США), поскольку я отправляю пользователю все данные комментариев, даже если они не используют их (также взимая с них плату за их личный тарифный план).

Я новенький в Firebase / Firestore, поэтому я прошу здесь посмотреть, не упускаю ли я чего-то в своих решениях, и (надеюсь) есть третье лучшее решение этой проблемы. Мне кажется, что 1-й вариант чище и проще, но, честно говоря, я мало что знаю.

...