2016-02-04 2 views
2

Я собираюсь создать чат-приложение с AWS DynamoDB. Приложение будет поддерживать 1: 1 и групповые чаты.Хранение чата Log on AWS DynamoDB?

Я хочу создать одну таблицу для каждой из чатов, где есть запись для каждой отправляемой текстовой строки чата. Является ли DynamoDB подходящим для такого рода работ?

Я также думаю о слиянии обеих таблиц. Но разве это хорошая идея, если есть - предположим - 100 тыс. Или 1000 тыс. Пользователей?

ответ

1

Я думаю, что у вас могут возникнуть проблемы с емкостью чтения на вашем столе. Емкость записи должна быть в порядке, поскольку в секунду не так много сообщений (например, 10 или около того), но вам нужно постоянно читать их для всех пользователей, так что это будет дорого.

Если вы хотите использовать DynamoDB как хранилище и распространять чат-сообщения, как в любом обычном чате по сети, то это может иметь смысл, в зависимости от ваших вариантов использования. Вы могли бы, предположив, что у вас есть хэш-ключ UserId и Timestamp, запрашивать все сообщения от определенного пользователя в течение определенного периода в результате. Если вы хотите, однако, искать в тексте чата (возможно, гораздо более полезную функцию), то DynamoDB не будет работать сам по себе. Это не похоже на SQL, где вы можете сделать запрос LIKE '%abc%' (что тоже не очень полезно в SQL).

Возможно, вам лучше использовать S3 в качестве хранилища данных и ElasticSearch в качестве инструмента поиска. Если вам требуется вышеупомянутый вариант использования «получить все сообщения от пользователя X в timespan S» (в качестве простого примера), вы можете дополнительно использовать DynamoDB для хранения метаданных, таких как UserId, Timestamp, PositionInFile или что-то в этом роде.

+0

Спасибо. Как я могу хранить его на S3? Как файл для каждого чата? – MJQZ1347

+0

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

+0

Не уверен, что S3 полезен, но я согласен, что DynamoDB не будет хорошей возможностью делать подобные вещи –