Какое самое масштабируемое и эффективное решение для хранения журналов чата в базе данных Firebase в реальном времени? - PullRequest
0 голосов
/ 30 августа 2018

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

enter image description here

Это работает потрясающе. Я пытаюсь думать заранее, хотя, если мы хотим, чтобы несколько человек говорили вместе, как в покое. Я мог бы просто добавить 3 или даже 4 человека в качестве ключа, но в конечном итоге это будет безумно долго. Ограничение ключа firebase составляет 768 байт. Видимо, это где-то между 500 и 700 символов. Я сомневаюсь, что у нас будет такой длинный ключ, но если мы сможем найти решение, которое будет более масштабируемым сейчас и не потребует от нас исправления наших данных позже, я бы предпочел это сделать. Я думал, что каждая запись чата может иметь массив участников с идентификаторами всех пользователей в этом чате. Затем, если вы хотите пообщаться с кем-то, нам нужно запросить все записей чата и проверить массивы в каждой из них на текущий uid пользователя и uid людей, с которыми они хотят общаться. , Это, кажется, не очень эффективно.

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

1 Ответ

0 голосов
/ 30 августа 2018

Как насчет простого использования хэша результирующей конкатенации UID?

В качестве альтернативы:

  1. Придумайте свой собственный уникальный ключ от номера, например, используя push ID.
  2. создайте новый узел верхнего уровня с chatroom-keys и сохраните объединенный UID в качестве значения:

    Chatroom-ключи push-id1: uid1-uid2-uid3 push-id2: uid1-uid2-uid3-uid4-uid5-uid6 push-id3: uid3-uid4-uid5-uid6-uid7-uid8-uid8-uid10

В этой структуре вы можете найти ключ от комнаты для набора участников по:

firebase.database().ref("chatroom-keys").orderByValue().equalTo("uid1-uid2-uid3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...