Skip to content

Поддержка zstd словаря#184

Draft
SevereCloud wants to merge 2 commits intomasterfrom
zstd-dict
Draft

Поддержка zstd словаря#184
SevereCloud wants to merge 2 commits intomasterfrom
zstd-dict

Conversation

@SevereCloud
Copy link
Owner

vk.EnableZstd()

err := vk.UpdateZstdDict()
if err != nil {
	log.Fatal(err)
}

Как это работает?

VK поддерживает сжатие запросов используя zstd со словарем. Для получения ссылки на словарь, вызвается метод account.getZSTDDict

type AccountGetZSTDDictResponse struct {
	Link    string `json:"link"`
	Version string `json:"version"`
	Hash    string `json:"hash"`
}

Файл начинается с версии словаря:

00 01 02 03 04 05 06 07 08 09 0A
64 69 63 74 5F 76 32 37 A4 30 EC
d i c t _ v 2 7 0

Сам zstd словарь начинается с магического номера0xEC30A437 в little-endian формате.

Версия словаря передается в поле x-zstd-dict-version

Странности

Сейчас метод account.getZSTDDict не работает(по некоторым причинам). Сам метод можно вызывать только с помощью токена пользователя.

Словарь для json или msgpack?

image

В выступлении(статье) говорится о использовании zstd вместе с msgpack, но сам словарь(data_v2) тренировался на json, что делает его бесполезным с msgpack...

¯_(ツ)_/¯

Проблема загрузки словаря

В модуле github.com/klauspost/compress/zstd используется опциональная функция zstd.WithDecoderDicts(data). Каждый вызов zstd.NewReader(resp.Body, optionWithDecoderDicts) сначала разбирает словарь, а затем добавляет его к ридеру, что может сказаться на перфомансе


This close #180

@SevereCloud SevereCloud linked an issue Jan 31, 2022 that may be closed by this pull request
Base automatically changed from dev-v2.14.0 to master June 16, 2022 06:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Сжатие zstd со словарем

1 participant