Лучший способ хранения сообщений и файлов чата

Я хотел бы знать, что вы думаете о сохранении сообщений чата в базе данных?

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

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

С тысячами сообщений и файлов я задаюсь вопросом о снижении производительности и размере базы данных.

Как вы думаете, учитывая, что я использую PHP с MySQL / Doctrine?

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

Но в отношении двоичной информации, такой как изображения и файлы, было бы лучше сохранить их в файловых системах и хранить только их пути в базе данных, потому что будет дешевле их считывать с дисков, которые связывают процесс базы данных с чтением мульти- мегабайтный файл.

Как я уже сказал, важно, чтобы вы сделали несколько вещей:

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

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

  3. Создайте надлежащие индексы – очень важно для производительности, особенно для приложений с быстро растущими большими базами данных.

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

Я думаю, что база данных NoSQL, такая как CouchDB или MongtoDB, является опцией. Вы также можете хранить файлы отдельно и связывать их через известное имя файла, но это зависит от вашей системной архитектуры.