Я создаю приложение для чата, и мне нужна полная история всех сообщений, когда-либо отправленных в чате. На данный момент я храню каждое сообщение в виде отдельной строки в таблице под названием «сообщения». Я знаю, что эта таблица может вырасти до огромных размеров, поскольку даже небольшие сообщения вроде «Привет» будут иметь свою собственную запись в базе данных.
Может ли кто-нибудь порекомендовать более масштабируемое решение mysql? Я не требую, чтобы отдельные сообщения были доступны для поиска, редактирования или удаления. Можно ли сохранить весь разговор в одном огромном поле?
Хотелось бы услышать ваши идеи!
mysql
scalability
chat
Wilsonpage
источник
источник
Ответы:
Нет ничего плохого в том, чтобы сохранить всю историю в базе данных, они подготовлены к такого рода задачам.
На самом деле вы можете найти здесь, в Stack Overflow, ссылку на пример схемы для чата: example
Если вас все еще беспокоит размер, вы можете применить некоторые оптимизации к групповым сообщениям, например, добавить буфер в ваше приложение, который вы нажимаете только через некоторое время (например, 1 минуту или около того); таким образом вы избежите только однострочных сообщений
источник
Если вы можете избежать необходимости одновременной записи в один файл, похоже, вам не нужна база данных для хранения сообщений чата.
Просто добавьте беседу в текстовый файл (по 1 файлу на пользователя \ беседу). и иметь структуру каталогов / файлов
Вот упрощенный вид файловой структуры:
chat-1-bob.txt 201101011029, hi 201101011030, fine thanks. chat-1-jen.txt 201101011030, how are you? 201101011035, have you spoken to bill recently? chat-2-bob.txt 201101021200, hi 201101021222, about 12:22 chat-2-bill.txt 201101021201, Hey Bob, 201101021203, what time do you call this?
Тогда вам нужно будет сохранить только идентификатор пользователя, идентификатор разговора (guid?) И ссылку на имя файла.
Думаю, вам будет сложно получить более простое масштабируемое решение.
Вы также можете использовать
LOAD_FILE
для получения данных: http://dev.mysql.com/doc/refman/5.0/en/string-functions.htmlЕсли у вас есть требование перестроить разговор, вам нужно будет указать значение (дату и время) рядом с отправленным сообщением чата (в файле), чтобы вы могли объединить и отсортировать файлы, но на данный момент это, вероятно, хорошая идея рассмотреть возможность использования базы данных.
источник
Вы можете создать базу данных для x разговоров, которая содержит все сообщения этих разговоров. Это позволит вам добавлять новую базу данных (или сервер) каждый раз, когда x превышает. X - это количество разговоров, поддерживаемых вашей инфраструктурой (в зависимости от вашего оборудования, ...).
Проблема по-прежнему в том, что в одной и той же базе данных могут быть большие разговоры (с большим количеством сообщений). например, у вас есть база данных A и база данных B, каждая из которых хранит, например, 1000 разговоров. Возможно, что на сервере A гораздо больше «больших» разговоров, чем на сервере B (поскольку это контент, созданный пользователем). Вы можете добавить «главную» базу данных, которая содержит поиск, в какой базе данных / сервере можно найти отдельные разговоры (или у вас есть схема для назначения базы данных из хэша / модуля или чего-то еще).
Может быть, вы сможете найти реальные архитектуры, которые решают те же проблемы (возможно, вы не первый), и которые уже были решены.
источник