LINUX.ORG.RU

Sqlite и сжатие

 ,


0

4

Есть база sqlite3, в которой ~150M однообразных текстовых строк (URLов), 50-200 знаков длиной. Будет больше. Стало интересно, даст ли какое-то преимущество использование сжимающих расширений. Вроде, таких было немало. Поискал — сплошь несвободные или совсем сырые. И не понял, как их включать из Питона.

Вопросы:
Что сейчас доступно?
Как подключать? (Для определённости самый тяжёлый случай: Python 3.8 на Андроиде в Termux с неработающим обновлением, отдельный пакет sqlite не установлен.)
Как оно работает? В моём случае, наверное, было бы оптимально сжимать отдельно каждую строку, но с общим словарём на весь столбец или даже группу столбцов в нескольких таблицах.

★★★★★

Последнее исправление: question4 (всего исправлений: 1)

~150M однообразных текстовых строк (URLов)

Насколько однообразных? Может, имеет смысл просто разбить? Например, если у тебя все строки имеют начало вида https://www.linux.org.ru/forum/development/, а концовка короткая типа 123134, то можно просто вынести первую часть в отдельную таблицу, и давать на нее индекс, а вторую просто приплюсовывать.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Насколько однообразных?

Словарный запас невелик, но разбивкой будет просто выделить только домен.

question4 ★★★★★
() автор топика

если полнотекстный поиск ненужен - держать их вообще в отдельной базе и не SQL. А в SQL класть полученные литералы.

MKuznetsov ★★★★★
()

В моём случае, наверное, было бы оптимально сжимать отдельно каждую строку, но с общим словарём на весь столбец или даже группу столбцов в нескольких таблицах

Ну и за чем дело стало? Реализуешь за день сжатие через словарь, аля LZ77/LZ4/etc, только вместо плавающего окна — словарь с наиболее популярными байтами. Всё. Это настолько просто, что готовое решение не нужно.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Реализуешь за день

Пробовал. Распаковку LZW. За месяц ничего рабочего не вышло.

question4 ★★★★★
() автор топика
Ответ на: комментарий от ashot

И всё? При запусках не проверяется? Какой тогда смысл в такой защите?

Но спасибо за информацию. Попробую, когда WiFi налажу.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

И всё?

Да.

При запусках не проверяется?

Нет.

Какой тогда смысл в такой защите?

Не знаю.

ashot ★★★★
()
Ответ на: комментарий от question4

пысы Приложение ф-дроид я не ставил. Просто apk термукса скачал.

ashot ★★★★
()

в которой ~150M

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

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

И что тормозит?

Поиск по базе быстрее grep-а по дереву из десятка директорий и сотен файлов. Возможно, будь все 150M в одном файле, было бы быстрее без базы.

А сейчас я увеличил объём текстов до 3 гигабайт, а число директорий до тысяч.

А если не тормозит, то зачем решать несуществующую проблему?

Неприятно, что, по сути, алфавитный указатель по размеру равен библиотеке, по которой он ищет. Поэтому хочу уменьшить его объём, если это возможно без снижения скорости.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

в виде отдельного файла :) внутри которого лежит структура, содержащая индексные идентификаторы/хеши или что подобное и путь до файла + смещение в нем.

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

п.с.: так-то файловая система есть одна из разновидностей базы данных…

pfg ★★★★★
()
Ответ на: комментарий от question4

Поиск по базе быстрее grep-а по дереву из десятка директорий и сотен файлов. Возможно, будь все 150M в одном файле, было бы быстрее без базы.

А если потратить 4 часа времени и написать программку для индексации и работы с разбивкой на нужное кол-во файлов или попробовать сделать поиск многопоточным, то будет быстрее поиска по базе в 100 раз минимум. Многократно проверенно. Самое эпичное, когда в Оракле прохождение запросами начало отваливаться по timeout (более 6 часов, по ночам!), а java программка делала тоже самое за 15-20 минут (когда хошЪ!). База данных она вообще про другое - консистентность, транзакционность, стандарт и предсказуемость и т.п., а не про скорость.

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 3)
Ответ на: комментарий от question4

хз, это было очень давно, да и снес я его достаточно быстро.

хых, нашол !!
https://forums.overclockers.ru/viewtopic.php?f=8&t=151090
2006 год однако, да примерно тогда и ставил…

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от pfg

Спасибо. Google Desktop Search, он же Google Desktop. Закрыт в 2010-м, удалён в 2011-м. Большая часть известных Википедии аналогов сдохла тогда же.

question4 ★★★★★
() автор топика
Ответ на: комментарий от vtVitus

А если потратить 4 часа времени

Выше писал про эти оценки.

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

Максимум, что я точно смогу — скопировать пример из учебника и немного подправить. Такие есть?

многопоточным

На 2-ядерной машине пока нет смысла.

question4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.