Лучшая практика для избранного в приложении - PullRequest
0 голосов
/ 25 января 2020

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

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

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

Редактировать:

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

posts {
    post-1-UID {
        title: "post1",
        text: "blah"
    },
    post-2-UID {
        title: "post2",
        text:"blahblah" 
    }
},
users {
    user-1-UID {
        name: "User1",
        email: "user1@email.com"
    },
    user-2-UID {
        name: "User2",
        email: "user2@email.com"
    }
},
favoritedPostIds {
    user-1-UID {
        post-2-UID: "2019-11-19T19:12:51.240GMT-05:00"
    },
    user-2-UID {
        post-1-UID: "2019-10-16T19:10:57.340GMT-05:00",
        post-2-UID: "2019-11-24T11:21:05.610GMT-05:00"
    }
}

1 Ответ

0 голосов
/ 25 января 2020

после нескольких лет и тысяч фаворитов, я думаю, это может стать проблемой для данных, памяти и обработки

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

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

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