{"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\/et\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","title":{"rendered":"Andmete tihendamine Apache Ignite'is. Sberbanki kogemus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Andmete tihendamine Apache Ignite&#039;is. Sberbanki kogemus\" src=\"\/wp-content\/uploads\/2020\/05\/0e26c686b1f29e88e6be4b8df81ab668.jpg\" style=\"display:block;margin: 0 auto;\" \/>Suure andmemahtude t\u00f6\u00f6tamisel v\u00f5ib tekkida probleemide puuduj\u00e4\u00e4gis kettaruumis. \u00dcks viis selle probleemi lahendamiseks on andmete kokkusurumine, mis v\u00f5imaldab sama riistvara kasutades suurendada salvestusmahte. Selles artiklis vaatleme, kuidas andmete kokkusurumine Apache Ignite'is toimib. Artikkel keskendub ainult toote sisemiselt rakendatud kettas olevatele kokkusurumismeetoditele. Teised andmete kokkusurumise meetodid (v\u00f5rgus, m\u00e4lus), olgu need rakendatud v\u00f5i mitte, j\u00e4\u00e4vad v\u00e4lja.<\/p>\n<p>Nii et kui p\u00fcsimood on sisse l\u00fclitatud, hakkab Ignite andmete muutmisel kettas salvestama:<\/p>\n<ol>\n<li>Vahem\u00e4lu sisu<\/li>\n<li>Eelneva kirjutamise logi (Write Ahead Log, l\u00fchidalt WAL)<\/li>\n<\/ol>\n<p>\nWAL-i kokkusurumiseks on juba pikka aega olemas mehhanism, mida nimetatakse WAL kokkusurumiseks. Hiljuti ilmunud Apache Ignite 2.8-s on lisaks sellele veel kaks mehhanismi, mis v\u00f5imaldavad andmeid kettal kokku suruda: kettalehe kokkusurumine vahem\u00e4lu sisu kokkusurumiseks ja WAL lehe hetkepiltide kokkusurumine m\u00f5nede WAL-kirjete kokkusurumiseks. Allpool on rohkem teavet nende kolme mehhanismi kohta.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Kettalehe kokkusurumine<\/h3>\n<p><\/p>\n<h4>Kuidas see t\u00f6\u00f6tab<\/h4>\n<p>\nAlustame l\u00fchidalt Ignite'i andmete salvestamise viisist. Salvestamiseks kasutatakse lehek\u00fcljep\u00f5hist m\u00e4lu. Lehe suurus m\u00e4\u00e4ratakse s\u00f5lme k\u00e4ivitamise ajal ja seda ei saa hiljem muuta, samuti peab lehe suurus olema kahekordne ja vastama failis\u00fcsteemi ploki suurusele. Lehed laaditakse RAM-i kettalt vajadusel, andmemahu suurus kettal v\u00f5ib \u00fcletada eraldatud RAM-i mahtu. Kui RAM-is on lehe laadimiseks ruumipuudus, asendatakse vanad, enam mitte kasutatavad lehed RAM-ist.<\/p>\n<p>Kettal salvestatakse andmed j\u00e4rgmisel viisil: iga vahem\u00e4lu r\u00fchma partitsiooni jaoks luuakse eraldi fail, milles lehed j\u00e4rgnevad \u00fcksteisele kasvavas j\u00e4rjestuses indeksi j\u00e4rgi. Lehe t\u00e4ielik identifikaator sisaldab vahem\u00e4lu r\u00fchma identifikaatorit, partitsiooni numbrit ja lehe indeksit failis. Seega saame lehe t\u00e4ieliku identifikaatori p\u00f5hjal \u00fchem\u00f5tteliselt m\u00e4\u00e4rata faili ja faili offset'i iga lehe jaoks. T\u00e4iendavat teavet lehek\u00fcljep\u00f5hise m\u00e4lu \u00fclesehituse kohta leiate artiklist 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 sisemuses<\/a><\/noindex>.<\/p>\n<p>Disk page compression, nagu nimest j\u00e4reldada v\u00f5ib, t\u00f6\u00f6tab lehe tasandil. Kui see mehhanism on aktiveeritud, toimub andmete t\u00f6\u00f6tlemine RAM-is nii nagu need on, ilma igasuguse kompressioonita, kuid pilti salvestades RAM-ist k\u00f5vakettale toimub nende tihendamine.<\/p>\n<p>Kuid iga lehe eraldi tihendamine ei lahenda probleemi, tuleb leida viis, kuidas v\u00e4hendada l\u00f5plikku andmefailide suurust. Kui lehe suurus ei ole enam fikseeritud, ei saa me lehti failidesse j\u00e4rjestikku kirjutada, sest see v\u00f5ib tekitada terve rea probleeme:<\/p>\n<ul>\n<li>Me ei saa lehe indeksi abil arvutada, kus leht asub failis.<\/li>\n<li>Pole selge, mida teha lehtedega, mis asuvad faili mitte l\u00f5pus ja muudavad oma suurust. Kui lehe suurus v\u00e4heneb, kaob koht, mille ta vabastas. Kui lehe suurus suureneb, tuleb otsida talle juba uus koht failis.<\/li>\n<li>Kui leht nihkub failis\u00fcsteemi ploki suurusele mittevastavate baitide arvuga, siis selle lugemiseks v\u00f5i kirjutamiseks on vajalik puudutada \u00fchte faili s\u00fcsteemi plokki rohkem, mis v\u00f5ib p\u00f5hjustada j\u00f5udluse langust.<\/li>\n<\/ul>\n<p>\nEt neid probleeme mitte \u00fcksi lahendada, kasutab disk page compression Apache Ignite'is failis\u00fcsteemi mehhanismi, mida nimetatakse k\u00f5hnateks failideks. K\u00f5hn (sparse) fail on selline fail, kus m\u00f5ned, nullidega t\u00e4idetud piirkonnad v\u00f5ivad olla m\u00e4rgitud kui \u00abaugud\u00bb. See t\u00e4hendab, et need augud ei n\u00f5ua failis\u00fcsteemi plokkide eraldamist, mis omakorda s\u00e4\u00e4stab ketta ruumi.<\/p>\n<p>Loogiliselt on, et failis\u00fcsteemi ploki vabastamiseks peab augude suurus olema suurem v\u00f5i v\u00e4hemalt v\u00f5rdne failis\u00fcsteemi ploki suurusega, mis seab t\u00e4iendava piirangu Apache Ignite lehe suurusele: et tihendamine annaks mingit m\u00f5ju, peab lehe suurus olema rangelt suurem, kui failis\u00fcsteemi ploki suurus. Kui lehe suurus on v\u00f5rdne ploki suurusega, ei suuda me kunagi \u00fchtegi plokki vabastada, kuna \u00fche ploki vabastamiseks peab tihendatud leht v\u00f5tma 0 baiti. Kui lehe suurus on v\u00f5rdne kahe v\u00f5i nelja ploki suurusega, saame vabastada v\u00e4hemalt \u00fche ploki, kui meie leht tihendatakse v\u00e4hemalt 50% v\u00f5i 75% vastavalt.<\/p>\n<p>Seega, mehanismi t\u00f6\u00f6 j\u00e4reldus on j\u00e4rgmine: kui lehte kirjutatakse kettale, proovib s\u00fcsteem lehte pigistada. Kui pigistatud lehe suurus v\u00f5imaldab vabastada \u00fche v\u00f5i enam failis\u00fcsteemi blokki, siis leht salvestatakse pigistatud kujul, vabastatud blokkide kohtadesse tehakse \"auk\" (t\u00e4idetakse s\u00fcsteemik\u00f5ne <code>fallocate()<\/code> lipukesega \"punch hole\"). Kui pigistatud lehe suurus ei v\u00f5imalda bloke vabastada, salvestatakse leht nii nagu on, pigistamata kujul. K\u00f5ik lehek\u00fclgede offsetid arvutatakse nagu ka ilma pigistamiseta, korrutades lehek\u00fclje indeksi lehek\u00fclje suurusega. \u00dckski lehek\u00fclgede \u00fcmberpaigutamine ei ole vajalik. Lehek\u00fclgede offsetid, nagu ka ilma pigistamiseta, langevad failis\u00fcsteemi blokki piiridesse.<\/p>\n<p><img decoding=\"async\" alt=\"Andmete tihendamine Apache Ignite&#039;is. Sberbanki kogemus\" src=\"\/wp-content\/uploads\/2020\/05\/6a6c6ad83d3b8591f76b9343ff067746.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nPraeguses rakenduses suudab Ignite alusel ainult Linux OS-i kasutada sparse-faile, seega disk page compression saab lubada ainult Ignite'i kasutamisel selle operatsioonis\u00fcsteemi peal.<\/p>\n<p>Disk page compression jaoks v\u00f5ivad olla kasutatavad pigistamisalgoritmid: ZSTD, LZ4, Snappy. Lisaks on t\u00f6\u00f6re\u017eiim (SKIP_GARBAGE), kus lihtsalt visatakse m\u00f5ttetu lehe koht v\u00e4lja, ilma et j\u00e4\u00e4ks pigistamist, mis v\u00e4hendab CPU koormust v\u00f5rreldes varem mainitud algoritmidega.<\/p>\n<h4>M\u00f5ju j\u00f5udlusele <\/h4>\n<p>\nKahjuks ei ole ma reaalses keskkonnas j\u00f5udlust tegelikult m\u00f5\u00f5tnud, kuna meil ei ole kavas seda mehhanismi tootmises kasutada, kuid v\u00f5ime teoreetiliselt arutleda, kus me kaotame ja kus v\u00f5idame.<\/p>\n<p>Selleks peame meenutama, kuidas toimuvad lehek\u00fclgede lugemine ja kirjutamine j\u00e4rele p\u00e4\u00e4semise ajal:<\/p>\n<ul>\n<li>Lugemise toimingut teostades otsitakse lehek\u00fclge esmalt RAM-is, kui otsing ei \u00f5nnestu, laaditakse leht RAM-i kettalt sama l\u00f5ime poolt, mis teostab lugemist.<\/li>\n<li>Kirjutamise toimingu korral m\u00e4rgitakse RAM-i leht mustaks, samas ei toimu f\u00fc\u00fcsilist lehe salvestamist kettale kohe kirjutavat protsessi teostava l\u00f5ime poolt. K\u00f5ik mustad lehed salvestatakse kettale hiljem checkpointi protsessi k\u00e4igus eraldi l\u00f5ime poolt.<\/li>\n<\/ul>\n<p>\nSeega, m\u00f5jude lugemisoperatsioonide peale:<\/p>\n<ul>\n<li>Positiivne (disk I\/O), v\u00e4hendades loetud failis\u00fcsteemi blokkide arvu.<\/li>\n<li>Negatiivne (CPU), kuna t\u00e4iendav koormus, mis on vajalik operatsioonis\u00fcsteemile sparse-failidega t\u00f6\u00f6tamiseks. Samuti v\u00f5ivad siin ilmneda t\u00e4iendavad IO-operatsioonid keerukama sparse-failistruktuuri salvestamiseks (k\u00f5igi sparse-failide toimimise \u00fcksikasjadega ma, kahjuks, ei ole tuttav).<\/li>\n<li>Negatiivne (CPU), kuna lehtede dekompressioon on vajalik.<\/li>\n<li>Kirjutamisele m\u00f5ju ei ole.<\/li>\n<li>M\u00f5ju kontrollpunkti protsessile (siin on k\u00f5ik sarnane lugemisoperatsioonidega):<\/li>\n<li>Positiivne (disk IO), kuna v\u00e4heneb kirjutatud blokkte arvu failis\u00fcsteemis.<\/li>\n<li>Negatiivne (CPU, v\u00f5ib-olla disk IO), kuna t\u00f6\u00f6tamine sparse-failidega.<\/li>\n<li>Negatiivne (CPU), kuna lehtede kokkusurumine on vajalik.<\/li>\n<\/ul>\n<p>\nKumb tass kaaludest \u00fclekaalus on? See s\u00f5ltub v\u00e4ga keskkonnast, kuid kaldun arvama, et disk-page kompressioon toob enamikus s\u00fcsteemides pigem j\u00f5udluse halvenemise. Eriti kuna testid teistes andmebaasihaldurites, mis kasutavad sarnast l\u00e4henemist sparse-failidele, n\u00e4itavad j\u00f5udluse langust, kui kompressioon on sisse l\u00fclitatud.<\/p>\n<h4>Kuidas sisse l\u00fclitada ja seadistada<\/h4>\n<p>\nNagu juba \u00fctlesin, minimaalne versioon Apache Ignite, mis toetab disk-page kompressiooni: 2.8 ja toetab ainult operatsioonis\u00fcsteemi Linux. Sisse l\u00fclitamine ja seadistamine toimub j\u00e4rgmiselt:<\/p>\n<ul>\n<li>Class-path'is peab olema moodul ignite-compression. Vaikimisi asub see Apache Ignite jaotises libs\/optional ja ei kuulu class-path'i. Saate lihtsalt viia kausta \u00fche tasandi v\u00f5rra \u00fclespoole libs ja siis, kui k\u00e4itate ignite.sh kaudu, lisatakse see automaatselt.<\/li>\n<li>P\u00fcsivus peab olema sisse l\u00fclitatud (sisse l\u00fclitatakse kaudu <code>DataRegionConfiguration.setPersistenceEnabled(true))<\/code>.<\/li>\n<li>Lehe suurus peab olema suurem kui failis\u00fcsteemi ploki suurus (saab m\u00e4\u00e4rata l\u00e4bi <code>DataStorageConfiguration.setPageSize()<\/code> ).<\/li>\n<li>Iga vahem\u00e4lu juures, mille andmeid tuleb kokku suruda, peab konfigureerimisse seadistama kompressioonimeetodi ja (valikuliselt) kompressioonitaseme (meetodid <code>CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()<\/code>).<\/li>\n<\/ul>\n<p><\/p>\n<h3>WAL kompressioon<\/h3>\n<p><\/p>\n<h4>Kuidas see t\u00f6\u00f6tab<\/h4>\n<p>\nMis on WAL ja miks see vajalik on? V\u00e4ga l\u00fchidalt: see on ajakiri, kuhu j\u00f5uavad k\u00f5ik s\u00fcndmused, mis muudavad l\u00f5puks lehe salvestust. Selle peamine eesm\u00e4rk on v\u00f5imaldada taastamist kahjude korral. Iga operatsioon peab enne juhtimise andmist kasutajale esmalt s\u00fcndmuse WAL-i salvestama, et kahjude korral oleks v\u00f5imalik ajakirja kaudu taastada k\u00f5ik operatsioonid, mille puhul kasutaja sai eduka vastuse, isegi kui need operatsioonid ei saanud veel lehe salvestusse kettale kajastuda (\u00fclal on juba kirjeldatud, et tegelik salvestamine lehe salvestusse toimub protsessis, mida nimetatakse \u201ekontrollpunktiks\u201c, teatud viivitusega l\u00e4bi eraldi protsesside).<\/p>\n<p>WAL-i kanded jagunevad loogilisteks ja f\u00fc\u00fcsilisteks. Loogilised on ise v\u00f5tmed ja v\u00e4\u00e4rtused. F\u00fc\u00fcsilised peegeldavad lehtede muudatusi lehe salvestuses. Kui loogilised kanded v\u00f5ivad olla kasulikud ka muudel juhtudel, siis f\u00fc\u00fcsilised kanded on vajalikud ainult taastamiseks kahjude korral ja neid on vaja ainult alates viimase edukalt kontrollpunktist. Siin me ei kavatse detaile arutada ja selgitada, miks see nii t\u00f6\u00f6tab, kuid huvilised saavad p\u00f6\u00f6rduda juba mainitud artikli poole Apache Ignite'i Vikis: <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/IGNITE\/Ignite+Persistent+Store+-+under+the+hood\">Ignite Persistent Store \u2014 sisemuses<\/a><\/noindex>.<\/p>\n<p>\u00dche loogilise kirje kohta on sageli mitu f\u00fc\u00fcsilist kirjet. N\u00e4iteks m\u00f5jutab \u00fcks put-operatsioon vahem\u00e4lu mitut lehte lehek\u00fcljem\u00e4lus (leht, kus on andmed, lehed indeksite jaoks, lehed free-list'ide jaoks). M\u00f5ningatel s\u00fcntaatilistel testidel selgus, et f\u00fc\u00fcsilised kirjed v\u00f5tavad kuni 90% WAL-faili mahust. Samas on need vajalikud vaid v\u00e4ga l\u00fchikese aja jooksul (vaikimisi on kontrollpunktide vaheline intervall 3 minutit). Loogiline oleks neist andmetest p\u00e4rast nende aktuaalsuse kaotamist vabaneda. Just seda \u00fclesannet t\u00e4idab WAL kompaktsioonimehhanism, eemaldades f\u00fc\u00fcsilised kirjed ja tihendades j\u00e4relej\u00e4\u00e4nud loogilised kirjed zip'i abil, mille k\u00e4igus faili suurus v\u00e4heneb v\u00e4ga oluliselt (m\u00f5nikord k\u00fcmneid kordi).<\/p>\n<p>F\u00fc\u00fcsiliselt koosneb WAL mitmest segmentist (vaikimisi 10) fikseeritud suurusega (vaikimisi 64Mb), mida \u00fcle kirjutatakse ringikaupa. Kui praegune segment on t\u00e4is, m\u00e4\u00e4ratakse j\u00e4rgmiseks segmendiks j\u00e4rgmine segment, ja t\u00e4idetud segment kopeeritakse arhiivi eraldi voos. WAL kompaktsus t\u00f6\u00f6tab juba arhiivsegmentidega. Samuti j\u00e4lgib see eraldi voos kontrolle ja alustab arhiivsegmentide tihendamist, mille f\u00fc\u00fcsilised kirjed ei ole enam vajalikud.<\/p>\n<p><img decoding=\"async\" alt=\"Andmete tihendamine Apache Ignite&#039;is. Sberbanki kogemus\" src=\"\/wp-content\/uploads\/2020\/05\/ca8690ba7a350df9530f2ccf01c90975.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>M\u00f5ju j\u00f5udlusele<\/h4>\n<p>\nKuna WAL kompaktsus t\u00f6\u00f6tab eraldi voos, ei tohiks see otse m\u00f5jutada teostatavaid operatsioone. Kuid see loob siiski lisakoormuse CPU-le (tihendamine) ja kettale (iga WAL segmendi lugemine arhiivist ja tihendatud segmentide kirjutamine), seega, kui s\u00fcsteem t\u00f6\u00f6tab oma v\u00f5imaluste piiril, v\u00f5ib see samuti p\u00f5hjustada j\u00f5udluse langust.<\/p>\n<h4>Kuidas sisse l\u00fclitada ja seadistada<\/h4>\n<p>\nWAL kompaktsuse saab lubada atribuudi kaudu <code>WalCompactionEnabled<\/code> ja <code>DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)<\/code>). Samuti saab meetodi DataStorageConfiguration.setWalCompactionLevel() abil m\u00e4\u00e4rata tihendamise taseme, kui vaikimisi v\u00e4\u00e4rtus (BEST_SPEED) ei sobi.<\/p>\n<h3>WAL lehek\u00fclje snapshot tihendamine<\/h3>\n<p><\/p>\n<h4>Kuidas see t\u00f6\u00f6tab<\/h4>\n<p>\nVarem leidis, et WAL kirjed jagunevad loogilisteks ja f\u00fc\u00fcsilisteks. Iga muudatus iga lehe kohta lehe m\u00e4lus genereerib f\u00fc\u00fcsilise WAL kirje. F\u00fc\u00fcsilised kirjed jagunevad omakorda kaheks alaliigiks: lehe hetkeseisu kirjed ja delta kirjed. Iga kord, kui midagi lehe peal muudame ja muudame selle puhtast seisundist m\u00e4\u00e4rdunudks, salvestatakse WAL-is selle lehe t\u00e4ieoige koopia (lehe hetkeseisu kirje \u2014 lehe sneh\u0161ot). Isegi kui me muutsime vaid \u00fchte baitit, salvestatakse WAL-is kirje, mis on veidi suurem kui lehe suurus. Kui me aga muudame midagi juba m\u00e4\u00e4rdunud lehel, genereerib WAL delta kirje, kus on kajastatud ainult muudatused v\u00f5rreldes lehe eelmise seisundiga, kuid mitte kogu lehe sisu. Kuna lehtede seisundi taastamine m\u00e4\u00e4rdunudlt puhtaks toimub kontrollpunkti protsessis, siis p\u00e4rast kontrollpunkti algust koosneb peaaegu k\u00f5ik f\u00fc\u00fcsilised kirjed vaid lehe sneh\u0161otitest (kuna k\u00f5ik lehed on p\u00e4rast kontrollpunkti algust puhtad), seej\u00e4rel, mida l\u00e4hemale j\u00e4rgmisele kontrollpunktile me j\u00f5uame, hakkavad delta kirjed suurendama oma osakaalu ja taas nullitakse j\u00e4rgmise kontrollpunkti alguses. M\u00f5nedes s\u00fcnteetilistes testides on n\u00e4idatud, et lehe sneh\u0161otide osakaal f\u00fc\u00fcsiliste kirje kogumahus ulatub 90%.<\/p>\n<p>WAL lehe sneh\u0161oti kokkut\u00f5mbumise idee seisneb selles, et tihendada lehe sneh\u0161oteid, kasutades olemasolevat t\u00f6\u00f6riista lehtede tihendamiseks (vt disk page compression). Samas salvestatakse WAL kirjed j\u00e4rjestikku append-only re\u017eiimis, seega ei ole kirjeid vaja siduda failis\u00fcsteemi plokkide piiridega, mist\u00f5ttu ei ole meil siin, erinevalt disk page compression mehhanismist, n\u00f5utavad siserakendused, vastavalt toimib see mehhanism mitte ainult Linuxi operatsioonis\u00fcsteemides. Lisaks pole me enam mures selle \u00fcle, kui palju me suudame lehte tihendada. Isegi kui me vabastasime 1 baidi, on see juba positiivne tulemus ja v\u00f5ime salvestada WAL-i tihendatud andmeid, erinevalt disk page compressionist, kus me salvestame tihendatud lehe ainult siis, kui vabastasime rohkem kui 1 failis\u00fcsteemi ploki.<\/p>\n<p>Lehek\u00fcljed on h\u00e4sti kompressitavad andmed, nende osakaal WAL-i kogumahus on v\u00e4ga k\u00f5rge, seega saame, muutes WAL-faili formaati, m\u00e4rkimisv\u00e4\u00e4rselt v\u00e4hendada selle suurust. Kompressioon, sealhulgas loogiliste salvestiste puhul, n\u00f5uaks formaadi muutmist ja \u00fchilduvuse kaotamist, n\u00e4iteks v\u00e4listarbijate jaoks, keda v\u00f5ivad huvitada loogilised salvestised, samas ei tooks see m\u00e4rkimisv\u00e4\u00e4rset v\u00e4hendamist faili maht.<\/p>\n<p>Nii nagu disk page compression\u2019i puhul, saab WAL page snapshot compression\u2019i jaoks kasutada ka ZSTD, LZ4, Snappy kompressiooni algoritme ning SKIP_GARBAGE re\u017eiimi.<\/p>\n<h4>M\u00f5ju j\u00f5udlusele<\/h4>\n<p>\nKuidas pole raske m\u00e4rgata, et WAL page snapshot compression\u2019i otsene lubamine m\u00f5jutab ainult vooge, mis salvestavad andmeid lehe m\u00e4llu, st neid vooge, mis muudavad andmeid vahem\u00e4ludes. WAL-i f\u00fc\u00fcsiliste salvestiste lugemine toimub ainult \u00fchekordselt, hetkel s\u00f5lme t\u00f5stmisel p\u00e4rast kokkuvarisemist (ja ainult juhul, kui kokkuvarisemine toimub kontrollpunkti protsessis).<\/p>\n<p>Andmete muutmise voogudele m\u00f5jub see j\u00e4rgmiselt: saame negatiivse efekti (CPU) t\u00e4nu igal korral lehe kompressimise vajalikule p\u00e4ringule enne ketas kirjutamist ja positiivse efekti (disk IO) t\u00e4nu salvestatud andmete v\u00e4henemisele. Selle tulemusena on siin k\u00f5ik lihtne: kui s\u00fcsteemi j\u00f5udlus s\u00f5ltub CPU-st, saame v\u00e4ikese halvenemise, kui ketas sisestamisest\/v\u00e4ljastamisest \u2014 saame kasvu.<\/p>\n<p>Kaudselt m\u00f5jutab WAL-i suuruse v\u00e4henemine ka positiivselt vooge, mis arhiivivad WAL-segmente ja WAL-i tihendamise vooge.<\/p>\n<p>Reaalsed j\u00f5udlustestid meie keskkonnas s\u00fcnteetiliste andmete p\u00f5hjal n\u00e4itasid v\u00e4ikest kasvu (l\u00e4bivood 10%-15% ja latentsus v\u00e4henes 10%-15%).<\/p>\n<h4>Kuidas sisse l\u00fclitada ja seadistada<\/h4>\n<p>\nApache Ignite miinimumversioon: 2.8. Lubamine ja seadistamine toimub j\u00e4rgmiselt:<\/p>\n<ul>\n<li>Class-path'is peab olema moodul ignite-compression. Vaikimisi asub see Apache Ignite jaotises libs\/optional ja ei kuulu class-path'i. Saate lihtsalt viia kausta \u00fche tasandi v\u00f5rra \u00fclespoole libs ja siis, kui k\u00e4itate ignite.sh kaudu, lisatakse see automaatselt.<\/li>\n<li>P\u00fcsivus peab olema sisse l\u00fclitatud (sisse l\u00fclitatakse kaudu <code>DataRegionConfiguration.setPersistenceEnabled(true)<\/code>).<\/li>\n<li>Tuleb m\u00e4\u00e4rata kompressioonire\u017eiim meetodi kaudu <code>DataStorageConfiguration.setWalPageCompression()<\/code>, vaikimisi on kompressioon v\u00e4lja l\u00fclitatud (re\u017eiim DISABLED).<\/li>\n<li>Valikuliselt saab seadistada kompressiooni astet meetodi kaudu <code>DataStorageConfiguration.setWalPageCompression()<\/code>, lubatud v\u00e4\u00e4rtused iga re\u017eiimi jaoks vaata meetodi javadoc-ist.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nApache Ignite'is arutatud andmekompressioonimehhanisme saab kasutada s\u00f5ltumatult \u00fcksteisest, kuid lubatud on ka nende kombinatsioonid. Nende t\u00f6\u00f6p\u00f5him\u00f5tete m\u00f5istmine aitab m\u00e4\u00e4rata, kui h\u00e4sti need sobivad teie \u00fclesannetele teie keskkonnas ning millest tuleb nende kasutamisel loobuda. Disk page compression on m\u00f5eldud p\u00f5hitallendi kompressiooniks ja v\u00f5ib pakkuda keskmist kompressioonitaset. WAL page snapshot compression pakub keskmist kompressioonitaset WAL-failide jaoks, samas kui see t\u00f5en\u00e4oliselt isegi parandab j\u00f5udlust. WAL compaction ei m\u00f5juta j\u00f5udlust positiivselt, kuid v\u00e4hendab maksimaalselt WAL-failide suurust f\u00fc\u00fcsiliste kirjete eemaldamise kaudu.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Andmekompressioon Apache Ignite'is. Sber'i kogemus | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/81936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=81936"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/81936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/81937"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=81936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=81936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=81936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}