Download - ZSON, или прозрачное сжатие JSON
![Page 1: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/1.jpg)
или опрозрачномсжатии
Александр Алексеев
![Page 3: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/3.jpg)
Как выглядит
![Page 4: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/4.jpg)
Суть проблемы
● избыточен● Место на диске● Память● Как следствие и
![Page 5: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/5.jpg)
В чем заключается идея
“А давайте, зная кое-что оформате, сожмем его лучшеPostgreSQL, сэкономимместо, память, выиграем поI/O”
![Page 6: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/6.jpg)
Народная мудрость
Чтобы сделать что-топравильно, нужно сделать этохотя бы три раза.
![Page 7: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/7.jpg)
Попытки
●○ Не сильно лучше
● Свой словарный метод сжатия○ Жмет хуже и медленнее
●○ Успех
![Page 8: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/8.jpg)
Суть идеи
Сжатие в два прохода● Шаг замена общих строк накоды
● Шаг обычное сжатиеДолжно стать как минимум ненамного хуже того что естьсейчас
![Page 9: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/9.jpg)
УстановкаСобираем и устанавливаем
cd /path/to/zson/source/code
make
sudo make install
Прогоняем тесты
make installcheck
Подключаемся к
psql my_database
Включаем расширение
create extension zson;
![Page 10: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/10.jpg)
ОбучениеПроцедура
zson_learn(
tables_and_columns text[][],
max_examples int default 10000,
min_length int default 2,
max_length int default 128,
min_count int default 2
)
Пример использования
select zson_learn('{{"tbl1", "col1"}, {"tbl2", "col2"}}')
![Page 11: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/11.jpg)
![Page 12: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/12.jpg)
Как хранится словарь
CREATE TABLE zson_dict (
dict_id SERIAL NOT NULL,
word_id INTEGER NOT NULL,
word text NOT NULL,
PRIMARY KEY(dict_id, word_id)
);
![Page 13: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/13.jpg)
Использование
Проверяем словарь
select * from zson_dict;
Теперь используем
create table zson_example(x zson);
insert into zson_example values ('{"aaa": 123}');
select x -> 'aaa' from zson_example;
![Page 14: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/14.jpg)
Как это работает
![Page 15: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/15.jpg)
Словарь в памяти
![Page 16: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/16.jpg)
Схема кодирования// VARHDRSZ
// zson_version [uint8]
// dict_version [uint32]
// decoded_size [uint32]
// hint [uint8 x PGLZ_HINT_SIZE]
// {
//skip_bytes [uint8]
//... skip_bytes bytes ...
//string_code [uint16], 0 = no_string
// } *
![Page 17: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/17.jpg)
Также предусмотрено
● Переобучение важно кэш● Удаление старых словарей
См
![Page 18: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/18.jpg)
Бенчмарки
● Получали до○ Если данные не влезают в память документы большие
● На тех же данных если все влезло в память● Был случай когда размер данных увеличился на● После #define PGLZ_HINT_SIZE 0 уменьшился на
Вывод использовать нужно с умом за вас сам все не сделает
см
![Page 19: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/19.jpg)
Ссылки по теме
●●
![Page 20: ZSON, или прозрачное сжатие JSON](https://reader033.vdocuments.site/reader033/viewer/2022050900/58f186491a28ab49378b45f9/html5/thumbnails/20.jpg)