{"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\/sv\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","title":{"rendered":"Data komprimering i Apache Ignite. Erfarenhet fr\u00e5n Sber","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Data komprimering i Apache Ignite. Erfarenhet fr\u00e5n Sber\" src=\"\/wp-content\/uploads\/2020\/05\/0e26c686b1f29e88e6be4b8df81ab668.jpg\" style=\"display:block;margin: 0 auto;\" \/>N\u00e4r man arbetar med stora datam\u00e4ngder kan problemet med brist p\u00e5 diskutrymme ibland bli akut. Ett av s\u00e4tten att l\u00f6sa detta problem \u00e4r komprimering, vilket g\u00f6r att man kan \u00f6ka lagringskapaciteten p\u00e5 samma h\u00e5rdvara. I denna artikel kommer vi att titta p\u00e5 hur datakomprimering fungerar i Apache Ignite. Endast de metoder som \u00e4r implementerade i produkten f\u00f6r diskkomprimering kommer att behandlas. Andra metoder f\u00f6r datakomprimering (\u00f6ver n\u00e4tverket, i minnet) b\u00e5de de som \u00e4r implementerade och de som inte \u00e4r, kommer att h\u00e5llas utanf\u00f6r ramen.<\/p>\n<p>S\u00e5, n\u00e4r persistensl\u00e4get \u00e4r aktiverat, b\u00f6rjar Ignite skriva till disken som ett resultat av \u00e4ndringar i cacharna:<\/p>\n<ol>\n<li>Inneh\u00e5llet i cacharna<\/li>\n<li>F\u00f6rhandsgranskningslogg (Write Ahead Log, h\u00e4r kallad WAL)<\/li>\n<\/ol>\n<p>\nDet har funnits en mekanism f\u00f6r att komprimera WAL under en l\u00e4ngre tid, k\u00e4nd som WAL-komprimering. I den nyligen sl\u00e4ppta Apache Ignite 2.8 har tv\u00e5 ytterligare mekanismer introducerats som g\u00f6r det m\u00f6jligt att komprimera data p\u00e5 disken: disk sida komprimering f\u00f6r att komprimera inneh\u00e5llet i cacharna och WAL sida snapshot komprimering f\u00f6r att komprimera vissa poster i WAL. Mer information om dessa tre mekanismer finns nedan.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Disk sida komprimering<\/h3>\n<p><\/p>\n<h4>Hur det fungerar<\/h4>\n<p>\nF\u00f6r att b\u00f6rja med ska vi kort g\u00e5 igenom hur Ignite lagrar data. F\u00f6r lagring anv\u00e4nds sidminne. Sidstorleken s\u00e4tts vid start av noden och kan inte \u00e4ndras senare, dessutom m\u00e5ste sidstorleken vara en potenti av tv\u00e5 och vara ett multipel av storleken p\u00e5 filsystemets block. Sidor laddas in i RAM fr\u00e5n disken vid behov, storleken p\u00e5 data p\u00e5 disken kan \u00f6verskrida den tilldelade RAM-kapaciteten. Om det saknas utrymme i RAM f\u00f6r att ladda en sida fr\u00e5n disken kommer gamla, redan oanv\u00e4nda sidor att tr\u00e4ngas ut fr\u00e5n RAM.<\/p>\n<p>P\u00e5 disken lagras data p\u00e5 f\u00f6ljande s\u00e4tt: f\u00f6r varje partition av varje cachegrupp skapas en separat fil, i denna fil kommer sidor att f\u00f6ljas i ordning av stigande index. Det fullst\u00e4ndiga identifieringsnumret f\u00f6r en sida inneh\u00e5ller identifieringsnumret f\u00f6r cachegruppen, partitionsnumret och sidans index i filen. P\u00e5 s\u00e5 s\u00e4tt kan vi entydigt best\u00e4mma filen och offsetet i filen f\u00f6r varje sida utifr\u00e5n det fullst\u00e4ndiga identifieringsnumret. F\u00f6r mer information om strukturen av sidminnet kan du l\u00e4sa artikeln p\u00e5 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 bakom kulisserna<\/a><\/noindex>.<\/p>\n<p>Disk page compression, som namnet antyder, fungerar p\u00e5 sidor-niv\u00e5. N\u00e4r denna mekanism \u00e4r aktiverad, hanteras data i RAM som den \u00e4r, utan n\u00e5gon komprimering, men i \u00f6gonblicket d\u00e5 sidor sparas fr\u00e5n RAM till disk, sker en komprimering av dem.<\/p>\n<p>Men att komprimera varje sida individuellt l\u00f6ser fortfarande inte problemet, vi m\u00e5ste p\u00e5 n\u00e5got s\u00e4tt minska storleken p\u00e5 de slutgiltiga filerna med data. Om storleken p\u00e5 sidan slutar vara fast, kan vi inte l\u00e4ngre skriva sidor till fil en efter en, eftersom detta kan ge upphov till en rad problem:<\/p>\n<ul>\n<li>Vi kommer inte att kunna ber\u00e4kna offset f\u00f6r sidan i filen med hj\u00e4lp av sidans index.<\/li>\n<li>Det \u00e4r oklart vad vi ska g\u00f6ra med sidor som inte \u00e4r i slutet av filen och som \u00e4ndrar sin storlek. Om storleken p\u00e5 sidan minskar, f\u00f6rsvinner utrymmet som den frigjorde. Om storleken p\u00e5 sidan \u00f6kar, m\u00e5ste man leta efter en ny plats f\u00f6r den i filen.<\/li>\n<li>Om sidan flyttas ett antal byte som inte \u00e4r delbart med filsystemets blockstorlek, kommer en extra block av filsystemet att ber\u00f6ras f\u00f6r att l\u00e4sa eller skriva den, vilket kan leda till prestandaf\u00f6rs\u00e4mring.<\/li>\n<\/ul>\n<p>\nF\u00f6r att undvika att hantera dessa problem p\u00e5 egen niv\u00e5, anv\u00e4nder disk page compression i Apache Ignite en filsystemsmekanism kallad sparse filer. En sparse (sparse) fil \u00e4r en fil d\u00e4r vissa regioner, som fyllts med nollor, kan markeras som \"h\u00e5l\". Inga filsystemblock kommer att allokeras f\u00f6r att lagra dessa h\u00e5l, vilket resulterar i diskutrymmesbesparing.<\/p>\n<p>Det \u00e4r logiskt att f\u00f6r att frig\u00f6ra ett filsystemblock m\u00e5ste storleken p\u00e5 h\u00e5let vara st\u00f6rre \u00e4n eller lika med storleken p\u00e5 filsystemets block, vilket l\u00e4gger till en ytterligare begr\u00e4nsning f\u00f6r sidstorleken i Apache Ignite: f\u00f6r att komprimeringen ska ha n\u00e5gon effekt m\u00e5ste storleken p\u00e5 sidan vara strikt st\u00f6rre \u00e4n storleken p\u00e5 filsystemets block. Om storleken p\u00e5 sidan \u00e4r lika med storleken p\u00e5 blocket, kan vi aldrig frig\u00f6ra n\u00e5got block, eftersom f\u00f6r att frig\u00f6ra ett enda block m\u00e5ste den komprimerade sidan ta upp 0 byte. Om storleken p\u00e5 sidan d\u00e4remot \u00e4r lika med storleken p\u00e5 2 eller 4 block, kan vi frig\u00f6ra minst ett block om v\u00e5r sida komprimeras med minst 50% eller 75% respektive.<\/p>\n<p>S\u00e5ledes \u00e4r den slutliga beskrivningen av mekanismens arbete: N\u00e4r en sida skrivs till disken g\u00f6rs ett f\u00f6rs\u00f6k att komprimera sidan. Om den komprimerade sidans storlek till\u00e5ter att en eller flera block av filsystemet frig\u00f6rs, skrivs sidan i komprimerad form, och p\u00e5 platsen f\u00f6r de frigjorda blocken skapas en \"h\u00e5l\" (ett systemanrop med flaggan \"punch hole\"). <code>fallocate()<\/code> Om den komprimerade sidans storlek inte till\u00e5ter block att frig\u00f6ras, sparas sidan som den \u00e4r, i okomprimerad form. Alla sidoffsetar ber\u00e4knas p\u00e5 samma s\u00e4tt som utan kompression, genom att multiplicera sidans index med sidans storlek. Ingen omlokalisering av sidor kr\u00e4vs p\u00e5 egen hand. Sidoffsetar, liksom utan kompression, hamnar vid gr\u00e4nserna f\u00f6r filsystemets block.<\/p>\n<p><img decoding=\"async\" alt=\"Data komprimering i Apache Ignite. Erfarenhet fr\u00e5n Sber\" src=\"\/wp-content\/uploads\/2020\/05\/6a6c6ad83d3b8591f76b9343ff067746.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nI den aktuella implementationen kan Ignite endast arbeta med sparsamma filer under Linux OS; d\u00e4rmed kan disk sidkompression endast aktiveras vid anv\u00e4ndning av Ignite p\u00e5 detta operativsystem.<\/p>\n<p>Komprimeringsalgoritmer som kan anv\u00e4ndas f\u00f6r disk sidkompression: ZSTD, LZ4, Snappy. Dessutom finns det en driftl\u00e4ge (SKIP_GARBAGE), d\u00e4r endast oanv\u00e4nd plats p\u00e5 sidan tas bort utan att kompression till\u00e4mpas p\u00e5 de \u00e5terst\u00e5ende uppgifterna, vilket g\u00f6r att CPU-belastningen minskar j\u00e4mf\u00f6rt med de tidigare n\u00e4mnda algoritmerna.<\/p>\n<h4>P\u00e5verkan p\u00e5 prestanda <\/h4>\n<p>\nTyv\u00e4rr har jag inte gjort n\u00e5gra faktiska prestandam\u00e4tningar p\u00e5 verkliga plattformar, eftersom vi inte planerar att anv\u00e4nda denna mekanism i produktion, men vi kan teoretiskt diskutera var vi kommer att f\u00f6rlora och var vi kommer att vinna.<\/p>\n<p>F\u00f6r detta beh\u00f6ver vi minnas hur l\u00e4sning och skrivning av sidor utf\u00f6rs n\u00e4r vi g\u00f6r f\u00f6rfr\u00e5gningar till dem:<\/p>\n<ul>\n<li>Vid l\u00e4soperationen s\u00f6ks sidan f\u00f6rst i RAM. Om s\u00f6kningen misslyckas, laddas sidan in i RAM fr\u00e5n disken av samma tr\u00e5d som g\u00f6r l\u00e4sningen.<\/li>\n<li>Vid skrivoperationen markeras sidan i RAM som smutsig, men den fysiska sparingen av sidan till disken sker inte direkt inom tr\u00e5den som utf\u00f6r skrivningen. Alla smutsiga sidor sparas till disken senare under checkpoint-processen av separata tr\u00e5dar.<\/li>\n<\/ul>\n<p>\nS\u00e5ledes p\u00e5verkas l\u00e4soperationer:<\/p>\n<ul>\n<li>Positivt (disk IO), genom att antalet l\u00e4sta block av filsystemet minskar.<\/li>\n<li>Negativt (CPU) p\u00e5 grund av den extra belastning som operativsystemet beh\u00f6ver f\u00f6r att hantera sparse-filer. Det kan ocks\u00e5 finnas ytterligare IO-operationer f\u00f6r att bevara en mer komplex struktur av sparse-filer (jag \u00e4r tyv\u00e4rr inte bekant med alla detaljer kring hur sparse-filer fungerar).<\/li>\n<li>Negativt (CPU) p\u00e5 grund av behovet av att dekomprimera sidor.<\/li>\n<li>Ingen p\u00e5verkan p\u00e5 skrivoperationer.<\/li>\n<li>P\u00e5verkan p\u00e5 checkpoint-processen (liknande l\u00e4soperationer):<\/li>\n<li>Positivt (disk IO) p\u00e5 grund av minskningen av antalet skrivna block i filsystemet.<\/li>\n<li>Negativt (CPU, m\u00f6jligtvis disk IO) p\u00e5 grund av hantering av sparse-filer.<\/li>\n<li>Negativt (CPU) p\u00e5 grund av behovet av att komprimera sidor.<\/li>\n<\/ul>\n<p>\nVilken sk\u00e5l v\u00e4ger tyngre? Detta beror v\u00e4ldigt mycket p\u00e5 milj\u00f6n, men jag lutar \u00e5t att disk page compression snarare kommer att leda till prestandadegradering p\u00e5 de flesta system. Dessutom visar tester p\u00e5 andra databashanterare som anv\u00e4nder liknande metoder med sparse-filer att prestandan minskar med aktiverad komprimering.<\/p>\n<h4>Hur man aktiverar och konfigurerar<\/h4>\n<p>\nSom n\u00e4mnts tidigare \u00e4r den minimi version av Apache Ignite som st\u00f6der disk page compression: 2.8 och st\u00f6ds endast av operativsystemet Linux. Aktivering och konfiguration g\u00f6rs p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<ul>\n<li>I class-path m\u00e5ste modulen ignite-compression finnas. Som standard ligger den i distributionspaketet av Apache Ignite i katalogen libs\/optional och ing\u00e5r inte i class-path. Du kan helt enkelt flytta katalogen en niv\u00e5 upp i libs s\u00e5 att den automatiskt inkluderas vid k\u00f6rning genom ignite.sh.<\/li>\n<li>Persistens m\u00e5ste vara aktiverat (aktiveras genom <code>DataRegionConfiguration.setPersistenceEnabled(true))<\/code>.<\/li>\n<li>Sidstorleken m\u00e5ste vara st\u00f6rre \u00e4n blockstorleken i filsystemet (detta kan st\u00e4llas in med <code>DataStorageConfiguration.setPageSize()<\/code> ).<\/li>\n<li>F\u00f6r varje cache vars data beh\u00f6ver komprimeras, m\u00e5ste komprimeringsmetod och (valfritt) komprimeringsniv\u00e5 st\u00e4llas in i konfigurationen (metoderna <code>CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()<\/code>).<\/li>\n<\/ul>\n<p><\/p>\n<h3>WAL-komprimering<\/h3>\n<p><\/p>\n<h4>Hur det fungerar<\/h4>\n<p>\nVad \u00e4r WAL och varf\u00f6r beh\u00f6vs det? Mycket kort: det \u00e4r en logg d\u00e4r alla h\u00e4ndelser som i slut\u00e4ndan f\u00f6r\u00e4ndrar sidlagringen registreras. Det beh\u00f6vs f\u00f6rst och fr\u00e4mst f\u00f6r att kunna \u00e5terst\u00e4lla vid ett fel. Varje operation m\u00e5ste f\u00f6rst registrera en h\u00e4ndelse i WAL innan den ger kontrollen tillbaka till anv\u00e4ndaren, f\u00f6r att kunna \u00e5terskapa alla operationer som anv\u00e4ndaren fick ett framg\u00e5ngsrikt svar p\u00e5, \u00e4ven om dessa operationer inte hann \u00e5terspeglas i sidlagringen p\u00e5 disken (det har tidigare beskrivits att den faktiska skrivningen till sidlagringen g\u00f6rs i en process som kallas \"checkpoint\" med viss f\u00f6rdr\u00f6jning av separata tr\u00e5dar).<\/p>\n<p>Posterna i WAL delas upp i logiska och fysiska. Logiska \u00e4r sj\u00e4lva nycklarna och v\u00e4rdena. Fysiska reflekterar f\u00f6r\u00e4ndringar i sidorna i sidlagringen. Om logiska poster kan vara anv\u00e4ndbara f\u00f6r vissa andra situationer, s\u00e5 beh\u00f6vs fysiska poster endast f\u00f6r att \u00e5terst\u00e4lla vid ett fel och de poster som beh\u00f6vs \u00e4r endast fr\u00e5n den senaste framg\u00e5ngsrika checkpointen. H\u00e4r kommer vi inte att g\u00e5 in p\u00e5 detaljer och f\u00f6rklara varf\u00f6r det fungerar just s\u00e5, men de som \u00e4r intresserade kan v\u00e4nda sig till den redan n\u00e4mnda artikeln p\u00e5 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 bakom kulisserna<\/a><\/noindex>.<\/p>\n<p>F\u00f6r varje logisk post f\u00f6rekommer ofta flera fysiska poster. Det vill s\u00e4ga att till exempel en put-operation i cache p\u00e5verkar flera sidor i sidminnet (sidan med sj\u00e4lva datan, sidorna med index och sidorna med free-listor). I vissa syntetiska tester har jag sett att fysiska poster utgjorde upp till 90% av storleken p\u00e5 WAL-filen. Dessutom beh\u00f6vs de bara under en mycket kort tid (standardintervallet mellan checkpoints \u00e4r 3 minuter). Det skulle vara logiskt att bli av med dessa data efter att de har f\u00f6rlorat sin aktualitet. Det \u00e4r exakt vad mekanismen f\u00f6r WAL-komprimering g\u00f6r, den tar bort fysiska poster och komprimerar de kvarvarande logiska posterna med hj\u00e4lp av zip, vilket resulterar i en mycket betydande minskning av filstorleken (ibland med tiodubblat resultat).<\/p>\n<p>WAL best\u00e5r fysiskt av flera segment (som standard 10) av fast storlek (som standard 64MB), som skrivs \u00f6ver p\u00e5 ett cykliskt s\u00e4tt. N\u00e4r det aktuella segmentet \u00e4r fullt tilldelas det n\u00e4sta segmentet, och det fyllda segmentet kopieras till arkivet i en separat str\u00f6m. WAL-komprimering fungerar redan med arkiverade segment. Det \u00f6vervakar ocks\u00e5 checkpoints i en separat str\u00f6m och p\u00e5b\u00f6rjar komprimering av arkiverade segment d\u00e4r fysiska poster inte l\u00e4ngre beh\u00f6vs.<\/p>\n<p><img decoding=\"async\" alt=\"Data komprimering i Apache Ignite. Erfarenhet fr\u00e5n Sber\" src=\"\/wp-content\/uploads\/2020\/05\/ca8690ba7a350df9530f2ccf01c90975.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>P\u00e5verkan p\u00e5 prestanda<\/h4>\n<p>\nEftersom WAL-komprimering k\u00f6rs i en separat tr\u00e5d ska det inte ha n\u00e5gon direkt inverkan p\u00e5 de p\u00e5g\u00e5ende operationerna. Men det ger \u00e4nd\u00e5 en extra bakgrundsbelastning p\u00e5 CPU:n (komprimering) och disken (l\u00e4sning av varje WAL-segment fr\u00e5n arkivet och skrivning av komprimerade segment), s\u00e5 om systemet arbetar p\u00e5 gr\u00e4nsen av sina m\u00f6jligheter kan det ocks\u00e5 leda till en nedg\u00e5ng i prestanda.<\/p>\n<h4>Hur man aktiverar och konfigurerar<\/h4>\n<p>\nWAL-komprimering kan aktiveras med hj\u00e4lp av egenskapen <code>WalCompactionEnabled<\/code> p\u00e5 <code>DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)<\/code>). Dessutom kan man med metoden DataStorageConfiguration.setWalCompactionLevel() st\u00e4lla in komprimeringsgraden om standardv\u00e4rdet (BEST_SPEED) inte \u00e4r tillfredsst\u00e4llande.<\/p>\n<h3>WAL sidavsnitt komprimering<\/h3>\n<p><\/p>\n<h4>Hur det fungerar<\/h4>\n<p>\nTidigare har vi redan klargjort att WAL-poster delas in i logiska och fysiska. F\u00f6r varje \u00e4ndring av varje sida i sidminnet skapas en fysisk WAL-post. Fysiska poster delas ocks\u00e5 in i tv\u00e5 underkategorier: page snapshot record och delta record. Varje g\u00e5ng vi \u00e4ndrar n\u00e5got p\u00e5 en sida och \u00f6verf\u00f6r den fr\u00e5n ett rent tillst\u00e5nd till ett smutsigt, sparas en fullst\u00e4ndig kopia av denna sida i WAL (page snapshot record \u2013 sid snapshot). \u00c4ven om vi endast har \u00e4ndrat en enda byte kommer en post som \u00e4r n\u00e5got st\u00f6rre \u00e4n storleken p\u00e5 sidan att sparas i WAL. Om vi d\u00e4remot \u00e4ndrar n\u00e5got p\u00e5 en redan smutsig sida skapas en delta record i WAL, vilken endast \u00e5terspeglar \u00e4ndringarna i j\u00e4mf\u00f6relse med det f\u00f6reg\u00e5ende tillst\u00e5ndet f\u00f6r sidan, men inte hela sidan. Eftersom \u00e5terst\u00e4llningen av sidors status fr\u00e5n smutsigt till rent utf\u00f6rs under checkpoint-processen, kommer n\u00e4stan alla fysiska poster omedelbart efter att checkpointen har p\u00e5b\u00f6rjats att best\u00e5 av endast sid snapshots (eftersom alla sidor omedelbart efter att checkpointen har p\u00e5b\u00f6rjats \u00e4r rena), och sedan, i takt med att vi n\u00e4rmar oss n\u00e4sta checkpoint, b\u00f6rjar andelen delta records v\u00e4xa och \u00e5terst\u00e4lls igen vid b\u00f6rjan av n\u00e4sta checkpoint. M\u00e4tningar fr\u00e5n vissa syntetiska tester visade att andelen sid snapshots i den totala m\u00e4ngden fysiska poster n\u00e5r upp till 90%.<\/p>\n<p>Id\u00e9n med WAL page snapshot kompression g\u00e5r ut p\u00e5 att komprimera sid snapshots med hj\u00e4lp av ett redan existerande verktyg f\u00f6r komprimering av sidor (se disk page compression). Under tiden sparas WAL-poster sekventiellt i ett append-only-l\u00e4ge och det finns inget behov av att binda poster till gr\u00e4nserna f\u00f6r filsystemets block, s\u00e5 h\u00e4r, till skillnad fr\u00e5n mekanismen f\u00f6r disk page compression, har vi inte l\u00e4ngre n\u00e5got behov av sparsamma filer, vilket inneb\u00e4r att denna mekanism \u00e4ven fungerar p\u00e5 operativsystem som inte \u00e4r Linux. Dessutom spelar det ingen roll hur mycket vi lyckas komprimera sidan. \u00c4ven om vi frig\u00f6r 1 byte \u00e4r det redan ett positivt resultat och vi kan lagra de komprimerade uppgifterna i WAL, till skillnad fr\u00e5n disk page compression, d\u00e4r vi endast sparar en komprimerad sida om vi har frigjort mer \u00e4n 1 block av filsystemet.<\/p>\n<p>Sidor \u00e4r l\u00e4tt komprimerbara data, deras andel av den totala storleken p\u00e5 WAL \u00e4r mycket h\u00f6g, s\u00e5 genom att inte \u00e4ndra formatet p\u00e5 WAL-filen kan vi uppn\u00e5 en betydande minskning av dess storlek. Komprimering av logiska poster skulle kr\u00e4va en \u00e4ndring av formatet och f\u00f6rlust av kompatibilitet, till exempel f\u00f6r externa konsumenter som kan vara intresserade av logiska poster, utan att det skulle medf\u00f6ra en betydande minskning av filstorleken.<\/p>\n<p>Precis som f\u00f6r diskpage-komprimering kan algoritmer som ZSTD, LZ4, Snappy och \u00e4ven SKIP_GARBAGE-l\u00e4get anv\u00e4ndas f\u00f6r WAL page snapshot-komprimering.<\/p>\n<h4>P\u00e5verkan p\u00e5 prestanda<\/h4>\n<p>\nSom det \u00e4r l\u00e4tt att se, p\u00e5verkar direkt aktiveringen av WAL page snapshot-komprimering endast de tr\u00e5dar som skriver data i sidminnet, det vill s\u00e4ga de tr\u00e5dar som \u00e4ndrar data i cacheminnen. L\u00e4sning fr\u00e5n WAL fysiska poster sker endast en g\u00e5ng, vid uppstart av noden efter ett fel (och endast om ett fel intr\u00e4ffar under en checkpoint).<\/p>\n<p>Det p\u00e5verkar de tr\u00e5dar som \u00e4ndrar data p\u00e5 f\u00f6ljande s\u00e4tt: vi f\u00e5r en negativ effekt (CPU) p\u00e5 grund av behovet av att komprimera sidan varje g\u00e5ng innan vi skriver till disk och en positiv effekt (disk IO) p\u00e5 grund av minskning av m\u00e4ngden skrivna data. D\u00e4rf\u00f6r \u00e4r det enkelt: om systemets prestanda begr\u00e4nsas av CPU f\u00e5r vi en liten nedg\u00e5ng, om det \u00e4r disk I\/O f\u00e5r vi en \u00f6kning.<\/p>\n<p>Indirekt minskning av WAL-storleken p\u00e5verkar ocks\u00e5 (positivt) de tr\u00e5dar som arkiverar WAL-segment och de tr\u00e5dar som ansvarar f\u00f6r WAL-komprimering.<\/p>\n<p>Riktiga prestandatester i v\u00e5r milj\u00f6 med syntetiska data visade en liten \u00f6kning (genomstr\u00f6mningen \u00f6kade med 10%-15%, latensen minskade med 10%-15%).<\/p>\n<h4>Hur man aktiverar och konfigurerar<\/h4>\n<p>\nMinimikrav f\u00f6r Apache Ignite: 2.8. Aktivering och konfiguration g\u00f6rs p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<ul>\n<li>I class-path m\u00e5ste modulen ignite-compression finnas. Som standard ligger den i distributionspaketet av Apache Ignite i katalogen libs\/optional och ing\u00e5r inte i class-path. Du kan helt enkelt flytta katalogen en niv\u00e5 upp i libs s\u00e5 att den automatiskt inkluderas vid k\u00f6rning genom ignite.sh.<\/li>\n<li>Persistens m\u00e5ste vara aktiverat (aktiveras genom <code>DataRegionConfiguration.setPersistenceEnabled(true)<\/code>).<\/li>\n<li>Komprimeringsl\u00e4get m\u00e5ste specificeras med metoden <code>DataStorageConfiguration.setWalPageCompression()<\/code>, komprimering \u00e4r som standard avst\u00e4ngt (l\u00e4ge DISABLED).<\/li>\n<li>Valfritt kan graden av komprimering specificeras med metoden <code>DataStorageConfiguration.setWalPageCompression()<\/code>, se javadoc f\u00f6r metoden f\u00f6r till\u00e5tna v\u00e4rden f\u00f6r varje l\u00e4ge.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Slutsats<\/h3>\n<p>\nDe behandlade mekanismerna f\u00f6r datakompression i Apache Ignite kan anv\u00e4ndas oberoende av varandra, men alla deras kombinationer \u00e4r ocks\u00e5 till\u00e5tna. Att f\u00f6rst\u00e5 principerna f\u00f6r deras funktion kommer att hj\u00e4lpa dig att avg\u00f6ra hur v\u00e4l de passar dina uppgifter i din milj\u00f6 och vad du eventuellt m\u00e5ste kompromissa med vid anv\u00e4ndning. Disk sidkompression \u00e4r avsedd f\u00f6r att komprimera det prim\u00e4ra lagret och kan ge en genomsnittlig kompressionsgrad. WAL sid snapshot-kompression kommer att ge en genomsnittlig kompressionsgrad f\u00f6r WAL-filer, och det \u00e4r troligt att det till och med \u00f6kar prestandan. WAL-kompaktion kommer inte att p\u00e5verka prestandan positivt, men kommer att maximera minskningen av storleken p\u00e5 WAL-filer genom att ta bort fysiska poster.<br \/>\n<br \/>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Datakompression i Apache Ignite. Erfarenhet fr\u00e5n Sber | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/szhatie-dannyh-v-apache-ignite-opyt-sbera","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/81936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=81936"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/81936\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/81937"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=81936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=81936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=81936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}