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

StackOverflow https://stackoverflow.com/questions/504544

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top