Как лучше всего хранить огромные объемы текста (в БД или в виде файла?) и как насчет его сжатия?

Я создаю веб-приложение, которое обрабатывает внутренние электронные письма и другие частые небольшие и средние фрагменты текста между пользователями и клиентами. Каков наилучший способ хранения этих данных? В базе данных (MySQL) или в виде тысяч отдельных файлов? Как насчет его сжатия (функция PHP gzcompress() или функции сжатия MySQL)?

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

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

Спасибо, Сет.

Изменить для уточнения: мне не требуется какой-либо поиск текста, поэтому я склоняюсь к его сжатию, чтобы сэкономить место.


person Seth    schedule 02.02.2009    source источник


Ответы (4)


Для изображений и документов, которые уже находятся в определенном формате (Excel, документы Word, файлы PDF и т. д.), я предпочитаю хранение файлов. Но для простого текста я, вероятно, предпочел бы использовать базу данных. Легче выполнять репликацию между машинами для аварийного переключения, вы можете выполнять поиск подстрок по тексту, и хотя я не знаю конкретного алгоритма, который можно использовать для его сжатия, я думаю, что база данных будет лучшим способом. Но только если у вас уже есть только текст и это только текст. Любой другой формат документа я бы предпочел использовать для хранения файлов.

И если я что-то упустил, я бы использовал CLOB вместо BLOB, если это только текст.

person Ryan Guill    schedule 02.02.2009

Одной из основных причин хранения файлов в базе данных является обеспечение ее согласованности с остальными данными, которые вы храните. Будет проще делать резервные копии, (повторно) развертывать с предопределенными наборами данных и т. д. Кроме того, легче гарантировать целостность транзакций.

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

person Simon Groenewolt    schedule 02.02.2009

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

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

person maskefjes    schedule 02.02.2009

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

person Riho    schedule 03.02.2009