Какой самый экономичный способ хранения больших объемов текста в MySQL?

#mysql #sql #text #full-text-search #huffman-code

#mysql #sql #текст #полнотекстовый поиск #хаффман-код

Вопрос:

Я пишу webcrawler на Python, который будет хранить HTML-код большого набора страниц в базе данных MySQL. Я хотел бы убедиться, что мои методы хранения и обработки являются оптимальными, прежде чем я начну обрабатывать данные. Я хотел бы:

  • Минимизируйте пространство, используемое в базе данных — возможно, путем сокращения HTML-кода, кодировки Хаффмана или какой-либо другой формы сжатия. Я хотел бы сохранить возможность полнотекстового поиска по полю — я не знаю, позволят ли это алгоритмы сжатия, такие как кодировка Хаффмана.

  • Сведите к минимуму использование процессора, необходимое для кодирования и хранения больших объемов строк.

Есть ли у кого-нибудь предложения или опыт в этой или подобной проблеме? Является ли Python оптимальным языком для выполнения этого, учитывая, что для этого потребуется несколько HTTP-запросов и регулярных выражений плюс любое оптимальное сжатие?

Ответ №1:

Если вы не возражаете, что HTML непрозрачен для MySQL, вы можете использовать функцию СЖАТИЯ для сохранения данных и РАСПАКОВКИ для их извлечения. Вы не сможете использовать содержимое HTML в предложении WHERE (используя, например, LIKE).

Комментарии:

1. Какова степень сжатия? Я бы предпочел иметь возможность использовать предложение WHERE, но если COMPRESS экономит достаточно места, возможно, оно того стоит.

2. @MarathonStudios — Я не знаю, какое типичное сжатие для HTML. Это зависит от фактического содержимого и от того, какая библиотека сжатия связана с конкретной установкой MySQL, которую вы используете. Единственное, что я могу предложить, это поэкспериментировать.

Ответ №2:

Вам действительно нужно хранить исходный код в базе данных?

Попытка выполнить запросы типа «LIKE» к данным в любом случае отнимет много времени.

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

(хотя, конечно, вполне возможно хранить текст в базе данных, это увеличивает размер вашей базы данных и затрудняет работу с ней. объем резервных копий (намного!) Больше, меняется механизм хранения, становится более болезненным и т.д. Масштабирование вашей файловой системы обычно сводится к добавлению другого жесткого диска. Это не так просто работает с базой данных — вам начинает требоваться сегментация)

… чтобы выполнить какой-либо поиск в данных, вам нужно создать индекс. У меня есть опыт только с SphinxSearch, но это позволяет вам указывать имя файла во входной базе данных.