Firebase Cloud Firestore Дизайн базы данных социальной сети

#firebase #flutter #google-cloud-firestore #nosql

#firebase #трепетание #google-облако-firestore #nosql

Вопрос:

У меня есть простой вопрос. Я создаю приложение-клон Instagram и хочу показать каждого пользователя его друзьям. Также они могут видеть список друзей. Я использую подход cloud firestore. Однако я немного смущен тем, как хранить данные друзей пользователя? . Должен ли я создать новую коллекцию в качестве списка друзей

введите описание изображения здесь

введите описание изображения здесь

или я должен хранить данные в коллекции пользователей как массив друзей?

введите описание изображения здесь

В первом подходе я снова создам пользовательские данные, когда какой-либо пользователь добавит нового друга. Я новичок как в firestore, так и в NoSQL, я был бы благодарен, если кто-нибудь сможет объяснить.

Ответ №1:

Я должен прочитать это руководство.Это руководство о MySQL, но для меня это не важно, если вы понимаете это руководство, вы можете применить firebase.

Я оставляю совет ниже.

введите описание изображения здесь

Комментарии:

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

2. Мое мнение, это очень простая структура. Конечно, вы можете делать то, что хотите.

Ответ №2:

Я не собираюсь «отвечать» как таковой, но немного объясню философию NoSQL. Лучший подход — сначала спроектировать ваши запросы (т. Е. То, Что вы хотите получить из базы данных), а затем спроектировать схему вашей базы данных, чтобы сделать получение результатов этих запросов эффективным и доступным. Существует много способов организации данных; вы хотите воспользоваться преимуществами NoSQL «без схемы», чтобы ваша схема соответствовала вашим потребностям, а не наоборот.

Другие вещи, которые следует иметь в виду: DRY менее критичен для NoSQL. Статические данные (т. Е. Никогда или редко изменяющиеся) могут храниться в нескольких местах (например, имя друга может быть в их профиле и в списке друзей), если это экономит чтение и запись (которые являются самым большим фактором затрат).

Итак, как организовать вашу базу данных? Я не знаю; что вы хотите, чтобы ваша база данных делала?

Комментарии:

1. @LeadDramer На самом деле я был доволен своим первым подходом в моем приложении. Но есть одна проблема .. Например: когда я обновляю свой DisplayName, я должен обновлять каждый отдельный документ, на который ссылается мой DisplayName. Я имею в виду, что мне нужно обновить несколько коллекций для одного свойства, и я думаю, что это не очень хорошо для каждого приложения.

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

3. @LeadDramer если пользователь изменяет отображаемое имя или фотографию профиля, я должен обновить как коллекцию сообщений, так и коллекцию друзей, на которые ссылается этот пользователь. Если у пользователя 100 друзей и 5 сообщений, я должен обновить 100 данных в коллекции friendslist и 500 сообщений в коллекции timeline. Я могу использовать для этого функции firebase, но все же я не знаю, хороший ли это способ обновить каждый документ??

4. Не могу ответить «хорошо» — это ваше приложение; вам придется решить, что важно, что вы хотите разрешить своим пользователям делать и т.д. Имеет ли значение для пользователя «старое» изображение или имя? Как часто пользователь меняет имя, изображение или что-то еще? Сначала создайте свое приложение , а затем создайте свою базу данных.