Единый запрос DynamoDB для получения как общедоступных, так и частных сообщений чата

Нужны предложения по выбору ключа раздела DynamoDB и ключа сортировки для получения всех общедоступных и личных сообщений в чате.

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

Модель DynamoDB:

For public messages: hashkey - chatId; sortKey - timestamp
For private messages: hashkey - chatId; sortKey - userId#timestamp

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




Ответы (1)


Я подумал, что вам нужно что-то в вашем ключе сортировки, чтобы вы могли использовать Begins_with и получать все сообщения. Что-то вроде mssg :: public :: userID :: timestamp или mssg :: private :: timestamp.

Затем вы можете выполнить запрос, используя chatId в качестве ключа раздела, а затем использовать begin_with mssg для ключа сортировки. Это будет получать все сообщения для этого chatID независимо от того, являются ли они общедоступными или частными. Следующий вопрос: что вы делаете с меткой времени и нужно ли что-то с ней делать в этом же запросе? Вы не упомянули об этом в своем посте, но это есть в модельном примере.

person Kirk    schedule 21.07.2020
comment
Если я использую BEGINS_WITH с mssg, я получу все сообщения (включая личные сообщения других пользователей), верно? И я боюсь, что не смогу хранить общедоступные сообщения с userId. Поскольку количество получателей общедоступных сообщений может быть огромным, я не буду создавать отдельную запись для каждого идентификатора пользователя для общедоступного сообщения. И да, временная метка также потребуется, так как мне нужны мои результаты, отсортированные по временной метке - person Abie; 21.07.2020
comment
у него может не быть userId. для публичного сообщения sortKey может быть только mssg :: public :: timestamp - person Abie; 21.07.2020
comment
Значит, пользователи могут находиться в чате анонимно? Я чувствую, что здесь не хватает важной информации, чтобы помочь. - person Kirk; 21.07.2020