{"id":81936,"date":"2020-05-18T01:42:37","date_gmt":"2020-05-17T23:42:37","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera"},"modified":"2020-05-18T01:42:37","modified_gmt":"2020-05-17T23:42:37","slug":"szhatie-dannyh-v-apache-ignite-opyt-sbera","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","title":{"rendered":"Komprimiranje podataka u Apache Ignite. Iskustvo Sberbanke","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Komprimiranje podataka u Apache Ignite. Iskustvo Sberbanke\" src=\"\/wp-content\/uploads\/2020\/05\/0e26c686b1f29e88e6be4b8df81ab668.jpg\" style=\"display:block;margin: 0 auto;\" \/>Pri radu s velikim koli\u010dinama podataka, problem nedostatka prostora na diskovima mo\u017ee postati vrlo va\u017ean. Jedno od rje\u0161enja za ovaj problem je komprimiranje, zahvaljuju\u0107i kojem na istoj opremi mo\u017eete pove\u0107ati kapacitet pohrane. U ovom \u0107emo \u010dlanku raspraviti kako komprimiranje podataka funkcionira u Apache Ignite. \u010clanak \u0107e opisivati samo metode komprimiranja koje su implementirane unutar proizvoda. Druge metode komprimiranja podataka (putem mre\u017ee, u memoriji) bit \u0107e izvan fokusa, bilo da su realizirane ili ne.<\/p>\n<p>Dakle, kada je na\u010din trajne pohrane uklju\u010den, kao rezultat promjena podataka u predmemorijama, Ignite po\u010dinje zapisivati na disk:<\/p>\n<ol>\n<li>Sadr\u017eaj predmemorija<\/li>\n<li>Dnevnik unaprijed zapisivanja (Write Ahead Log, u daljnjem tekstu WAL)<\/li>\n<\/ol>\n<p>\nZa komprimiranje WAL-a ve\u0107 dugo postoji mehanizam koji se naziva WAL kompresija. U nedavno objavljenom Apache Ignite 2.8 pojavila su se jo\u0161 dva mehanizma koja omogu\u0107uju komprimiranje podataka na disku, to su kompresija stranica diska za komprimiranje sadr\u017eaja predmemorija i kompresija snimaka stranica WAL-a za komprimiranje nekih unosa WAL-a. Op\u0161irnije o ova tri mehanizma u nastavku.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kompresija stranica diska<\/h3>\n<p><\/p>\n<h4>Kako to funkcionira<\/h4>\n<p>\nPrvo, kratko \u0107emo objasniti kako Ignite pohranjuje podatke. Za pohranu se koristi stranica u memoriji. Veli\u010dina stranice postavlja se prilikom pokretanja \u010dvora i ne mo\u017ee se mijenjati u kasnijim fazama, a tako\u0111e veli\u010dina stranice mora biti stepen dvojke i vi\u0161ekratnik veli\u010dine bloka datote\u010dnog sustava. Stranice se u\u010ditavaju u RAM s diska prema potrebi, a veli\u010dina podataka na disku mo\u017ee prekora\u010diti dodijeljenu RAM. U slu\u010daju nedostatka prostora u RAM-u za u\u010ditavanje stranice s diska, stare, nesadr\u017eane stranice bit \u0107e izba\u010dene iz RAM-a.<\/p>\n<p>Na disku se podaci pohranjuju na sljede\u0107i na\u010din: za svaku particiju svake grupe predmemorije stvara se zasebna datoteka, a u toj datoteci, redoslijedom rasta indeksa, jedna za drugom idu stranice. Potpuni identifikator stranice sadr\u017ei identifikator grupe predmemorije, broj particije i indeks stranice u datoteci. Tako mo\u017eemo jedinstveno odrediti datoteku i offset u datoteci za svaku stranicu pomo\u0107u punog identifikatora stranice. Vi\u0161e informacija o strukturi strani\u010dne memorije mo\u017eete pro\u010ditati u \u010dlanku na Apache Ignite Wiki: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 iznutra<\/a><\/noindex>.<\/p>\n<p>Mehanizam kompresije stranica diska, kao \u0161to naziv sugerira, radi na razini stranica. Kada je ovaj mehanizam aktivan, rad s podacima u RAM-u odvija se bez ikakve kompresije, no tijekom spremanja stranica iz RAM-a na disk, provodi se njihovo zgu\u0161njavanje.<\/p>\n<p>Me\u0111utim, kompresija svake stranice posebno nije rje\u0161enje problema; trebamo smanjiti veli\u010dinu kona\u010dnih datoteka s podacima. Ako veli\u010dina stranice prestane biti fiksna, ne mo\u017eemo vi\u0161e ispisivati stranice u datoteku jednu za drugom, jer to mo\u017ee izazvati niz problema:<\/p>\n<ul>\n<li>Ne\u0107emo mo\u0107i izra\u010dunati ofset stranice putem indeksa koji odre\u0111uje njezinu poziciju u datoteci.<\/li>\n<li>Nije jasno \u0161to u\u010diniti sa stranicama koje se nalaze negdje usred datoteke i mijenjaju svoju veli\u010dinu. Ako se veli\u010dina stranice smanjuje, prostor koji je oslobodila se gubi. Ako se veli\u010dina stranice pove\u0107ava, za nju je potrebno tra\u017eiti novo mjesto u datoteci.<\/li>\n<li>Ako se stranica pomakne za broj bajtova koji nije vi\u0161ekratnik veli\u010dine bloka datote\u010dnog sustava, za njezino \u010ditanje ili pisanje bit \u0107e potrebno dodirnuti jedan blok datote\u010dnog sustava vi\u0161e, \u0161to mo\u017ee dovesti do degradacije performansi.<\/li>\n<\/ul>\n<p>\nKako ne bismo rje\u0161avali te probleme na vlastitoj razini, kompresija stranica diska u Apache Ignite koristi mehanizam datote\u010dnog sustava nazvan sparse datoteke. Sparse (rijetka) datoteka je datoteka u kojoj neka podru\u010dja ispunjena nulama mogu biti ozna\u010dena kao \"rupe\". Zbog toga se blokovi datote\u010dnog sustava ne dodjeljuju za pohranu tih rupa, \u010dime se posti\u017ee u\u0161teda prostora na disku.<\/p>\n<p>Logi\u010dno je da kako bismo oslobodili blok datote\u010dnog sustava, veli\u010dina rupe mora biti ve\u0107a ili jednaka veli\u010dini bloka datote\u010dnog sustava, \u0161to name\u0107e dodatna ograni\u010denja na veli\u010dinu stranice u Apache Ignite: kako bi kompresija imala neki u\u010dinak, veli\u010dina stranice mora biti strogo ve\u0107a od veli\u010dine bloka datote\u010dnog sustava. Ako je veli\u010dina stranice jednaka veli\u010dini bloka, nikada ne\u0107emo mo\u0107i osloboditi nijedan blok, jer da bismo oslobodili jedan blok, komprimirana stranica mora zauzimati 0 bajta. Ako je veli\u010dina stranice jednaka veli\u010dini 2 ili 4 bloka, ve\u0107 \u0107emo mo\u0107i osloboditi barem jedan blok ako se na\u0161a stranica komprimira na 50% ili 75%, redom.<\/p>\n<p>Stoga, kona\u010dni opis rada mehanizma: Kada se stranica zapisuje na disk, poku\u0161ava se komprimirati stranica. Ako veli\u010dina sa\u017eete stranice omogu\u0107ava osloba\u0111anje jednog ili vi\u0161e blokova datote\u010dnog sustava, stranica se zapisuje u sa\u017eetom obliku, dok se na mjestu oslobo\u0111enih blokova ubacuje \"rupa\" (izvodi se sistemski poziv <code>fallocate()<\/code> s oznakom \"punch hole\"). Ako veli\u010dina sa\u017eete stranice ne omogu\u0107ava osloba\u0111anje blokova, stranica se \u010duva onakva kakva jest, u nesu\u017eenom obliku. Svi ofseti stranica ra\u010dunaju se kao i bez kompresije, mno\u017eenjem indeksa stranice s veli\u010dinom stranice. Nema potrebe za relokacijom stranica vlastitim snagama. Ofseti stranica, kao i bez kompresije, ulaze na granice blokova datote\u010dnog sustava.<\/p>\n<p><img decoding=\"async\" alt=\"Komprimiranje podataka u Apache Ignite. Iskustvo Sberbanke\" src=\"\/wp-content\/uploads\/2020\/05\/6a6c6ad83d3b8591f76b9343ff067746.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nU trenutnoj implementaciji Ignite mo\u017ee raditi sa sparse datotekama samo pod OS Linux, stoga se kompresija diska mo\u017ee uklju\u010diti samo pri kori\u0161tenju Ignite na ovom operacijskom sustavu.<\/p>\n<p>Algoritmi kompresije koji se mogu koristiti za kompresiju stranica diska: ZSTD, LZ4, Snappy. Osim toga, postoji na\u010din rada (SKIP_GARBAGE) u kojem se samo odbacuje nepotrebno mjesto u stranici bez primjene kompresije na preostalim podacima, \u0161to omogu\u0107ava smanjenje optere\u0107enja CPU-a u usporedbi s prethodno navedenim algoritmima.<\/p>\n<h4>Utjecaj na performanse <\/h4>\n<p>\nNa\u017ealost, nisam izvodio stvarna mjerenja performansi na stvarnim sustavima jer ne planiramo koristiti ovaj mehanizam u produkciji, ali mo\u017eemo teoretski raspraviti gdje \u0107emo izgubiti, a gdje profitirati.<\/p>\n<p>Za to se trebamo prisjetiti kako se \u010ditanje i zapis stranica odvijaju prilikom njihovog poziva:<\/p>\n<ul>\n<li>Prilikom izvr\u0161avanja operacije \u010ditanja prvo se izvr\u0161ava pretra\u017eivanje u RAM-u, ako je pretra\u017eivanje neuspje\u0161no, stranica se u\u010ditava u RAM iz diska istim tokom koji izvr\u0161ava \u010ditanje.<\/li>\n<li>Prilikom izvr\u0161avanja operacije zapisivanja, stranica u RAM-u se ozna\u010dava kao prljava, dok se fizi\u010dko spremanje stranice na disk odmah u toku koji izvr\u0161ava zapis ne odvija. Sve prljave stranice se kasnije spremaju na disk u procesu checkpointa odvojenim tokom.<\/li>\n<\/ul>\n<p>\nDakle, utjecaj na operacije \u010ditanja:<\/p>\n<ul>\n<li>Pozitivan (disk IO), zbog smanjenja broja pro\u010ditana bloka datote\u010dnog sustava.<\/li>\n<li>Negativan utjecaj (CPU), zbog dodatnog optere\u0107enja potrebnog operativnom sustavu za rad sa sparse datotekama. Tako\u0111er, mogu\u0107e je da \u0107e se ovdje implicitno pojaviti dodatne IO operacije za o\u010duvanje slo\u017eenije strukture sparse datoteke (na\u017ealost, nisam upoznat sa svim detaljima rada sparse datoteka).<\/li>\n<li>Negativan utjecaj (CPU), zbog potrebe za dekompresijom stranica.<\/li>\n<li>Nema utjecaja na operacije pisanja.<\/li>\n<li>Utjecaj na proces provjere to\u010dnosti (ovdje je sve sli\u010dno operacijama \u010ditanja):<\/li>\n<li>Pozitivan utjecaj (disk IO), zbog smanjenja broja zapisanih blokova datote\u010dnog sustava.<\/li>\n<li>Negativan utjecaj (CPU, mo\u017eda disk IO), zbog rada sa sparse datotekama.<\/li>\n<li>Negativan utjecaj (CPU), zbog potrebe za kompresijom stranica.<\/li>\n<\/ul>\n<p>\nKoja strana vage \u0107e prevagnuti? To uvelike ovisi o okru\u017eenju, ali naginjem prema tome da \u0107e kompresija disk stranica dovesti do degradacije performansi u ve\u0107ini sustava. Pogotovo s obzirom na to da testovi na drugim DBMS-ima koji koriste sli\u010dan pristup sa sparse datotekama pokazuju pad performansi kada je kompresija uklju\u010dena.<\/p>\n<h4>Kako uklju\u010diti i konfigurirati<\/h4>\n<p>\nKao \u0161to je ve\u0107 re\u010deno, minimalna verzija Apache Ignite koja podr\u017eava kompresiju disk stranica: 2.8 i podr\u017eava se samo na operativnom sustavu Linux. Uklju\u010divanje i konfiguracija izvode se na sljede\u0107i na\u010din:<\/p>\n<ul>\n<li>U class-path-u treba biti modul ignite-compression. Po zadano se nalazi u distribuciji Apache Ignite u direktoriju libs\/optional i nije uklju\u010den u class-path. Mo\u017eete jednostavno premjestiti direktorij jedan nivo vi\u0161e u libs i tada \u0107e prilikom pokretanja putem ignite.sh automatski biti uklju\u010den.<\/li>\n<li>Trajna pohrana mora biti uklju\u010dena (Uklju\u010duje se putem <code>DataRegionConfiguration.setPersistenceEnabled(true))<\/code>.<\/li>\n<li>Veli\u010dina stranice mora biti ve\u0107a od veli\u010dine bloka datote\u010dnog sustava (mo\u017ee se postaviti pomo\u0107u <code>DataStorageConfiguration.setPageSize()<\/code> ).<\/li>\n<li>Za svaki cache \u010dije podatke treba komprimirati, potrebno je u konfiguraciji odabrati metodu kompresije i (po izboru) razinu kompresije (metode <code>CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()<\/code>).<\/li>\n<\/ul>\n<p><\/p>\n<h3>WAL kompresija<\/h3>\n<p><\/p>\n<h4>Kako to funkcionira<\/h4>\n<p>\n\u0160to je WAL i \u010demu slu\u017ei? U vrlo kratkim crtama: to je dnevnik u koji se bilje\u017ee svi doga\u0111aji koji na kraju mijenjaju predmemoriju stranica. Potreban je prvenstveno za mogu\u0107nost oporavka u slu\u010daju pada. Svaka operacija prije nego \u0161to korisniku vrati kontrolu mora prvo zapisati doga\u0111aj u WAL, kako bi u slu\u010daju pada mogla reproducirati putem dnevnika i obnoviti sve operacije za koje je korisnik dobio uspje\u0161an odgovor, \u010dak i ako se te operacije nisu uspjele odraziti u predmemoriji stranica na disku (ve\u0107 je opisano da se stvarno zapisivanje u predmemoriju stranica vr\u0161i u procesu koji se naziva \u201echeckpoin\u201c s nekim zaka\u0161njenjem od strane zasebnih niti).<\/p>\n<p>Zapisi u WAL dijele se na logi\u010dke i fizi\u010dke. Logi\u010dke \u2014 to su sami klju\u010devi i vrijednosti. Fizikalne \u2014 odra\u017eavaju promjene stranica u predmemoriji stranica. Dok logi\u010dki zapisi mogu biti korisni i za neke druge slu\u010dajeve, fizi\u010dki zapisi su potrebni samo za oporavak u slu\u010daju pada i potrebni su zapisi samo od posljednjeg uspje\u0161nog checkpointa. Ovdje se ne\u0107emo upu\u0161tati u pojedinosti i obja\u0161njavati za\u0161to to tako funkcionira, ali onima koje to zanima, mogu se obratiti ve\u0107 spomenutom \u010dlanku na Apache Ignite Wiki: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 iznutra<\/a><\/noindex>.<\/p>\n<p>Na jednu logi\u010dku evidenciju \u010desto dolazi nekoliko fizi\u010dkih evidencija. To zna\u010di, na primjer, jedna operacija put u ke\u0161u zahva\u0107a nekoliko stranica u stranicnoj memoriji (stranicu s podacima, stranice s indeksima, stranice s free-listama). Na nekim sinteti\u010dkim testovima postizao sam da su fizi\u010dke evidencije zauzimale do 90% volumena WAL datoteke. Pri tome su potrebne vrlo kratko vrijeme (po zadanom interval izme\u0111u kontrolnih to\u010daka je 3 minute). Logi\u010dno bi bilo osloboditi se tih podataka nakon gubitka njihove aktualnosti. Upravo to \u010dini mehanizam WAL kompakcije, osloba\u0111a se fizi\u010dkih evidencija i komprimira preostale logi\u010dke evidencije pomo\u0107u zipa, pri \u010demu se veli\u010dina datoteke zna\u010dajno smanjuje (ponekad i do deset puta).<\/p>\n<p>Fizi\u010dki WAL sastoji se od nekoliko segmenata (po defaultu 10) fiksne veli\u010dine (po defaultu 64MB), koji se prepisuju u krug. Kada se trenutni segment napuni, sljede\u0107i segment se dodjeljuje trenutnom, a ispunjeni segment se kopira u arhivu zasebnim tokom. WAL kompresija ve\u0107 radi s arhivskim segmentima. Tako\u0111er, zasebnim tokom prati izvr\u0161enje kontrolne to\u010dke i zapo\u010dinje kompresiju arhivskih segmenata, fizi\u010dke zapise za koje vi\u0161e nisu potrebni.<\/p>\n<p><img decoding=\"async\" alt=\"Komprimiranje podataka u Apache Ignite. Iskustvo Sberbanke\" src=\"\/wp-content\/uploads\/2020\/05\/ca8690ba7a350df9530f2ccf01c90975.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>Utjecaj na performanse<\/h4>\n<p>\nBudu\u0107i da WAL kompresija radi zasebnim tokom, ne bi trebala imati direktnog utjecaja na izvr\u0161ene operacije. No, ipak daje dodatno pozadinsko optere\u0107enje na CPU (kompresija) i disk (\u010ditaju\u0107i svaki WAL segment iz arhive i zapisiv\u0161i komprimirane segmente), stoga, ako sustav radi na rubu mogu\u0107nosti, to \u0107e tako\u0111er dovesti do pogor\u0161anja performansi.<\/p>\n<h4>Kako uklju\u010diti i konfigurirati<\/h4>\n<p>\nWAL kompresiju mo\u017eete uklju\u010diti pomo\u0107u svojstva <code>WalCompactionEnabled<\/code> u <code>DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)<\/code>). Tako\u0111er, pomo\u0107u metode DataStorageConfiguration.setWalCompactionLevel() mo\u017eete postaviti razinu kompresije, ako vam ne odgovara zadana vrijednost (BEST_SPEED).<\/p>\n<h3>WAL snapshot kompresija stranica<\/h3>\n<p><\/p>\n<h4>Kako to funkcionira<\/h4>\n<p>\nVe\u0107 smo utvrdili da se WAL zapisi dijele na logi\u010dke i fizi\u010dke. Za svaku promjenu svake stranice u memoriji stranica formira se fizi\u010dki zapis WAL-a. Fizi\u010dki zapisi, s druge strane, tako\u0111er se dijele na 2 podvrste: zapis snimke stranice i delta zapis. Svaki put kada promijenimo ne\u0161to na stranici i prebacimo je iz \u010distog stanja u prljavo, u WAL se pohranjuje puna kopija te stranice (zapis snimke stranice \u2014 snapshot stranice). \u010cak i ako promijenimo samo jedan bajt, u WAL \u0107e se pohraniti zapis veli\u010dine ne\u0161to ve\u0107e od veli\u010dine stranice. Ako promijenimo ne\u0161to na ve\u0107 prljavoj stranici, tada se u WAL formira delta zapis, u kojem su zabilje\u017eene samo promjene u odnosu na prethodno stanje stranice, ali ne cijela stranica. Budu\u0107i da se vra\u0107anje stanja stranica iz prljavog u \u010dist obi\u010dava tijekom procesa kontrolne to\u010dke, odmah nakon po\u010detka kontrolne to\u010dke gotovo svi fizi\u010dki zapisi \u0107e se sastojati samo od snimaka stranica (jer su sve stranice odmah nakon po\u010detka kontrolne to\u010dke \u010diste), a zatim, kako se bli\u017eimo sljede\u0107oj kontrolnoj to\u010dki, udio delta zapisa po\u010dinje rasti i opet se vra\u0107a na po\u010detku sljede\u0107e kontrolne to\u010dke. Mjerenja na nekim sinteti\u010dkim testovima pokazala su da udio snimaka stranica u ukupnom volumenu fizi\u010dkih zapisa dose\u017ee 90%.<\/p>\n<p>Ideja kompresije snimaka stranica WAL-a je da se komprimiraju snimci stranica koriste\u0107i ve\u0107 gotov alat za kompresiju stranica (vidi kompresiju disk stranica). Pri tome se u WAL-u zapisi pohranjuju fizi\u010dki u append-only re\u017eimu i nije potrebno povezivati zapise s granicama blokova datote\u010dnog sustava, stoga ovdje, za razliku od mehanizma kompresije disk stranica, sparse datoteke nisu potrebne, pa \u0107e taj mehanizam raditi ne samo na Linux operacijskim sustavima. Osim toga, ne brine nas koliko smo mo\u0107no uspjeli komprimirati stranicu. \u010cak i ako smo oslobodili 1 bajt, to je ve\u0107 pozitivan rezultat i mo\u017eemo pohranjivati komprimirane podatke u WAL, za razliku od kompresije disk stranica, gdje pohranjujemo komprimiranu stranicu samo ako smo oslobodili vi\u0161e od 1 bloka datote\u010dnog sustava.<\/p>\n<p>Stranice su dobro komprimirani podaci, a njihov udio u ukupnom volumenu WAL-a je vrlo visok. Tako da ne mijenjaju\u0107i format WAL datoteke mo\u017eemo dobiti zna\u010dajno smanjenje njezine veli\u010dine. Kompresija logi\u010dkih zapisa tako\u0111er bi zahtijevala promjenu formata i gubitak kompatibilnosti, primjerice, za vanjske korisnike koje logi\u010dki zapisi mogu zanimati, a ne bi donijela zna\u010dajno smanjenje volumena datoteke.<\/p>\n<p>Kao i za kompresiju disk stranica, za kompresiju snapshot-a WAL stranica mogu se koristiti algoritmi kompresije ZSTD, LZ4, Snappy, kao i na\u010din SKIP_GARBAGE.<\/p>\n<h4>Utjecaj na performanse<\/h4>\n<p>\nKako nije te\u0161ko primijetiti, izravno uklju\u010divanje kompresije snapshot-a WAL stranica utje\u010de samo na tokove koji upisuju podatke u memoriju stranica, tj. na one tokove koji mijenjaju podatke u cache-u. \u010citanje iz WAL fizi\u010dkih zapisa doga\u0111a se samo jedanput, u trenutku podizanja \u010dvora nakon pada (i to samo u slu\u010daju pada tijekom checkpointa).<\/p>\n<p>Na tokove koji mijenjaju podatke ovo utje\u010de na sljede\u0107i na\u010din: imamo negativan u\u010dinak (CPU) zbog potrebe da svaki put komprimiramo stranicu prije upisa na disk i pozitivan u\u010dinak (disk IO) zbog smanjenja koli\u010dine zapisanih podataka. U skladu s tim, ovdje je sve jednostavno, ako je performansa sustava ograni\u010dena s CPU-a, dolazimo do malog pogor\u0161anja, ako je na disku ulaz\/izlaz \u2014 dobijemo porast.<\/p>\n<p>Posredno smanjenje veli\u010dine WAL-a tako\u0111er pozitivno utje\u010de na tokove koji arhiviraju segmente WAL-a i na tokove WAL kompaktiranja.<\/p>\n<p>Stvarni testovi performansi u na\u0161em okru\u017eenju na sinteti\u010dkim podacima pokazali su mali porast (propusnost je porasla za 10%-15%, latencija je smanjena za 10%-15%).<\/p>\n<h4>Kako uklju\u010diti i konfigurirati<\/h4>\n<p>\nMinimalna verzija Apache Ignite: 2.8. Aktivacija i postavljanje provode se na sljede\u0107i na\u010din:<\/p>\n<ul>\n<li>U class-path-u treba biti modul ignite-compression. Po zadano se nalazi u distribuciji Apache Ignite u direktoriju libs\/optional i nije uklju\u010den u class-path. Mo\u017eete jednostavno premjestiti direktorij jedan nivo vi\u0161e u libs i tada \u0107e prilikom pokretanja putem ignite.sh automatski biti uklju\u010den.<\/li>\n<li>Trajna pohrana mora biti uklju\u010dena (Uklju\u010duje se putem <code>DataRegionConfiguration.setPersistenceEnabled(true)<\/code>).<\/li>\n<li>Mora biti postavljen na\u010din kompresije pomo\u0107u metode <code>DataStorageConfiguration.setWalPageCompression()<\/code>, po defaultu, kompresija je isklju\u010dena (na\u010din DISABLED).<\/li>\n<li>Opcionalno je mogu\u0107e postaviti stupanj kompresije pomo\u0107u metode <code>DataStorageConfiguration.setWalPageCompression()<\/code>, dopu\u0161tene vrijednosti za svaki od na\u010dina potra\u017ei u javadoc-u za metodu.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Zaklju\u010dak<\/h3>\n<p>\nRazmatrani mehanizmi kompresije podataka u Apache Ignite mogu se koristiti neovisno jedni od drugih, ali su tako\u0111er dopu\u0161tene i bilo kakve njihove kombinacije. Razumijevanje principa njihovog rada omogu\u0107it \u0107e vam da odredite koliko su prikladni za va\u0161e zadatke u va\u0161em okru\u017eenju i \u0161to \u0107ete morati \u017ertvovati pri njihovom kori\u0161tenju. Kompresija disk stranica je namijenjena za kompresiju osnovnog skladi\u0161ta i mo\u017ee dati srednju razinu kompresije. Kompresija snimaka WAL stranica \u0107e dati srednju razinu kompresije ve\u0107 postoje\u0107im WAL datotekama, pri \u010demu \u0107e vjerojatno \u010dak i pove\u0107ati performanse. WAL kompakcija ne\u0107e imati pozitivan utjecaj na performanse, ali \u0107e maksimalno smanjiti veli\u010dinu WAL datoteka uklanjanjem fizi\u010dkih zapisa.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/sberbank\/blog\/502136\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043c\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0440\u043e \u0432\u0441\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0436\u0430\u0442\u0438\u0435, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81937,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81936","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u041e\u043f\u044b\u0442 \u0421\u0431\u0435\u0440\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T23:42:37+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T23:42:37+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kompresija podataka u Apache Ignite. Iskustvo Sbera | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Apache Ignite. \u041e\u043f\u044b\u0442 \u0421\u0431\u0435\u0440\u0430 | ProHoster","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T23:42:37+00:00","article:modified_time":"2020-05-17T23:42:37+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81936","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:47:30","updated":"2022-10-02 17:21:32","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/81936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=81936"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/81936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/81937"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=81936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=81936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=81936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}