Compressio data in Apache Ignite. Sber experientiam

Compressio data in Apache Ignite. Sber experientiamCum magna notitiarum voluminum operando, quaestio defectus spatii orbis interdum oriri potest. Uno modo ad solvendam hanc quaestionem pressio est, qua ex eodem instrumento ad volumina reposita augenda praestare potes. In hoc articulo videbimus quomodo data pressio in Apache Ignite operatur. Articulus hic modos compressionis orbis modos intra productum perficiendos describet. Aliae modos compressionis notitiae (super reticulum in memoriam), sive effectum sive non, extra ambitum manebunt.

Itaque, cum perseuerantia modo parato, ob mutationum notitiarum in gazophylacia, Ignite scribens in disco incipit:

  1. Contenta cache
  2. Praescribere Log (infra simpliciter WAL)

Mechanismum pro compressione WAl iam aliquo tempore facta est, compactio WA appellata. Nuper Apache Ignite 2.8 emissa duo plura mechanismi induxerunt quae te permittunt ut notitias in disco comprimant: orbis pagina pressio pro contentis cellarum comprimendis et in pagina WAL pagina compressionis snapshots comprimendas viscus quidam WAL. Plura de his omnibus tribus machinationibus infra.

Orbis paginam compressionem

Quam facit hoc opus

Primum, inspice quam Ignite thesauris data brevissima ducamus. Pagina memoria ponitur pro repono. Magnitudo paginae in initio nodi posita est ac postea mutari non potest, praeterea magnitudo paginae debet esse potentia duorum et multiplex ratio limae scandali magnitudine. Paginae in RAM ab orbe ut opus sunt oneratae, magnitudo notitiae in orbe superant quantitatem RAM partita. Si spatium in RAM non satis est ut paginam ab orbe, veteri, paginas onerare non amplius ex RAM evincetur.

Notitia super orbem in hac forma reponitur: fasciculus separatus pro singulis partitio cuiusque coetus cellae creatur, in hoc fasciculo, paginae inter se apparent in ordine indice ascendendo. Plena pagina identifier est coetus latibulum identificantis, partitionis numerus, ac index paginarum in tabella. Ita, plenam paginam identificantis utens, tabellam et cingulum in tabella singulis paginis singulariter determinare possumus. Plus legere potes de pagina memoriae in Apache Ignite Wiki articulum: Ignite Pertinax Store - sub cucullo.

Discus pagina pressio mechanismum, ut ex nomine coniecturare potes, in gradu paginae operatur. Cum hoc machinamentum conficitur, notitia in RAM discursum est ut sine ulla compressione, sed cum paginae ab RAM ad orbem salvantur, comprimuntur.

Sed singulae paginae comprimentes solutionem problematis non sunt, necesse est aliquo modo magnitudinem imaginum notitiarum inde minuere. Si magnitudo paginae non amplius fixa est, non iam paginas tabella post aliam scribere possumus, cum hoc plures difficultates creare possit;

  • Indicem paginae utentes, offsets quibus in tabella situm est, computare non poterimus.
  • Non liquet quid faciendum sit cum paginis quae in fine tabellae non sunt et magnitudinem mutant. Si magnitudo paginae decrescit, spatium liberatum evanescit. Si magnitudo paginae crescit, novum locum in tabella quaerere debes.
  • Si pagina aliquot bytes moveat quae non est multiplex ratio limae scandali magnitudine, tum legens vel scribens id requiret de uno stipendio plus limae, quae ad degradationem faciendam ducere potest.

Ad has difficultates solvendas ne in suo plano, orbis pagina pressio in Apache Ignite utitur systematis fasciculi mechanismi qui lima sparsim appellatur. Scapus sparsus unus est in quo aliquae regiones nullae refertae "foramina" possunt notari. In hoc casu, nulla ratio limandi caudices collocabitur ad has cavernas conferendas, inde in compendio in orbis tractus.

Consentaneum est quod ad scandalum limae liberandum, magnitudo foraminis maior esse debet quam vel aequalis ad scandalum tabellae, quae additicium limitationem in magnitudine et Apache Ignite imponit: nam compressio aliquem effectum habere debet; magnitudo paginae stricte maior esse debet quam inusitatus tabellae ratio . Si magnitudo paginae aequalis est quantitati obstructionum, numquam unum truncum liberare poterimus, quoniam ut unum truncum liberet, pagina compressa bytes occupare debet. Si magnitudo paginae aequatur moles 0 vel 2 stipitorum, iam liberare unum saltem stipitem valemus si pagina nostra ad minimum 4% vel 50% ad minimum comprimatur, respective.

Sic ultima descriptio quomodo mechanismus operatur: Cum paginam in disco scriberet, conatum est paginam comprimere. Si magnitudo paginae compressae permittit unum vel plures stipites fasciculi liberari, pagina in forma compressa scripta est et "foramen" loco caudices liberati (facitur ratio vocationis) fit. fallocate() per ferrum foramen vexillum). Si magnitudo paginae compressae caudices liberari non patitur, pagina ut incompressa servata est. Omnes paginae exsertiones ita computantur ac sine compressione, multiplicando paginam indicem a magnitudine paginae. Nulla paginarum relocationis in tuo proprio requiritur. Paginae exsertiones, sicut sine compressione, in limites claustrorum fasciculorum cadunt.

Compressio data in Apache Ignite. Sber experientiam

In hodierna exsecutione, Ignite tantum cum sparsis fasciculis sub Linux OS operari potest, itaque compressio orbis pagina tantum effici potest cum utens Ignite in hac systemate operante.

Compressio algorithmorum quae adhiberi possunt ad pressionem orbis paginam: ZSTD, LZ4, Snappy. Praeterea modus operans est (SKIP_GARBAGE), quo solum insuetum spatium in pagina extrahatur sine adhibita compressione in reliquas notitias, quae onus minuit in CPU ad algorithmos antea inscriptos.

Euismod Impact

Infeliciter, non feci mensuras actuosas in rebus realibus, quandoquidem non cogitamus hac machinatione uti in productione, sed speculari possumus speculari ubi amittimus et ubi vincemus.

Ad hoc opus meminisse debemus quomodo paginae lectae et scriptae cum accesserunt;

  • Cum legere operationem, primum in RAM quaeritur, si quaesitio non successit, pagina in RAM ab orbe eodem filo lecta est onerata.
  • Cum operatio scribentis perficitur, pagina in RAM ut sordida designata est, sed pagina physice non servata est statim in filo scribendo faciendo. Omnes paginae sordidae servatae sunt in disco postea in LAPIS processus in filis separatis.

Ita ictum in operationibus legitur;

  • Positivum (disk IO), ob diminutionem in numero rationum fasciculorum legendarum.
  • Negative (CPU), ex additione oneris quae requiritur ad systema operandi cum fasciculis sparsis operandi. Fieri etiam potest ut operationes IO additae hic implicite apparebunt ut compaginem fasciculi sparsiorem incomplicatam servent (proh dolor, notus sum cum singulis singulis quam sparsi lima operantur).
  • Negative (CPU), ob necessitatem paginarum decompressarum.
  • Nulla in scribendo operationes labefactum est.
  • Incussus in LAPIS processus (omnia hic res similes legi);
  • Positivum (disk IO), ob diminutionem in numero litterarum fasciculi systematis impedit.
  • Negative (CPU, fortasse disci IO), propter fasciculos sparsos laborantes.
  • Negative (CPU), propter necessitatem pressionis paginae.

Utra librae mucrone librae? Haec omnia a ambitu plurimum pendent, sed propensus sum credere illam compressionem orbis paginam maxime probabile ducere ad degradationem in maxime systemata perficiendi. Praeterea probat in aliis DBMSs qui similem accessionem cum fasciculis sparsis utuntur, guttam in effectu ostendunt cum compressio datur.

Quomodo et configurare

Ut supra, minima versio Apache Ignite quae compressionem orbis paginae sustinet est 2.8 et solum ratio operativa Linux sustentatur. Admitte et configurare sic:

  • Compressio ignita debet esse modulus in via classium. Defalta, in Apache Ignita distributione in libs/libris/libitum/libris/libitum/libris/libitum/libris/libitum est posita, et in classi-via non comprehenditur. Directorium unum gradum ad libs solum movere potes et tunc cum per ignite.sh curris, sponte praestabis.
  • Perseverantia sit amet (Enabled via DataRegionConfiguration.setPersistenceEnabled(true)).
  • Magnitudo paginae magnitudo maior esse debet quam ratio limae scandalum magnitudine (utendo pones" DataStorageConfiguration.setPageSize() ).
  • Ad unumquemque cella cuius notitia necessitatem comprimit, configurare debes modum compressionis et (optionally) compressionem gradum (modos CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

WAL compaction

Quam facit hoc opus

Quid est WAL et cur opus est? Brevissime: hic est index omnium rerum continens quae tandem paginam repositionis mutant. Primario opus est ut in casu casus recuperare possit. Operatio quaevis, antequam potestatem usoris praebeat, primo eventum in WAL memorare debet, ut in casu defectio, rursus in stipes revolvatur et omnes operationes pro quibus utens bene respondet, etiam si hae operationes acceperint, restituantur. tempus non fuit reflecti in pagina reposita in disco (iam supra Descriptum est ipsam scripturam paginae repositam fieri in processu vocato "checkpoint" cum aliqua mora filorum separatorum).

Entries in WA divisa sunt in logicam et physicam. Booleae claves sunt ac se ipsae aestimant. Physica - reflectit mutationes paginarum in repositorio paginae. Cum monumenta logicalia in quibusdam aliis casibus utiles esse possunt, monumenta physica tantum ad recuperationem necessaria sunt in casu ruinae et monumentorum, nisi post ultimum felicis lapicidinis opus sunt. Hic non singillatim pergamus et cur hoc modo operatur, sed ea, quorum interest, referre possunt ad iam dictum articulum in Apache Ignite Wiki: Ignite Pertinax Store - sub cucullo.

Saepius variae physicae monumenta per logicum commentarium sunt. Hoc est, exempli gratia, operandi in cella aliquot paginas in pagina memoria afficit (pagina cum ipsa notitia, pagina cum indicibus, pagina cum indice libero). In nonnullis probatis syntheticis, inveni monumenta physica usque ad 90% murum fasciculi occupatum. Sed exigui temporis sunt (per default, intervallum inter checkpoints est 3 minuta). Consentaneum erit hanc notitias amisso congruentia carere. Hoc prorsus est quod mechanismum compactionis WAL facit: corporales tabulas expellit et reliquas logicales tabulas zip utens comprimit, dum magnitudo tabella admodum signanter (interdum per decies tempora minuitur).

WAL Physice ex pluribus segmentis constat (per default 10) magnitudinis certae (64MB per defaltam), quae circulariter supra scripta sunt. Ut primum segmentum currens impletur, segmentum proximum pro currente assignatur, et segmentum saturatum filo separato archivo transcribit. WAL compaction iam cum segmentis archiviis operatur. Etiam, ut filum separatum, exsecutionem LAPIS monitores incipit et compressionem in segmentis archivi incipit pro quibus physicae monumenta non amplius requiruntur.

Compressio data in Apache Ignite. Sber experientiam

Euismod Impact

Cum compactio WAEL ut filum separatum decurrit, nulla directa ictum in operationibus peragendis debet esse. Sed adhuc addit onus background in CPU (compressione) et disci (legens utrumque segmentum WAL ex archivo et scribendo segmenta compressa), si ratio currit ad maximam capacitatem suam, etiam ad degradationem perficiendam ducet.

Quomodo et configurare

Possis efficere compaction wal utens possessionem WalCompactionEnabled Π² DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). Etiam, utens methodo dataStorageConfiguration.setWalCompactionLevel() compressionem planum facere potes si non contentus cum valore default (BEST_SPEED).

WAL pagina snapshot compressionem

Quam facit hoc opus

Iam invenimus in WA tabulas in logicas et physicas esse divisas. Ut quaeque mutatio ad singulas paginas, record physicus WA in pagina memoriae generatur. Corporis monumenta, vicissim, etiam in 2 subtypa divisa sunt: ​​paginam sphingam electronicam et della memoria. Quotienscumque aliquid in pagina mutamus et illud de statu mundo in statum sordidum transfermus, exemplum integrum huius paginae in WAL (pagina snapshot recordum repositum est). Etsi unum tantum byte in WA mutavimus, recordum paulo maior erit quam magnitudo paginae. Si aliquid in pagina iam sordida mutamus, della record in WA formata est, quae tantum mutationes cum priori paginae statu refert, non autem totam paginam. Cum status paginarum ex sordido ad mundum repositione conficiatur in processu lapidarii, statim post initium lapicidinae, omnes fere monumenta physica tantum e paginarum snapshots constabunt (cum omnes paginae statim post initium LAPIS mundae sunt) ergo, ut ad proximum LAPIS accedimus, della record fractio incipit crescere et retexere iterum sub initio lapidis proximi. Mensurae in nonnullis probatis syntheticis demonstraverunt portionem paginae snapshots in toto volumine historiarum physicarum 90% attingere.

Idea paginae WAL compressionis snapshot est comprimere paginas snapshots utendo paginam compressionis paratam (videre paginam compressionis disci). Simul, in WAL, monumenta sequentially servata sunt in appendice tantum modo ac monumentis ligare non opus est ad limites systematis clausorum fasciculi, ut hic, dissimilis mechanismi paginae orbis pressionis, non opus est lima sparsis in omnes, proinde, haec machina non solum in OS Linux operabitur. Praeterea nihil amplius refert quantum nos paginam comprimere potuimus. Etiamsi 1 byte liberavimus, hoc iam effectum positivum est et notitias compressas in WAL, dissimiles paginae compressionis, dissimiles servare possumus, ubi conservamus paginam compressam tantum si plus quam 1 fasciculi stipitem liberavimus.

Paginae datae valde compressibiles sunt, quorum participatio in toto VALL volumine valde altissima est, ita sine mutatione formae fasciculi WAL significantem reductionem in sua magnitudine consequi possumus. Compressio, inclusa logica monumenta, mutatio formarum et detrimentum compatibilitatis requireret, exempli gratia, pro sumptis externis qui in logicis monumentis interesse possunt, non tamen ad notabilem reductionem in amplitudine.

Ut cum compressione orbis pagina, WAL pagina compressionis snapshots ZSTD, LZ4, Snappy compressionem algorithmorum tum modum SKIP_GARBAGE uti potest.

Euismod Impact

Haud difficile est animadvertere paginae snapshots comprimendi WAL directe tantum afficere fila quae scribunt ad memoriam paginae data, id est stamina quae in cella data mutant. Lectio physica monumentorum e WAL semel tantum occurrit, momento nodi post lapsum elevatur (et solum si per lapicidinam cadit).

Hoc stamina afficit notitias mutatorias hoc modo: effectum negativum (CPU) obtinemus propter necessitatem comprimendi paginas singulis diebus antequam scribebam in disco, et effectus positivus (disk IO) propter reductionem in quantitate. notitia scripta. Proinde omnia hic simplicia sunt: ​​si ratio agendi a CPU limitatur, mediocrem degradationem accipimus, si orbis I/O limitatur, incrementum dabimus.

Indirecte, reducens magnitudinem etiam WAL (positive) rivos afficit, qui segmenta dump WAL in compactionis rivorum archivi et WAL.

Verus effectus probationes in ambitu nostro utens synthetica notitia ostendit leve incrementum (throughput auctum per 10%-15%, latency diminutum per 10%-15%).

Quomodo et configurare

Minimum Apache Ignite versionem: 2.8. Admitte et configurare sic:

  • Compressio ignita debet esse modulus in via classium. Defalta, in Apache Ignita distributione in libs/libris/libitum/libris/libitum/libris/libitum/libris/libitum est posita, et in classi-via non comprehenditur. Directorium unum gradum ad libs solum movere potes et tunc cum per ignite.sh curris, sponte praestabis.
  • Perseverantia sit amet (Enabled via DataRegionConfiguration.setPersistenceEnabled(true)).
  • Compressio modus ponendus est modus utendi DataStorageConfiguration.setWalPageCompression()compressio per defaltam debilitata (modus DEBILIS).
  • Optionally, "gradu compressionis uti potes methodo" DataStorageConfiguration.setWalPageCompression()vide javadoc methodum valorum valorum pro quolibet modo.

conclusio,

Compressionis notitiae consideratae machinationes in Apache Ignitae independenter ab invicem adhiberi possunt, sed quaelibet earum coniunctio etiam grata est. Intellectus quomodo operantur permittet te statuere quam opportuna sint ad opera tua in ambitu tuo, et quid habebis sacrificare cum utendo. Orbis pagina pressio destinatur ad principale repositionis comprimendum et rationem mediae compressionis dare potest. WAL pagina compressionis snapshot mediocris gradum compressionis pro fasciculis WA dabit, et verisimiliter etiam ad meliorem effectum reddet. compaction WAL compaction effectum positivum in perficiendi non habebit, sed quantitatem imaginum wal quam maxime minuet subtrahendis physicis monumentis.

Source: www.habr.com