Nagy adatmennyisĂ©gek kezelĂ©se sorĂĄn gyakran felmerĂŒl a lemezhely hiĂĄnyĂĄnak problĂ©mĂĄja. Az egyik megoldĂĄs a tömörĂtĂ©s, amely lehetĆvĂ© teszi, hogy ugyanazon a hardveren megnöveljĂŒk a tĂĄrolĂĄsi kapacitĂĄst. Ebben a cikkben megvizsgĂĄljuk, hogyan mƱködik az adat tömörĂtĂ©se az Apache Ignite-ban. Csak a termĂ©kben megvalĂłsĂtott lemezes tömörĂtĂ©si mĂłdszereket tĂĄrgyaljuk. MĂĄs, pĂ©ldĂĄul hĂĄlĂłzaton vagy memĂłriĂĄban vĂ©gzett tömörĂtĂ©si mĂłdszerek, akĂĄr megvalĂłsĂtott, akĂĄr nem, kĂvĂŒl maradnak.
TehĂĄt, a perzisztensek ĂŒzemmĂłdjĂĄnak bekapcsolĂĄsakor, az adatok cache-be törtĂ©nĆ megvĂĄltoztatĂĄsĂĄnak eredmĂ©nyekĂ©nt az Ignite elkezdi a lemezre ĂrĂĄst:
- A cache-ek tartalma
- ElĆzetes ĂrĂĄsi naplĂł (Write Ahead Log, a tovĂĄbbiakban csak WAL)
A WAL tömörĂtĂ©sĂ©re mĂĄr rĂ©gĂłta lĂ©tezik egy mechanizmus, amelyet WAL compaction-nak hĂvnak. A nemrĂ©giben megjelent Apache Ignite 2.8-ban tovĂĄbbi kĂ©t mechanizmus is megjelent, amelyek lehetĆvĂ© teszik a lemezen lĂ©vĆ adatok tömörĂtĂ©sĂ©t: ez a disk page compression a cache-ek tartalmĂĄnak tömörĂtĂ©sĂ©re Ă©s a WAL page snapshot compression a WAL nĂ©hĂĄny bejegyzĂ©sĂ©nek tömörĂtĂ©sĂ©re. RĂ©szletesebben az alĂĄbbiakban mindhĂĄrom mechanizmust bemutatjuk.
Disk page compression
Hogyan mƱködik ez
ElĆször is, röviden nĂ©zzĂŒk meg, hogyan tĂĄrolja az Ignite az adatokat. Az adatok lapozott memĂłriĂĄban kerĂŒlnek tĂĄrolĂĄsra. A lap mĂ©rete a csomĂłpont indĂtĂĄsakor van megadva, Ă©s nem vĂĄltoztathatĂł meg kĂ©sĆbbi szakaszokban; a lap mĂ©retĂ©nek kettĆ hatvĂĄnyĂĄnak kell lennie, Ă©s meg kell egyeznie a fĂĄjlrendszer blokk mĂ©retĂ©vel. A lapok szĂŒksĂ©g szerint, lemezrĆl kerĂŒlnek betöltĂ©sre a RAM-ba, Ă©s a lemezen lĂ©vĆ adatmennyisĂ©g meghaladhatja a lefoglalt RAM mennyisĂ©gĂ©t. Ha a RAM-ban nem ĂĄll rendelkezĂ©sre elegendĆ hely egy lap betöltĂ©sĂ©hez, a rĂ©gi, mĂĄr nem hasznĂĄlt lapok kerĂŒlnek ki a RAM-bĂłl.
A lemezen az adatok a következĆ formĂĄtumban tĂĄrolĂłdnak: minden cache-csoporthoz kĂŒlön fĂĄjl kĂ©szĂŒl, ebben a fĂĄjlban, a növekvĆ index sorrendjĂ©ben egybeesnek a lapok. A teljes lapazonosĂtĂł tartalmazza a cache-csoport azonosĂtĂłjĂĄt, a partĂciĂł szĂĄmĂĄt Ă©s a lap indexĂ©t a fĂĄjlban. Ăgy a teljes lapazonosĂtĂł alapjĂĄn egyĂ©rtelmƱen azonosĂthatjuk a fĂĄjlt Ă©s a fĂĄjlban lĂ©vĆ offsetet minden lap szĂĄmĂĄra. A lapozott memĂłria felĂ©pĂtĂ©sĂ©rĆl bĆvebben olvashat a Apache Ignite Wiki-ban: .
A lemez oldalmĂ©retƱ tömörĂtĂ©si mechanizmusa, ahogy az a nevĂ©bĆl is kiderĂŒl, az oldal szintjĂ©n mƱködik. Ennek a mechanizmusnak a bekapcsolĂĄsĂĄval a RAM-ban vĂ©gzett adatkezelĂ©s Ășgy törtĂ©nik, ahogy van, bĂĄrmifĂ©le tömörĂtĂ©s nĂ©lkĂŒl, de amikor az oldalakat a RAM-bĂłl a lemezre mentjĂŒk, vĂ©gbemegy a tömörĂtĂ©s.
De minden egyes oldal kĂŒlön-kĂŒlön törtĂ©nĆ tömörĂtĂ©se mĂ©g nem oldja meg a problĂ©mĂĄt, valahogy csökkenteni kell a vĂ©gsĆ adatfĂĄjlok mĂ©retĂ©t. Ha az oldal mĂ©rete nem fixĂĄlt, akkor mĂĄr nem tudjuk az oldalakat egyesĂ©vel a fĂĄjlba Ărni, mert ez egy sor problĂ©mĂĄt okozhat:
- Nem tudjuk az oldal indexĂ©vel kiszĂĄmĂtani az offsetet, ahol az a fĂĄjlban talĂĄlhatĂł.
- Nem vilĂĄgos, hogy mit tegyĂŒnk azokkal az oldalakkal, amelyek nem a fĂĄjl vĂ©gĂ©n helyezkednek el, Ă©s amelyek mĂ©rete vĂĄltozik. Ha az oldal mĂ©rete csökken, akkor a felszabadĂtott hely eltƱnik. Ha az oldal mĂ©rete növekszik, akkor mĂĄr Ășj helyet kell keresni a fĂĄjlban.
- Ha az oldal a fĂĄjlrendszer blokk mĂ©retĂ©hez nem többszörös szĂĄmĂtĂĄssal elmozdul, akkor annak olvasĂĄsĂĄhoz vagy ĂrĂĄsĂĄhoz egy blokk fĂĄjlrendszert is Ă©rinteni kell, ami teljesĂtmĂ©nycsökkenĂ©shez vezethet.
Annak Ă©rdekĂ©ben, hogy ezeket a problĂ©mĂĄkat ne kelljen önĂĄllĂłan megoldani, a disk page compression az Apache Ignite-ban a fĂĄjlrendszer egy mechanizmusĂĄt hasznĂĄlja, amelyet sparse fĂĄjloknak nevezĂŒnk. A sparse (ritka) fĂĄjl olyan fĂĄjl, amelyben a nullĂĄkkal kitöltött terĂŒletek âlyukkĂ©ntâ jelölhetĆk. Ezzel a fĂĄjlrendszer blokkjai nem kerĂŒlnek tĂĄrolĂĄsra ezekhez a lyukakhoz, ezzel helyet takarĂtva meg a lemezen.
Logikus, hogy ahhoz, hogy egy fĂĄjlrendszer blokkot felszabadĂtsunk, a lyuk mĂ©retĂ©nek nagyobbnak vagy egyenlĆnek kell lennie a fĂĄjlrendszer blokk mĂ©retĂ©vel, ami tovĂĄbbi korlĂĄtozĂĄst jelent az Apache Ignite oldalmĂ©retĂ©re: ahhoz, hogy a tömörĂtĂ©s valamilyen hatĂĄst gyakoroljon, az oldal mĂ©retĂ©nek mindenkĂ©ppen nagyobbnak kell lennie a fĂĄjlrendszer blokk mĂ©retĂ©nĂ©l. Ha az oldalmĂ©ret megegyezik a blokk mĂ©retĂ©vel, soha nem tudunk felszabadĂtani egyetlen blokkot sem, mivel ahhoz, hogy egyetlen blokkot felszabadĂtsunk, a tömörĂtett oldalnak 0 bĂĄjtnak kell lennie. Ha az oldal mĂ©rete 2 vagy 4 blokk mĂ©retĂ©vel egyezik meg, akkor mĂĄr legalĂĄbb egy blokkot felszabadĂthatunk, ha az oldalunk legalĂĄbb 50%-kal vagy 75%-kal tömörĂŒl.
TehĂĄt a mechanizmus mƱködĂ©sĂ©nek vĂ©gsĆ leĂrĂĄsa a következĆ: Amikor egy oldalt leĂrunk a lemezre, megprĂłbĂĄljuk tömörĂteni az oldalt. Ha a tömörĂtett oldal mĂ©rete lehetĆvĂ© teszi, hogy egy vagy több fĂĄjlrendszer blokk szabaduljon fel, az oldal tömörĂtett formĂĄban kerĂŒl rögzĂtĂ©sre, a felszabadĂtott blokkok helyĂ©n pedig âlyukâ keletkezik (rendszervhĂvĂĄs törtĂ©nik a "punch hole" cĂmkĂ©vel). fallocate() Ha a tömörĂtett oldal mĂ©rete nem teszi lehetĆvĂ© a blokkok felszabadĂtĂĄsĂĄt, az oldal vĂĄltozatlan formĂĄban, tömörĂtetlenĂŒl kerĂŒl mentĂ©sre. Minden oldal offsetjei ugyanĂșgy szĂĄmĂtĂłdnak, mint tömörĂtĂ©s nĂ©lkĂŒl, az oldal indexĂ©nek Ă©s az oldal mĂ©retĂ©nek szorzatakĂ©nt. Oldalak relokĂĄciĂłjĂĄra nincs szĂŒksĂ©g. Az oldalak offsetjei, mĂ©g tömörĂtĂ©s nĂ©lkĂŒl, a fĂĄjlrendszer blokkjainak hatĂĄrain Ă©rkeznek.

A jelenlegi Ignite implementĂĄciĂł csak Linux operĂĄciĂłs rendszer alatt kĂ©pes sparse fĂĄjlokkal dolgozni, Ăgy a disk page compression csak ezen operĂĄciĂłs rendszer hasznĂĄlatĂĄval kapcsolhatĂł be.
A disk page compressionhoz hasznĂĄlhatĂł tömörĂtĂ©si algoritmusok: ZSTD, LZ4, Snappy. Ezen kĂvĂŒl lĂ©tezik egy ĂŒzemmĂłd (SKIP_GARBAGE), amelyben csak a lapban nem hasznĂĄlt helyet dobjuk el anĂ©lkĂŒl, hogy a fennmaradĂł adatokon tömörĂtĂ©st alkalmaznĂĄnk, ami csökkenti a CPU terhelĂ©sĂ©t a fent emlĂtett algoritmusokhoz kĂ©pest.
HatĂĄs a teljesĂtmĂ©nyre
Sajnos a tĂ©nyleges teljesĂtmĂ©nymĂ©rĂ©seket valĂłs környezetben nem vĂ©geztem, mivel nem tervezzĂŒk, hogy ezt a mechanizmust a termelĂ©sben hasznĂĄljuk, de teoretikusan el lehet gondolkodni, hogy hol veszĂtĂŒnk Ă©s hol nyerĂŒnk.
Ehhez emlĂ©keznĂŒnk kell arra, hogyan törtĂ©nik az oldalak olvasĂĄsa Ă©s ĂrĂĄsa a hozzĂĄfĂ©rĂ©s sorĂĄn:
- OlvasĂĄsi mƱvelet vĂ©grehajtĂĄsakor elĆször a RAM-ban keresik az oldalt, ha a keresĂ©s nem sikeres, az oldal a lemezrĆl betöltĆdik a RAM-ba abban a folyamatban, amelyik az olvasĂĄst vĂ©gzi.
- ĂrĂĄsi mƱvelet vĂ©grehajtĂĄsakor az oldal a RAM-ban piszkoskĂ©nt van megjelölve, ĂĄm az oldal fizikailag nem kerĂŒl azonnal mentĂ©sre a lemezre abban a folyamatban, amelyik az ĂrĂĄst vĂ©gzi. Minden piszkos oldal kĂ©sĆbb, egy checkpoint sorĂĄn kĂŒlön folyamatok ĂĄltal kerĂŒl a lemezre mentĂ©sre.
Tehåt a hatås az olvasåsi mƱveletekre:
- PozitĂv (disk IO), a fĂĄjlrendszer blokkjainak olvasott szĂĄmĂĄnak csökkentĂ©se rĂ©vĂ©n.
- NegatĂv hatĂĄs (CPU), a sparse fĂĄjlokkal valĂł munka sorĂĄn a mƱködĂ©shez szĂŒksĂ©ges tovĂĄbbi terhelĂ©s miatt. LehetsĂ©ges, hogy itt implicit mĂłdon tovĂĄbbi IO mƱveletek is megjelennek a sparse fĂĄjlok bonyolultabb struktĂșrĂĄjĂĄnak mentĂ©sĂ©hez (sajnĂĄlom, de nem ismerem rĂ©szletesen a sparse fĂĄjlok mƱködĂ©sĂ©t).
- NegatĂv hatĂĄs (CPU), a lapok dekompressziĂłjĂĄnak szĂŒksĂ©gessĂ©ge miatt.
- Nincs hatĂĄs a ĂrĂĄsi mƱveletekre.
- Hatås a checkpoint folyamatra (itt minden hasonló a beolvasåsi mƱveletekhez):
- PozitĂv hatĂĄs (disk IO), a fĂĄjlrendszerre Ărt blokkok szĂĄmĂĄnak csökkentĂ©se miatt.
- NegatĂv hatĂĄs (CPU, esetleg disk IO), a sparse fĂĄjlokkal valĂł munka miatt.
- NegatĂv hatĂĄs (CPU), a lapok tömörĂtĂ©sĂ©nek szĂŒksĂ©gessĂ©ge miatt.
Melyik serpenyĆ fog dominĂĄlni? Ez nagyon az környezettĆl fĂŒgg, de hajlok arra, hogy a disk page compression a legtöbb rendszeren inkĂĄbb teljesĂtmĂ©nyromlĂĄshoz vezet. RĂĄadĂĄsul mĂĄs adatbĂĄzis-kezelĆk tesztjei, amelyek hasonlĂł megközelĂtĂ©st hasznĂĄlnak sparse fĂĄjlokkal, teljesĂtmĂ©nycsökkenĂ©st mutatnak a tömörĂtĂ©s bekapcsolĂĄsakor.
Hogyan lehet bekapcsolni Ă©s beĂĄllĂtani.
Ahogy fentebb mĂĄr emlĂtettĂŒk, az Apache Ignite minimĂĄlis verziĂłja, amely tĂĄmogatja a disk page compression-t: 2.8 Ă©s csak Linux operĂĄciĂłs rendszeren tĂĄmogatott. A bekapcsolĂĄs Ă©s beĂĄllĂtĂĄs a következĆkĂ©ppen törtĂ©nik:
- A class-path-ban kell, hogy legyen az ignite-compression modul. AlapĂ©rtelmezĂ©s szerint az Apache Ignite disztribĂșciĂłjĂĄban a libs/optional könyvtĂĄrban talĂĄlhatĂł Ă©s nincs ĐČĐșĐ»ŃŃĐ”Đœ a class-path-ba. EgyszerƱen ĂĄthelyezheti a könyvtĂĄrat egy szinttel feljebb a libs-be, Ă©s akkor az ignite.sh futtatĂĄsakor automatikusan be fog kapcsolĂłdni.
- A PersistenciĂĄnak be kell kapcsolva lennie (Bekapcsolva a
DataRegionConfiguration.setPersistenceEnabled(true)). - Az oldal mĂ©retĂ©nek nagyobbnak kell lennie, mint a fĂĄjlrendszer blokkmĂ©rete (beĂĄllĂthatĂł a
DataStorageConfiguration.setPageSize()). - Minden cache esetĂ©ben, amelynek adatait tömörĂteni kell, a konfigurĂĄciĂłban be kell ĂĄllĂtani a tömörĂtĂ©si mĂłdszert Ă©s (opcionĂĄlisan) a tömörĂtĂ©si szintet (mĂłdszerek
CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()).
WAL tömörĂtĂ©s
Hogyan mƱködik ez
Mi az a WAL Ă©s mire jĂł? Nagyon röviden: ez egy naplĂł, amelybe minden olyan esemĂ©ny bekerĂŒl, ami vĂ©gĂŒl megvĂĄltoztatja az oldal alapĂș tĂĄrolĂłt. ElsĆsorban a visszaĂĄllĂtĂĄs lehetĆsĂ©ge miatt szĂŒksĂ©ges, ha bekövetkezik egy hiba. MielĆtt bĂĄrmely mƱvelet ĂĄtadnĂĄ a vezĂ©rlĂ©st a felhasznĂĄlĂłnak, elĆször fel kell jegyeznie az esemĂ©nyt a WAL-ban, hogy a hiba esetĂ©n kĂ©pes legyen visszajĂĄtszani a naplĂł alapjĂĄn, Ă©s helyreĂĄllĂtani a sikeres vĂĄlaszokat, mĂ©g akkor is, ha ezek a mƱveletek mĂ©g nem tĂŒkrözĆdtek az oldal alapĂș tĂĄrolĂłn a lemezen (feljebb mĂĄr emlĂtĂ©sre kerĂŒlt, hogy az oldal alapĂș tĂĄrolĂłra törtĂ©nĆ tĂ©nyleges ĂrĂĄs a âcsomĂłpontâ nevƱ folyamat sorĂĄn törtĂ©nik, mely kĂ©sleltetve törtĂ©nik kĂŒlön folyamatok ĂĄltal).
A WAL-ban lĂ©vĆ bejegyzĂ©sek logikai Ă©s fizikai kategĂłriĂĄkra oszthatĂłk. A logikai bejegyzĂ©sek maguk a kulcsok Ă©s Ă©rtĂ©kek. A fizikai bejegyzĂ©sek az oldal alapĂș tĂĄrolĂł vĂĄltozĂĄsait tĂŒkrözik. MĂg a logikai bejegyzĂ©sek mĂĄs esetekben is hasznosak lehetnek, a fizikai bejegyzĂ©sek kizĂĄrĂłlag a hiba esetĂ©n törtĂ©nt helyreĂĄllĂtĂĄsra szolgĂĄlnak, Ă©s csak az utolsĂł sikeres csomĂłpont Ăłta szĂŒksĂ©gesek. Itt nem merĂŒlĂŒnk el a rĂ©szletekben, Ă©s nem magyarĂĄzzuk el, hogy miĂ©rt mƱködik Ăgy, de aki Ă©rdeklĆdik, az hivatkozhat az Apache Ignite Wiki mĂĄr emlĂtett cikkĂ©re: .
Egy logikai bejegyzĂ©shez gyakran több fizikai bejegyzĂ©s tartozik. Azaz pĂ©ldĂĄul egy put mƱvelet a gyorsĂtĂłtĂĄrban több oldalra vonatkozik az oldal alapĂș memĂłriĂĄban (az adatokhoz tartozĂł oldal, az index oldalai, a free-list oldalak). NĂ©hĂĄny szintetikus teszt sorĂĄn megĂĄllapĂtottam, hogy a fizikai bejegyzĂ©sek a WAL fĂĄjl mĂ©retĂ©nek akĂĄr 90%-ĂĄt is kitehetik. Eközben nagyon rövid ideig szĂŒksĂ©gesek (alapĂ©rtelmezetten a csomĂłpontok közötti intervallum 3 perc). Logikus lenne, hogy ezektĆl az adatoktĂłl, miutĂĄn elveszĂtik aktualitĂĄsukat, megszabaduljunk. Ezt vĂ©gzi a WAL tömörĂtĂ©si mechanizmus, amely eltĂĄvolĂtja a fizikai bejegyzĂ©seket, Ă©s a zip segĂtsĂ©gĂ©vel tömörĂti a megmaradt logikai bejegyzĂ©seket, ezĂĄltal a fĂĄjl mĂ©rete jelentĆsen csökken (nĂ©ha akĂĄr tĂzszeresĂ©re).
A WAL fizikailag több, ĂĄllandĂł mĂ©retƱ (alapĂ©rtelmezett 64MB) szegmenst tartalmaz (alapĂ©rtelmezett 10), amelyek körkörösen felĂŒlĂrĂłdnak. Amint a jelenlegi szegmens megtelik, a következĆ szegmens kerĂŒl kijelölĂ©sre, mĂg a megtelt szegmens egy kĂŒlön szĂĄlon archĂvĂĄlĂĄsra kerĂŒl. A WAL tömörĂtĂ©se mĂĄr mƱködik az archĂv szegmensekkel. Egy kĂŒlön szĂĄl a checkpoint vĂ©grehajtĂĄsĂĄt is nyomon követi, Ă©s megkezdi a tömörĂtĂ©st az archĂv szegmensek esetĂ©ben, amelyekre mĂĄr nincs szĂŒksĂ©g fizikailag.

HatĂĄs a teljesĂtmĂ©nyre
Mivel a WAL tömörĂtĂ©se kĂŒlön szĂĄlon mƱködik, közvetlen hatĂĄssal nem szabadna, hogy legyen a vĂ©grehajtott mƱveletekre. Ugyanakkor tovĂĄbbi hĂĄttĂ©rterhelĂ©st ad a CPU-ra (tömörĂtĂ©s) Ă©s a lemezre (minden WAL szegmens archivĂĄlĂĄsbĂłl valĂł olvasĂĄsa Ă©s a tömörĂtett szegmensek ĂrĂĄsa), Ăgy ha a rendszer a kapacitĂĄs hatĂĄrĂĄn mƱködik, teljesĂtmĂ©nyromlĂĄst is okozhat.
Hogyan lehet bekapcsolni Ă©s beĂĄllĂtani.
A WAL tömörĂtĂ©st a következĆ tulajdonsĂĄg hasznĂĄlatĂĄval lehet engedĂ©lyezni: WalCompactionEnabled be. DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). EzenkĂvĂŒl a DataStorageConfiguration.setWalCompactionLevel() metĂłdussal beĂĄllĂthatĂł a tömörĂtĂ©s mĂ©rtĂ©ke, ha az alapĂ©rtelmezett Ă©rtĂ©k (BEST_SPEED) nem megfelelĆ.
WAL oldal pillanatkĂ©p tömörĂtĂ©s
Hogyan mƱködik ez
KorĂĄbban mĂĄr megĂĄllapĂtottuk, hogy a WAL bejegyzĂ©sek logikai Ă©s fizikai tĂpusokra oszlanak. Minden egyes vĂĄltozĂĄsnĂĄl az oldal memĂłriĂĄjĂĄban fizikai WAL bejegyzĂ©s keletkezik. A fizikai bejegyzĂ©sek viszont kĂ©t alkategĂłriĂĄra is oszthatĂłk: page snapshot record Ă©s delta record. Minden alkalommal, amikor vĂĄltoztatunk az oldalon, Ă©s tiszta ĂĄllapotĂĄbĂłl piszkos ĂĄllapotĂĄba fordĂtjuk, a WAL-ban egy teljes mĂĄsolatot tĂĄrolunk errĆl az oldalrĂłl (page snapshot record â az oldal pillanatkĂ©pe). MĂ©g ha csak egy bĂĄjtot is vĂĄltoztatunk, a WAL egy, az oldal mĂ©retĂ©nĂ©l kissĂ© nagyobb bejegyzĂ©st tĂĄrol. Ha viszont mĂĄr egy piszkos oldalon vĂĄltoztatunk, a WAL-ban delta record keletkezik, amely csak a korĂĄbbi ĂĄllapothoz viszonyĂtott vĂĄltoztatĂĄsokat tartalmazza, nem az egĂ©sz oldalt. Mivel a piszkos ĂĄllapotĂș oldalak tisztĂĄra törtĂ©nĆ visszaĂĄllĂtĂĄsa a checkpoint folyamat sorĂĄn törtĂ©nik, a checkpoint kezdetĂ©n gyakorlatilag az összes fizikai bejegyzĂ©s csak az oldal pillanatkĂ©peibĆl ĂĄll (mivel az összes oldal a checkpoint kezdetĂ©n tiszta), majd a következĆ checkpoint felĂ© haladva a delta recordok arĂĄnya növekedni kezd, Ă©s ismĂ©t visszaĂĄll a következĆ checkpoint kezdetĂ©n. NĂ©hĂĄny szintetikus teszt mĂ©rĂ©sei azt mutattĂĄk, hogy az oldal pillanatkĂ©peinek arĂĄnya a teljes fizikai bejegyzĂ©sek körĂ©ben elĂ©rheti a 90%-ot.
A WAL page snapshot compression lĂ©nyege, hogy az oldal pillanatkĂ©peit a mĂĄr meglĂ©vĆ oldal tömörĂtĂ©si eszköz hasznĂĄlatĂĄval tömörĂtjĂŒk (lĂĄsd disk page compression). Ebben az esetben a WAL bejegyzĂ©sek sorban, append-only mĂłdban kerĂŒlnek tĂĄrolĂĄsra, Ă©s nincs szĂŒksĂ©g a bejegyzĂ©sek fĂĄjlrendszer blokkjainak hatĂĄraihoz törtĂ©nĆ kötĂ©sĂ©re, ezĂ©rt itt, ellentĂ©tben a disk page compression mechanizmussal, egyĂĄltalĂĄn nem szĂŒksĂ©gesek sparse fĂĄjlok, Ăgy ez a mechanizmus nem csupĂĄn Linux operĂĄciĂłs rendszeren fog mƱködni. TovĂĄbbĂĄ, mĂĄr nem szĂĄmĂt, hogy mennyire tudtuk tömörĂteni az oldalt. MĂ©g ha csak 1 bĂĄjtot is felszabadĂtottunk, az mĂĄr egy pozitĂv eredmĂ©ny, Ă©s a WAL-ban eltĂĄrolhatjuk a tömörĂtett adatokat, ellentĂ©tben a disk page compression-nel, ahol a tömörĂtett oldalt csak akkor mentjĂŒk el, ha több mint 1 fĂĄjlrendszer blokkot szabadĂtottunk fel.
Az oldalak jĂłl tömörĂthetĆ adatok, rĂ©szarĂĄnyuk a WAL összes mennyisĂ©gĂ©ben nagyon magas, Ăgy a WAL fĂĄjl formĂĄtumĂĄnak megvĂĄltoztatĂĄsa nĂ©lkĂŒl jelentĆs mĂ©retcsökkentĂ©st Ă©rhetĂŒnk el. A logikai bejegyzĂ©sek tömörĂtĂ©se formĂĄtumvĂĄltoztatĂĄst Ă©s kompatibilitĂĄs elvesztĂ©sĂ©t igĂ©nyelnĂ©, pĂ©ldĂĄul a kĂŒlsĆ felhasznĂĄlĂłk szĂĄmĂĄra, akiket a logikai bejegyzĂ©sek Ă©rdekelhetnek, ugyanakkor nem hozna jelentĆs csökkenĂ©st a fĂĄjl mĂ©retĂ©ben.
A WAL oldal pillanatfelvĂ©tel tömörĂtĂ©shez, akĂĄrcsak a lemezoldal tömörĂtĂ©shez, a ZSTD, LZ4, Snappy tömörĂtĂ©si algoritmusok, valamint a SKIP_GARBAGE mĂłd hasznĂĄlhatĂł.
HatĂĄs a teljesĂtmĂ©nyre
Mint könnyen Ă©szlelhetĆ, a WAL oldal pillanatfelvĂ©tel tömörĂtĂ©s közvetlen aktivĂĄlĂĄsa csak azokra a szĂĄlakra hat, amelyek adatokat Ărnak a lapmemĂłriĂĄba, azaz azokra, amelyek mĂłdosĂtjĂĄk az adatokat a gyorsĂtĂłtĂĄrakban. A WAL fizikai bejegyzĂ©sekbĆl valĂł olvasĂĄs csak egyszeri alkalommal törtĂ©nik, a csomĂłpont leĂĄllĂĄsĂĄt követĆen (Ă©s csak ha a leĂĄllĂĄs a checkpoint folyamatĂĄban törtĂ©nt).
Ez a szĂĄlakra, amelyek adatokat mĂłdosĂtanak, a következĆ mĂłdon hat: negatĂv hatĂĄst (CPU) okoz, mivel minden alkalommal tömörĂteni kell az oldalt, mielĆtt az lemezre kerĂŒl, Ă©s pozitĂv hatĂĄst (diszk IO) a ĂrandĂł adatok mennyisĂ©gĂ©nek csökkentĂ©sĂ©vel. Itt tehĂĄt minden egyszerƱ: ha a rendszer teljesĂtmĂ©nye a CPU ĂĄltal kihĂvott, kis mĂ©rtĂ©kƱ degradĂĄciĂłt tapasztalunk, ha a lemez ĂrĂĄs/olvashatĂłsĂĄga, akkor növekedĂ©st.
Közvetetten a WAL mĂ©retĂ©nek csökkentĂ©se szintĂ©n (pozitĂvan) hat azokra a szĂĄlakra, amelyek a WAL szegmenseit archivĂĄljĂĄk, Ă©s a WAL tömörĂtĂ©si szĂĄlakra.
ValĂłs teljesĂtmĂ©nytesztek a környezetĂŒnkben szintetikus adatokon kis növekedĂ©st mutattak (a throughput 10%-15%-kal nĆtt, a latencia 10%-15%-kal csökkent).
Hogyan lehet bekapcsolni Ă©s beĂĄllĂtani.
Az Apache Ignite minimĂĄlis verziĂłja: 2.8. A bekapcsolĂĄs Ă©s beĂĄllĂtĂĄs a következĆ mĂłdon törtĂ©nik:
- A class-path-ban kell, hogy legyen az ignite-compression modul. AlapĂ©rtelmezĂ©s szerint az Apache Ignite disztribĂșciĂłjĂĄban a libs/optional könyvtĂĄrban talĂĄlhatĂł Ă©s nincs ĐČĐșĐ»ŃŃĐ”Đœ a class-path-ba. EgyszerƱen ĂĄthelyezheti a könyvtĂĄrat egy szinttel feljebb a libs-be, Ă©s akkor az ignite.sh futtatĂĄsakor automatikusan be fog kapcsolĂłdni.
- A PersistenciĂĄnak be kell kapcsolva lennie (Bekapcsolva a
DataRegionConfiguration.setPersistenceEnabled(true)). - A tömörĂtĂ©si mĂłdot a következĆ metĂłdussal kell megadni
DataStorageConfiguration.setWalPageCompression(), alapĂ©rtelmezĂ©s szerint a tömörĂtĂ©s ki van kapcsolva (DISABLED mĂłd). - OpcionĂĄlisan megadhatjuk a tömörĂtĂ©s mĂ©rtĂ©kĂ©t a következĆ metĂłdussal
DataStorageConfiguration.setWalPageCompression(), a megengedett értékek minden egyes módszerhez a metódus javadocjåban talålhatók.
ZĂĄrĂĄs
Az Apache Ignite-ban tĂĄrgyalt adattömörĂtĂ©si mechanizmusok fĂŒggetlenĂŒl is hasznĂĄlhatĂłk, de bĂĄrmilyen kombinĂĄciĂłjuk is megengedett. Az elvĂŒk megĂ©rtĂ©se lehetĆvĂ© teszi, hogy meghatĂĄrozzuk, mennyire felelnek meg a feladatainknak a környezetĂŒnkben, Ă©s mivel kell kompromisszumot kötnĂŒnk a hasznĂĄlatuk sorĂĄn. A lemezoldali tömörĂtĂ©s a fĆ tĂĄrolĂłnak a tömörĂtĂ©sĂ©re szolgĂĄl, Ă©s ĂĄtlagos tömörĂtĂ©si fokot biztosĂthat. A WAL oldal pillanatfelvĂ©teli tömörĂtĂ©s ĂĄtlagos tömörĂtĂ©si fokot ad a WAL fĂĄjloknak, miközben valĂłszĂnƱleg mĂ©g a teljesĂtmĂ©nyt is javĂtja. A WAL tömörĂtĂ©s nem befolyĂĄsolja pozitĂvan a teljesĂtmĂ©nyt, de maximĂĄlisan csökkenti a WAL fĂĄjlok mĂ©retĂ©t a fizikai rekordok eltĂĄvolĂtĂĄsĂĄval.
ForrĂĄs: habr.com
