Проблема
Я довольно плохо знаком с дизайном баз данных NoSQL и хочу использовать Google Cloud Firestore для нового приложения, которое я создаю.Выглядит просто и аккуратно.
В моей модели данных у меня есть users
и pages
.Пользователь может иметь много страниц.Пользователи могут связать свои учетные записи с другими пользователями (думать, как семейный план).Связанные пользователи будут иметь одного лидера, а все остальные пользователи будут подписчиками.Благодаря такому дизайну все подписчики получают доступ к страницам лидера.Подписчики могут создавать, читать, обновлять и удалять страницы от имени лидера.Как чистый эффект, все связанные пользователи разделяют страницы.Я думаю, что структура будет выглядеть следующим образом.
/database/
users/
[user-doc]
pages/
[page-doc]
Ограничения, которые помогут решить проблему
- Я предполагаю начать примерно с 10 до 50 тысяч пользователей, возможно, преодолев 100 тысяч позже.
- Я предполагаю, что каждый пользователь имеет в среднем около 30-40 страниц.
- Я ограничу количество связанных пользователей максимум 5 пользователями.То есть один лидер и четыре последователя.
Вещи, которые меня интересуют ...
Я хотел бы подтвердить одну вещь: этот дизайн хорош, особенно в контекстеCloud Firestore.
Для правил безопасности, когда пользователь хочет выполнить R / U / D и page
документ, его права проверяются путем проверки наличия у user
этого page
, или если user
является учетной записью типа «подписчик», а лидер - владельцем page
.Справедливо ли это?
Каждый идентификатор документа page
будет автоматически сгенерирован Firestore (, как указано здесь ).Чтобы получить все страницы, принадлежащие user
(или связанному лидеру), это так же просто, как запросить db.collection("pages").whereEqualTo.("page-owner", uid)
?Где uid
- уникальный идентификатор пользователя.Если будет 100 000 пользователей, а у каждого пользователя по 40 страниц, будет ли этот запрос эффективным?
Я действительно ценю этот ввод!Спасибо!