Что лучше между root узлами и узлами пространств имен в базе данных реального времени? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть вопрос о моделировании базы данных в реальном времени

У меня много данных, касающихся "пользователей", и я хотел бы использовать:

1.nodes в качестве пространств имен, таких как:

    /users/accounts/{ids}
    /users/profiles/{ids}
    /users/records/{ids}
root узлов, таких как:
    /usersaccounts/{ids}
    /usersprofiles/{ids}
    /usersrecords/{ids}

Для 1 я хотел бы знать, работает ли фильтр по ссылке, указанной в запросе, или по всем '/users' узлам?

Например, я хочу фильтровать данные '/users/accounts' только тогда, когда это необходимо, а не на всех '/users' узлах для получения отфильтрованных 'accounts' данных.

Как лучше всего подходить между 1 и 2?

А как насчет производительности?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Нет существенной разницы между двумя подходами, которые вы описали. Похоже, что оба моделируют плоские списки одной сущности, и неважно, делаете ли вы это как верхний уровень или один уровень ниже.

Что делает , если разница вы бы вложили разные типы сущностей в один динамический c узел.

/users/{ids}/accounts
/users/{ids}/profiles
/users/{ids}/records

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

1 голос
/ 15 апреля 2020

Если у вас есть эта база данных:

users
  accounts
      randomId
           accNum: 1234
      randomId
           accNum: 1234
  profiles
      randomId
           profile: 124
      randomId
           profile :125

Используйте эту схему, если под каждым узлом будет много данных, поэтому если profile или accounts будет иметь много данных для каждого пользователя , затем используйте это. Также, если вы хотите запросить данные внутри accounts или внутри profile, то вам следует использовать эту схему.

Например:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
ref.child("accounts").orderByChild("accNum").equalTo(1234) //1
ref.child("profiles").orderByChild("profile").equalTo(124) //2

1 - будет фильтроваться в соответствии с accNum внутренние учетные записи

2- будут фильтроваться в соответствии с профилем. внутренние профили


По сути, первая и вторая схемы близки друг к другу, но если вы хотите извлечь все внутри users узел, затем используйте эту схему.

...