Python 3: лучший метод сжатия строк для минимизации размера sqlite3 db - PullRequest
0 голосов
/ 02 декабря 2009

Я недавно создал сценарий, который анализирует несколько журналов веб-прокси в tidy файл sqlite3 db, который отлично работает для меня ... с одной ошибкой. размер файла. Я был вынужден использовать этот формат (sqlite3 db), и python обрабатывает его изначально как чемпион, поэтому мой вопрос заключается в следующем ... Какова наилучшая форма сжатия строк, которую я могу использовать для записей в БД, когда размер файла равен единственная забота. Zlib? База-н? Клингон

Любой совет поможет мне загрузить, опять же просто сжатие строк для символов, которые соответствуют URL.

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

Вот страница с расширением SQLite для обеспечения сжатия.

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

Вот пример текста со страницы

создать тестовую таблицу

sqlite> создать тест таблицы (имя varchar (20), фамилия varchar (20));

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

sqlite> вставить в тестовые значения (mycompress («Это образец текста»), mycompress («Это Пример текста'));

это ничего не показывает, потому что наши данные в двоичном формате и сжаты

sqlite> выбрать * из теста;

следующие работы, распаковывает данные

sqlite> выбрать myuncompress (имя), myuncompress (фамилия) из теста;

0 голосов
/ 02 декабря 2009

Вместо вставки кода сжатия / распаковки в вашу программу вы можете сохранить саму таблицу на сжатом диске.

0 голосов
/ 02 декабря 2009

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

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

Это не в моей голове, так что не стесняйтесь стрелять в него в огне, но я хотел бы разбить стол на несколько небольших столов, содержащих отдельные части входа. В этом случае запись журнала будет состоять в основном из отметки времени (как тип DATE, а не строки), а также набора индексов для других таблиц (например, запрос IP, тип запроса, запрошенный URL, тип браузера и т. Д.)

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

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