Архитектура базы данных Firebase - Snapchat, как - PullRequest
0 голосов
/ 17 октября 2019

Я хочу создать приложение с Firebase.

У меня есть две основные цели для этого приложения:

  1. Получить дружеские отношения
  2. Отправить изображение другу

В моей базе данных Firestore есть коллекция «users» с идентификатором пользователя в качестве документа и идентификатором и адресом электронной почты в поле. (пользователи> id> id, электронная почта). Когда пользователь регистрируется, я отправляю информацию в базу данных.

        db.collection("users").document(currentUser.uid).setData([
            "id": currentUser.uid,
            "email": currentUser.email ?? ""
        ]) { err in
            if let err = err {
                print("Error writing document: \(err)")
            } else {
                print("Document successfully written!")
            }
        }

Я думаю, что если я хочу позаботиться о дружеских отношениях, мне нужно добавить коллекцию внутри документа user (users> id> id, email (fields)) ... friendsRelationship (collection)> id (пользователи добавлены в качестве поля)).

И добавить это в документ другого пользователя с идентификатором пользователя (targetUser) -> двунаправленный.

Когдаодин пользователь удаляет другого, мы должны удалить идентификатор в коллекции friendsRelationship из currentUser и targetUser.

Есть ли какое-либо другое решение / лучшая архитектура базы данных, которую можно использовать для дружеских отношений в Firebase?

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

Iпредпочтительнее пользователи> id> images (collection)> url, date (fields) ... или images> id (Генерируемый)> fromUser (id), toUserId (collection)> id?

Какзапросить все изображения, полученные текущим пользователем? Например, db.collection("users").document(currentUser.uid) ...

Вот снимок экрана с моей базой данных Cloud Firestore: https://imgur.com/4bGJOoP

Я не знаю, как управлять отношениями с друзьями с этим, и публиковать как snapshat, когда firstUser отправляетоснастка другому пользователю.

Спасибо за совет!

1 Ответ

1 голос
/ 21 октября 2019

Я думаю, что если я хочу позаботиться о дружеских отношениях, мне нужно добавить коллекцию внутри документа user (users> id> id, email (fields) ... friendsRelationship (collection)> id (пользователи добавлены как)).

Мне хорошо подходит способ хранения пользовательских данных.

Есть ли какое-либо другое решение / лучшая архитектура базы данных, которую можно использовать для дружеских отношений в Firebase? ?

Что касается отношения firends, существует еще одно возможное решение, которое не требует создания вложенной коллекции, вы можете просто добавить каждый идентификатор друга в массив в пользовательском документе. Новая схема может выглядеть так:

Firestore-root
   |
   --- users
        |
        --- uid
             |
             --- email: "name@email.com"
             |
             --- id: "userId"
             |
             --- friendIds: ["friendIdOne", "friendIdTwo", "friendIdThree"]

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

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

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

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

И добавить это в другой идентификатор документа пользователя user (targetUser) -> двунаправленный.

Чтобы иметь двунаправленное отношение, в решении выше,Вам просто нужно скопировать friendId в пользовательский массив friendIds и userId в массив friendIds друга.

Когда один пользователь удаляет другого пользователя, мы должны удалить идентификатор вколлекция friendsRelationship от currentUser и targetUser.

В приведенном выше решении необходимо удалить userId из массива friendIds и friendId из массива friendIds пользователя.

Я бы лучше сделал пользователей> id> images (collection)> url, date (fields) ... или images> id (Генерируемый)> fromUser (id), toUserId (collection)> id?

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

Как запросить все изображениячто текущий пользователь получил? Как db.collection ("users"). Document (currentUser.uid) ...

Да, получая ссылку на документ пользователя:

db.collection("users").document(currentUser.uid)

И затем читаямассив images.

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