Подтвердить что ты не робот

Лучший способ хранить сообщения чата в базе данных?

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

Может ли кто-нибудь рекомендовать более масштабируемое решение mysql? Я не требую, чтобы отдельные сообщения были доступны для поиска, редактирования или удаления. Может ли весь разговор храниться в одном огромном поле?

Хотелось бы услышать ваши идеи!

4b9b3361

Ответ 1

Нет ничего плохого в сохранении всей истории в базе данных, они готовы к таким задачам.

На самом деле вы можете найти здесь в Qaru ссылку на примерную схему для чата: пример

Если вы все еще беспокоитесь о размере, вы можете применить некоторые оптимизации для группировки сообщений, например, добавить буфер в приложение, который вы только нажимаете через некоторое время (например, 1 минуту или около того); таким образом, вы избегаете иметь только 1 сообщение строки

Ответ 2

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

Просто добавьте конвертацию в текстовый файл (1 файл на пользователя\разговор).

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

Я думаю, вам будет трудно получить более простое масштабируемое решение.

Вы можете использовать LOAD_FILE, чтобы получить данные: см. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

Если у вас есть требование перестроить разговор, вам нужно будет добавить значение вместе с отправленным сообщением чата (в файле), чтобы вы могли объединять и сортировать файлы.

Ответ 3

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

Проблема по-прежнему заключается в том, что в одной базе данных могут быть большие разговоры (с большим количеством сообщений). например у вас есть база данных A и база данных B, каждая из которых хранится, например. 1000 разговоров. Возможно, что на сервере A гораздо больше "больших" разговоров, чем на сервере B (так как это созданный пользователем контент). Вы можете добавить "основную" базу данных, содержащую поиск, на основе которой можно найти одиночные разговоры (или у вас есть схема для назначения базы данных из хэша/модуля или чего-то еще).

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