|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
Есть база sqlite3, в которой ~150M однообразных текстовых строк (для определённости, URLов и сообщений libmagic), 50-200 знаков длиной. Будет больше. Стало интересно, даст ли какое-то преимущество использование сжимающих расширений. Вроде, таких было немало. Поискал — сплошь платные или совсем сырые. И не понял, как их включать из Питона. Вопросы: Что сейчас доступно? Как подключать? (Для определённости, самый тяжёлый случай: Python 3.8 на Андроиде в Termux с неработающим обновлением, отдельный пакет sqlite не установлен.) Как оно работает? В моём случае, наверное, было бы оптимально сжимать отдельно каждую строку, но с общим словарём на весь столбец или даже группу столбцов в нескольких таблицах. Будут ли преимущества? Например, заметное ускорение поиска, либо заметное уменьшение объёма при неизменной скорости. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:13 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
Как понимаю там около 1.5 Гб база. Зачем это сжимать? Нынче 4 Гб памяти только-только хватает браузеру. Диски нынче все быстрее и быстрее. А процы почти замерли в росте производительности, а сжимать/расжимать это нагрузка на проц, т.е. только тормознее будет работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:57 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
Dima T Диски нынче все быстрее и быстрее. Но всё сетевее и удалённее. Dima T А процы почти замерли в росте производительности Поэтому число ядер стало расти, как раньше мегагерцы. Dima T Зачем это сжимать? Из спортивного интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 18:10 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
tkzv Dima T А процы почти замерли в росте производительности Поэтому число ядер стало расти, как раньше мегагерцы. А толку? Поставь на машину 8 колес - она быстрее не поедет. Алгоритмы однопоточные и жать будет одно ядро. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 19:17 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
Dima T tkzv пропущено... Поэтому число ядер стало расти, как раньше мегагерцы. А толку? Поставь на машину 8 колес - она быстрее не поедет. Алгоритмы однопоточные и жать будет одно ядро. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 23:42 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
tkzv Dima T пропущено... А толку? Поставь на машину 8 колес - она быстрее не поедет. Алгоритмы однопоточные и жать будет одно ядро. Какая разница что там будет происходить с тем что не связано с чтением из базы??? Вообще, для случаев вроде твоего, есть более-менее стандартное решение. Разбиваешь свои однообразные строки на куски. Например URL можно с легкостью бить на: протокол, доменное имя, путь до скрипта, параметры скрипта. И раскидываешь их по словарным таблицам. В общем типичная нормализация, надо только увидеть в "текстовых строках" потенциальные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 07:27 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
White Owl Вообще, для случаев вроде твоего, есть более-менее стандартное решение. Разбиваешь свои однообразные строки на куски. Например URL можно с легкостью бить на: протокол, доменное имя, путь до скрипта, параметры скрипта. И раскидываешь их по словарным таблицам. В общем типичная нормализация, надо только увидеть в "текстовых строках" потенциальные таблицы. Помимо URL там есть и другие строки. Например, то, что выдаёт libmagic: 'GIF image data, version 87a, 10 x 10', 'data', 'ASCII text, with CRLF line terminators', 'ASCII text, with no line terminators', 'ASCII text, with CR line terminators', 'Zip archive data, at least v2.0 to extract' 'ASCII text', 'UTF-8 Unicode text, with CRLF line terminators', 'Zip archive data, at least v2.0 to extract', 'Non-ISO extended-ASCII text, with CRLF line terminators', 'GIF image data, version 89a, 14 x 16', Предлагаешь прокрутить в голове алгоритм Хаффмана и реализовать его через таблицы вместо дерева? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 12:50 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
ИМХО отдельно каждую строчку жать - будет проблема с хранением словаря, на строке до 200 байт он банально съест всю экономию. Думаю можно только сжать всю БД целиком - это надо какие-то встроенные средства ОС задействовать, типа сжатых папок виндавса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 13:02 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
Dima T ИМХО отдельно каждую строчку жать - будет проблема с хранением словаря, на строке до 200 байт он банально съест всю экономию. Думаю можно только сжать всю БД целиком - это надо какие-то встроенные средства ОС задействовать, типа сжатых папок виндавса. Поэтому я и спросил. Наверняка ведь, кому-то неоднократно бывало нужно сжать много недлинных стрингов. Например, общим на весь столбец словарём. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 14:35 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
tkzv Помимо URL там есть и другие строки. Например, то, что выдаёт libmagic: 'GIF image data, version 87a, 10 x 10', 'data', 'ASCII text, with CRLF line terminators', 'ASCII text, with no line terminators', 'ASCII text, with CR line terminators', 'Zip archive data, at least v2.0 to extract' 'ASCII text', 'UTF-8 Unicode text, with CRLF line terminators', 'Zip archive data, at least v2.0 to extract', 'Non-ISO extended-ASCII text, with CRLF line terminators', 'GIF image data, version 89a, 14 x 16', Предлагаешь прокрутить в голове алгоритм Хаффмана и реализовать его через таблицы вместо дерева? :)Ну до Хаффмана это далеко не дотягивает. У тебя же много именно таких стандартизированных строк. Разве что описания картинок различаются. Так что все это можно ужать в один словарь. А в главной таблице останется одно поле ссылающееся на него и вторичное поле для размера картинок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 15:06 |
|
Sqlite и сжатие
|
|||
---|---|---|---|
#18+
tkzv Dima T ИМХО отдельно каждую строчку жать - будет проблема с хранением словаря, на строке до 200 байт он банально съест всю экономию. Думаю можно только сжать всю БД целиком - это надо какие-то встроенные средства ОС задействовать, типа сжатых папок виндавса. Поэтому я и спросил. Наверняка ведь, кому-то неоднократно бывало нужно сжать много недлинных стрингов. Например, общим на весь столбец словарём. Тут тоже нетривиально все, если хранить пожатое общим словарем, то размеры строк уменьшатся, но сломается сортировка т.к. пожатое в другом порядке отсортируется. Для решения этого надо вклиниваться во внутреннюю работу SQLite, как-то хранить пожатое, а сравнивать распакованное. Задача непростая, поэтому простые и бесплатные решения врядли существуют. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 15:34 |
|
|
start [/forum/topic.php?fid=54&tid=2008313]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 387ms |
0 / 0 |