Zstd: рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ Zstd рдбрд┐рдХреНрд╢рдирд░реА рдХрдореНрдкреНрд░реЗрд╢рди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЬреВрди 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/zstd

рдирдорд╕реНрддреЗ,

рдореИрдВ рдпрд╣рд╛рдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╢реНрди рдХреЛ рдФрд░ рдХрд╣рд╛рдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ Zstd рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реИред рдореИрдВ рдкрд▓реНрд╕рд░ рдореЗрдВ Zstd рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдХрдореНрдкреНрд░реЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ Netty рдФрд░ the . рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ
io.netty.buffer.ByteBuf рдбреЗрдЯрд╛рдЯрд╛рдЗрдкред

рдореБрджреНрджрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреЛрдб рдмрдирд╛рддреЗ рд╕рдордп рдореИрдВ рдЗрдирдкреБрдЯ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдмрдлрд╝рд░реНрд╕ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реВрдБ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЖрдХрд╛рд░> 10000 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдкрд░, рдЬрд╣рд╛рдВ рдореИрдВ рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдкреНрд░рддреНрдпрдХреНрд╖ рдмрдлрд░ рдирд╣реАрдВ рд╣реИ, рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЖрдХрд╛рд░ 500 рдмрд╛рдЗрдЯреНрд╕ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдорд╛рдПрдБ рдХрд╣рд╛рдБ рд╣реИрдВ рдпрд╛ рд╢рд╛рдпрдж рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░рддрд╛ рд╣реВрдБред

(рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рд╣реИрдВ)ред

рд╕реНрдерд╛рдиреАрдп:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рдмрд╛рдЗрдЯ [] getZstdDictionaryAsBytesFromList (рд╕реВрдЪреА .)рд╕рдВрджреЗрд╢) {
int inputSize = message.stream().mapToInt(b -> b.readableBytes()).sum();
ZstdDictTrainer рдЯреНрд░реЗрдирд░ = рдирдпрд╛ ZstdDictTrainer (рдЗрдирдкреБрдЯ рд╕рд╛рдЗрдЬ, DICTIONARY_SIZE);
рдмрд╛рдЗрдЯ [] рдмрд╛рдЗрдЯ рдбрд┐рдХреНрд╢рдирд░реА = рд╢реВрдиреНрдп;

    for(ByteBuf buf: messages) {
        trainer.addSample(buf.array());
    }
    byteDictionary = trainer.trainSamples( true);
    return byteDictionary;
}

рдиреЗрдЯрд╡рд░реНрдХ:
рдирд┐рдЬреАрд╕рдВрджреЗрд╢) {
рдЕрдВрддрд┐рдо рдкреВрд░реНрдг рдХрд░рдиреЗ рдпреЛрдЧреНрдпрднрд╡рд┐рд╖реНрдп int inputSize = message.stream().mapToInt(b -> b.readableBytes()).sum();
this.dictionaryService.getDictionaryWorkerPool ()ред рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ (() -> {
ZstdDictTrainer рдЯреНрд░реЗрдирд░ = рдирдпрд╛ ZstdDictTrainer (рдЗрдирдкреБрдЯ рд╕рд╛рдЗрдЬ, 16*1024);
рдХреЗ рд▓рд┐рдП (рдмрд╛рдЗрдЯрдмрдл рд╕рдВрджреЗрд╢: this.messageBuffer) {
рдмрд╛рдЗрдЯ [] рд╕рдВрджреЗрд╢рдЕрд░реЗ;
рдЕрдЧрд░ (msg.hasArray ()) {
msgArray = msg.array ();
} рдЕрдиреНрдпрдерд╛ {
int HowMany = msg.readableBytes ();
msgArray = рдирдпрд╛ рдмрд╛рдЗрдЯ [рдХрд┐рддрдирд╛];
рдЗрдВрдЯ рд░реАрдбрд░рдЗрдВрдбреЗрдХреНрд╕ = msg.readerIndex ();
msg.getBytes (рд░реАрдбрд░рдЗрдВрдбреЗрдХреНрд╕, msgArray);
}
Trainer.addSample(msgArray);
}
рдмрд╛рдЗрдЯ [] рдмрд╛рдЗрдЯ рдбрд┐рдХреНрд╢рдирд░реА = рдЯреНрд░реЗрдирд░ред рдЯреНрд░реЗрди рдХреЗ рдирдореВрдиреЗ (рд╕рдЪ);

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЗрдж рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рднрд░ рд░рд╣рд╛ рд╣реВрдБред
рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж,
рдорд┐рд▓реЗрдирд╛

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп рдорд┐рд▓рд┐рдирд╛,

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣рд╛рдБ рдЕрдиреБрд░рдХреНрд╖рд┐рдд zstd-jni рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ "рдиреЗрдЯрд╡рд░реНрдХ рдкрд░, рдореИрдВ рдЗрдирдкреБрдЯ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реВрдВ" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдбрд┐рдХреНрд╢рдирд░реА рдЯреНрд░реЗрдирд░ рдХрд╛ рд▓рдХреНрд╖реНрдп рдЖрдкрдХреЗ рд╕реИрдВрдкрд▓ рдЗрдирдкреБрдЯреНрд╕ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдирд╛ рд╣реИ (рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде)ред рдпрджрд┐ рдЖрдк рдЕрд╕рдВрдмрджреНрдз рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдирдореВрдиреЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдмрдирд╛рдХрд░ рдпрд╛ рдЙрдиреНрд╣реЗрдВ /dev/urandom рд╕реЗ рдкрдврд╝рдХрд░), рддреЛ рдХрдИ рдЗрдирдкреБрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХреЛрдИ рд░рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓реМрдЯрд╛ рд╣реБрдЖ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрдЧрд╛ рдЦрд╛рд▓реА рд░рд╣реЗрдВ, рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореМрдЬреВрдж рд╣реИ (рдХреБрдЫ рд╕реМ рдмрд╛рдЗрдЯреНрд╕)ред

рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЦрддреНрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╣рд╛рдп рдлреЗрд▓рд┐рдХреНрд╕,

рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдЕрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рдордВрдЪ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рд╢реНрди рдХрд╛рдлреА рдЬрд╛рд╡рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ, рдореИрдВ рдЕрдиреБрдХрд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕реА .csv рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓рд╛рдЗрдиреЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВред рд▓рд╛рдЗрдиреЗрдВ рд╕рдорд╛рдирддрд╛рдПрдВ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред
рдЬрдм рдореИрдВ рдЕрдкрдиреА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рд╕реЗ рд╡рд╣реА рдкрдВрдХреНрддрд┐рдпрд╛рдВ (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛) рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ:
рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕): 259475, рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕): 16384
рдиреЗрдЯрд╡рд░реНрдХ рдкрд░: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕): 62290, рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕): 449
рд╕рдорд╕реНрдпрд╛ Zstd рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдЦреЛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рджрд┐рдЦрдиреЗ рд▓рдЧрддреА рд╣реИред

рд╕рд╛рджрд░,
рдорд┐рд▓реЗрдирд╛

рдареАрдХ рд╣реИ, рдЗрд╕ рд╕рдВрджреЗрд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ zstd рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдореИрдВ рдлрд┐рд▓рд╣рд╛рд▓ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБред рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯреНрд░реЗрдирд░ рдХреЛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕