#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, но это позволяет вам указывать имя файла во входной базе данных.