#javascript #firebase #firebase-realtime-database #nosql
#javascript #firebase #firebase-realtime-database #nosql
Вопрос:
Я впервые структурирую данные в базе данных firebase.
Я понял, что я должен оптимизировать операции чтения и денормализовать.
У меня есть список проектов и список пользователей. Кроме того, у каждого пользователя есть список проектов, связанных с ним.
У меня нет проблем с чтением и отображением данных. Но, если мне нужно отредактировать название конкретного проекта, я не знаю, как это сделать правильно.
Имея ключ этого проекта, я могу обновить его с помощью projects/key/name
, но я также должен обновить имя в проектах, связанных с каждым пользователем. Я пробовал использовать users/*/key
, но ничего не произошло.
Я использую firebase с javascript в базовом веб-приложении.
Изначально у меня было true
значение для всех проектов внутри users
узла (вместо имени). При таком подходе мне просто нужно обновить в projects
узле, но я должен выполнить несколько операций чтения.
Заранее благодарю.
Ответ №1:
Для этого вам понадобятся два индекса:
-
чтобы найти проекты для пользователя (у вас уже есть это)
-
чтобы найти пользователей для проекта
Я бы сохранил два списка поиска как списки верхнего уровня:
users
$uid
admin: true
projects
$projectid
name: "Name of project"
description: "Description of project"
userProjects
$uid
$projectid: "Name of project"
projectUsers
$projectid
$uid: true
С помощью этой структуры вы можете искать все, что вам нужно, без необходимости запускать дорогостоящий запрос.
Когда вы обновляете название проекта, вы просто загружаете пользователей проекта, а затем повторяете это. Если вам захочется, вы даже можете использовать многопозиционный update()
, чтобы обновить их все за один раз. Подробнее об этом читайте в этом сообщении в блоге:https://firebase.googleblog.com/2015/10/client-side-fan-out-for-data-consistency_73.html