2016-01-18 4 views
0

Я новичок в Couchbase, Я хотел бы понять, как моделировать хранение миллиардов сообщений чата, происходящих из обычного приложения IM в Couchbase. Каким будет правильный способ моделирования этого в Couchbase? Предположим, 10000 новых сообщений/сек вставки и 40000 обновлений на эти 10000 сообщений/сек. Предположим, один-один чат в качестве основного варианта использования, хотя у каждого человека будет много приятелей - в значительной степени как WhatsappDB Дизайн для сообщений с большим объемом сообщений

Спасибо, оцените всю обратную связь.

** Обновление: **

Спасибо за ваш ответ, вот мой дизайн базы данных:

enter image description here

Пример хранилища данных на Couchbase (документ магазина):

документ Пользователь:

123_user => {"id": 123, "friend_ids": [456, 78 9, ...], "сессия": "123asdcas123123qsd"}

документ История сообщений (CHANNEL_NAME = userid1 + "-До-" + userId2)

123-к-456_history => {» CHANNEL_NAME ": "123-к-456", "message_ids"=> [" 545_message, 999_message, .... "]}

документ Message:

545_message => {" ID»: 545, client_id: 4143413, from_uid: 123, «to_uid»: 456, «body»: «Hello world», «create_time»: 1243124124, «state»: 1}

есть проблема здесь, когда message_ids поле на История сообщений магазин миллионов или миллиард Идентификаторы сообщений, это действительно большая проблема при чтении и записи истории сообщений. Может ли кто-нибудь дать мне решение этой проблемы?

+0

Каковы ваши типичные операции? Вставить новое сообщение в комнату чата? Получать ряд сообщений для определенного номера комнаты чата? –

+0

Это очень зависит от потока данных вашего приложения и бэкэнд-процессов. Как спросил Ади, не могли бы вы описать, как выглядят/будут выглядеть ваши шаблоны доступа к данным? У вас есть ограничения на задержку в дополнение к описанной пропускной способности? Каковы наиболее распространенные операции с данными? –

+0

Спасибо за ваш ответ, я просто описал дальнейшие вопросы на стороне –

ответ

0

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

Индивидуальное приложение чата может использовать каждую пару чатов в качестве первичного ключа.

Например, Bob-to-Jack, они болтают:
1. «привет!»;
2. «Идите на отдых?»;
3. «Нет, я сейчас занят»;
...

Вы введете новую запись с первичным ключом «Боб-Джек» и оцените «привет, идите на отдых, нет, ....».

Если разговор остановлен, эта запись перестанет расти и храниться для будущего использования.

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

Длина значения увеличивается, если она превышает некоторый порог, вы разделите ее на две записи. Так как многие системы БД имеют ограничение по размеру для одной записи.

Один парень имеет много приятелей, поэтому в реальном мире есть миллиарды пар (ключей), каждая пара - длинный разговор (значение). Решения No-sql являются хорошим выбором для этого объема данных.

Тогда вы можете знать, способен ли CouchBase выполнять такую ​​задачу. Я думаю, что это нормально, но не единственный выбор.

+0

Спасибо за ваш ответ, я просто описал дополнительные вопросы на стороне. –

+0

@Nam Vạc, после вашего обновленного контента, я заметил, что модель пытается дать каждому короткому разговору идентификатор сообщения, а затем в случае чата 123 на 456 он может потреблять десятки идентификаторов сообщений, общая база данных будет легко имеет миллиарды записей. Это неэффективно и неэффективно. Альтернативный способ хранения сообщений состоит в объединении десятков (сотен) сообщений от 123 до 456 вместе, то есть они совместно используют один идентификатор сообщения и сохраняются вместе для меньшего доступа к диску. Это значительно уменьшит размер базы данных, что означает быстрый поиск, поскольку миллиарды сообщений сокращаются до десятков миллионов. –

+0

делят один идентификатор сообщения и хранятся вместе для меньшего доступа к диску. Не могли бы вы рассказать мне больше о своей идее? большое спасибо. –