Веб-версияОткрыть в Telegram

ПостПрочитал статью, первый раз столкнулся с таким явным вариантом рекурсивного сжатия https://15721.courses.cs.cmu.edu/spri…

18 февраля 2024
L
Loser story
Прочитал статью, первый раз столкнулся с таким явным вариантом рекурсивного сжатия https://15721.courses.cs.cmu.edu/spring2024/papers/03-data2/kuschewski-sigmod23.pdf Как по мне идея прикольная и достаточно простая: 1) Возьмём несколько простых и хороших алгоритмов сжатия, применим лучший из них 2) Затем сделаем тоже самое к получившимся данным 3) Делаем так пока это имеет смысл Нюанс, для того чтобы сделать шаг 1, нам нужно выбрать из н алгоритмов. Сделать это обычно можно только применив конкретные алгоритмы к данным, и выбрав тот, с которым получается лучше. Собственно в пейпере предлагается применять только к 1% данных от 64k энтрей в колонке, утверждается что получается при этом весьма хорошо. Вообще если вы не очень знакомы с открытыми форматами колоночного хранения данных, мне кажется тут довольно хорошо расписано верхнеуровнево https://15721.courses.cs.cmu.edu/spring2024/papers/02-data1/p3044-liu.pdf Ещё из интересного нигде выше нет varint-ов, вероятно потому что их коэффициент сжатия обычно весьма плох, хотя скорость расжатия может быть даже лучше чем у bitpacking (смотри streamvbyte) Если вдруг не знакомы с bitpacking/bitmap методами, советую эту статью https://dbucsd.github.io/paperpdfs/2017_2.pdf TLDR: * roaring bitmap, лучший выбор из битмап * pfor/simd bitpacking, block size 128/256, optional delta -- лучшие методы из bitpacking * bitpacking обычно лучше bitmap, для всего кроме интерсекшена / dense листов (имхо с интерсекшеном разница меньше чем утверждается в статье, так как "skip pointers" в ней достаточно плохо рассматривается) * имхо random access у roaring поприятнее Так вот по поводу varint, много где еще используется стандартный алгоритм: https://en.wikipedia.org/wiki/LEB128 Это очень печально, так как не смотря на простоту, такой алгоритм работает сильно хуже с branch предиктором, чем например utf-8 подход Есть несколько разных попыток это исправить, например https://github.com/ledbit/varint https://www.sqlite.org/src4/doc/trunk/www/varint.wiki Так что если вдруг у вас есть возможность сделать что-то новое/сломать обратную совместимость, и по какой-то причине вы используете отдельные varint-ы обратите внимание хотя бы на prefix варианты, которые работают значительно быстрее Если же у вас массив varint-ов, смотрите в сторону https://github.com/lemire/streamvbyte и аналогов (есть даже с LEB128 совместимые)
16 · 2K ·

Рядом в ленте

LLoser storyЧто ещё можно сделать, если у вас есть алгоритм, который требует SharedMutex, но скорость стандартного подхода вас не устраивает. В первую очередь можно посмотрLLoser storyПосмотрел "доклад", смотреть не рекомендую, потому что по сути пара тезисов, но достаточно интересных. firebolt -- стартап, аналог этих ваших snowflake, google
это сообщение
LLoser storyНедавно читал про разные olap query execution engines: velox, photon, etc. Есть интересный момент, о котором я думал раньше, но не встречал на практике. ПредлагLLoser storyВ комментариях упомянули интересный момент, в некоторых JVM, есть runtime флаг, для того чтоб знать в какой кодировке записана строка (utf-16 или latin1), гугли
LLoser storyLoser story@reverse13 · канал · Технологии
948подписчиков701постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем