Comhbhrú sonraí in Apache Ignite. Taithí Sber

Comhbhrú sonraí in Apache Ignite. Taithí SberNuair a bhíonn tú ag obair le líon mór sonraí, is féidir leis an bhfadhb easpa spáis diosca teacht chun cinn uaireanta. Bealach amháin chun an fhadhb seo a réiteach ná comhbhrú, a bhuíochas sin, ar an trealamh céanna, is féidir leat an méid stórála a mhéadú. San Airteagal seo, féachfaimid ar conas a oibríonn comhbhrú sonraí in Apache Ignite. Ní dhéanfaidh an t-alt seo ach cur síos ar na modhanna comhbhrúite diosca a cuireadh i bhfeidhm laistigh den táirge. Fanfaidh modhanna eile comhbhrú sonraí (thar an líonra, sa chuimhne), cibé acu atá siad curtha i bhfeidhm nó nach bhfuil, lasmuigh den raon feidhme.

Mar sin, le modh marthanachta cumasaithe, mar thoradh ar athruithe ar shonraí sna taisce, tosaíonn Ignite ag scríobh chuig diosca:

  1. Ábhar na caches
  2. Scríobh Loga Chun Tosaigh (dá ngairtear WAL anseo feasta)

Tá meicníocht do chomhbhrú WAL ann le tamall maith anuas, ar a dtugtar dhlúthú WAL. Thug an Apache Ignite 2.8 a scaoileadh le déanaí isteach dhá mheicníocht eile a ligeann duit sonraí a chomhbhrú ar dhiosca: comhbhrú leathanach diosca chun ábhar caches a chomhbhrú agus comhbhrú pictiúr leathanach WAL chun roinnt iontrálacha WAL a chomhbhrú. Tá tuilleadh sonraí faoi na trí mheicníocht seo thíos.

Comhbhrú leathanaigh diosca

Conas a oibríonn seo

Ar dtús, déanaimis breathnú an-ghearr ar an gcaoi a stórálann Ignite sonraí. Úsáidtear cuimhne leathanaigh le haghaidh stórála. Socraítear méid an leathanaigh ag tús an nód agus ní féidir é a athrú ag céimeanna níos déanaí; freisin, caithfidh méid an leathanaigh a bheith ina chumhacht de dhá cheann agus ina iolraí de mhéid an bhloc chórais comhaid. Lódáiltear na leathanaigh isteach i RAM ón diosca de réir mar is gá; féadfaidh méid na sonraí ar an diosca a bheith níos airde ná an méid RAM a leithdháiltear. Mura bhfuil go leor spáis i RAM chun leathanach a luchtú ón diosca, díshealbhófar seanleathanaigh nach n-úsáidtear a thuilleadh ó RAM.

Stóráiltear na sonraí ar diosca san fhoirm seo a leanas: cruthaítear comhad ar leith do gach deighilt de gach grúpa taisce; sa chomhad seo, feictear leathanaigh ceann i ndiaidh a chéile in ord innéacs ardaitheach. Tá aitheantóir an ghrúpa taisce, uimhir na críochdheighilte agus innéacs leathanaigh sa chomhad san aitheantóir leathanaigh iomlán. Mar sin, ag baint úsáide as an aitheantóir leathanach iomlán, is féidir linn a chinneadh go uathúil an comhad agus an fhritháireamh sa chomhad do gach leathanach. Is féidir leat tuilleadh a léamh faoi chuimhne glaoireachta san alt Apache Ignite Wiki: Ignite Store Seasmhach - faoi na cochall.

Oibríonn an mheicníocht comhbhrú leathanaigh diosca, mar a d'fhéadfá buille faoi thuairim ón ainm, ag leibhéal an leathanaigh. Nuair a bhíonn an meicníocht seo cumasaithe, déantar sonraí i RAM a phróiseáil mar atá, gan aon chomhbhrú, ach nuair a shábháiltear leathanaigh ó RAM go diosca, déantar iad a chomhbhrú.

Ach ní réiteach ar an bhfadhb é gach leathanach a chomhbhrú ina aonar; ní mór duit méid na gcomhad sonraí a eascraíonn as a laghdú ar bhealach éigin. Mura bhfuil méid an leathanaigh socraithe a thuilleadh, ní féidir linn leathanaigh a scríobh chuig an gcomhad ceann i ndiaidh a chéile a thuilleadh, mar go bhféadfadh sé seo roinnt fadhbanna a chruthú:

  • Ag baint úsáide as an t-innéacs leathanach, ní bheidh muid in ann an fritháireamh a ríomh trína bhfuil sé suite sa chomhad.
  • Níl sé soiléir cad atá le déanamh le leathanaigh nach bhfuil ag deireadh an chomhaid agus a mhéid a athrú. Má thagann laghdú ar mhéid an leathanaigh, imíonn an spás a scaoil sé. Má thagann méadú ar mhéid an leathanaigh, ní mór duit áit nua a lorg sa chomhad dó.
  • Má ghluaiseann leathanach de réir roinnt beart nach iolraí de mhéid an bhloic chórais comhaid é, ansin beidh ort teagmháil a dhéanamh le bloc córais comhad amháin eile chun é a léamh nó a scríobh, rud a d’fhéadfadh díghrádú feidhmíochta a bheith mar thoradh air.

Chun na fadhbanna seo a réiteach ar a leibhéal féin a sheachaint, úsáideann comhbhrú leathanaigh diosca in Apache Ignite meicníocht córas comhaid ar a dtugtar comhaid gann. Is éard is comhad gann ann ná comhad inar féidir roinnt réigiún líonta náid a mharcáil mar “phoill”. Sa chás seo, ní leithdháilfear aon bhloc córais comhaid chun na poill seo a stóráil, rud a fhágann go sábhálfar spás diosca.

Tá sé loighciúil, chun bloc córas comhaid a shaoradh, go gcaithfidh méid an poll a bheith níos mó ná nó cothrom le bloc an chórais comhaid, rud a chuireann teorainn bhreise ar mhéid an leathanaigh agus Apache Ignite: chun go mbeidh aon éifeacht ag an gcomhbhrú, caithfidh méid an leathanaigh a bheith go docht níos mó ná méid bhloc an chórais comhad . Má tá méid an leathanaigh comhionann le méid an bhloic, ansin ní bheidh muid in ann bloc amháin a shaoradh, mar chun bloc amháin a shaoradh, caithfidh an leathanach comhbhrúite 0 bytes a áitiú. Má tá méid an leathanaigh comhionann le méid 2 nó 4 bhloc, beimid in ann bloc amháin ar a laghad a shaoradh cheana féin má tá ár leathanach comhbhrúite go dtí 50% nó 75% ar a laghad, faoi seach.

Mar sin, an cur síos deiridh ar conas a oibríonn an mheicníocht: Agus leathanach á scríobh ar diosca, déantar iarracht an leathanach a chomhbhrú. Má cheadaíonn méid an leathanaigh chomhbhrúite bloc chóras comhaid amháin nó níos mó a shaoradh, scríobhtar an leathanach i bhfoirm chomhbhrúite, agus déantar “poll” in ionad na mbloc saortha (déantar glao córais fallocate() leis an bratach poll punch). Mura gceadaíonn méid an leathanaigh chomhbhrúite na bloic a shaoradh, déantar an leathanach a shábháil mar atá, neamh-chomhbhrúite. Ríomhtar gach fritháireamh leathanach ar an mbealach céanna agus gan comhbhrú, tríd an innéacs leathanaigh a iolrú faoi mhéid an leathanaigh. Ní gá leathanaigh a athlonnú i d'aonar. Titeann fritháirimh leathanach, díreach mar atá gan comhbhrú, ar theorainneacha bloic chórais comhaid.

Comhbhrú sonraí in Apache Ignite. Taithí Sber

Sa chur i bhfeidhm reatha, ní féidir le Ignite oibriú ach le comhaid tanaí faoi Linux OS; dá réir sin, ní féidir comhbhrú leathanaigh diosca a chumasú ach amháin nuair a bhíonn Ignite á úsáid ar an gcóras oibriúcháin seo.

Algartaim chomhbhrúite is féidir a úsáid le haghaidh comhbhrú leathanaigh diosca: ZSTD, LZ4, Snappy. Ina theannta sin, tá modh oibriúcháin (SKIP_GARBAGE), ina gcaitear amach ach spás neamhúsáidte ar an leathanach gan comhbhrú a chur i bhfeidhm ar na sonraí atá fágtha, rud a laghdaíonn an t-ualach ar an LAP i gcomparáid leis na halgartaim a liostaítear roimhe seo.

Tionchar Feidhmíochta

Ar an drochuair, ní dhearna mé tomhais feidhmíochta iarbhír ar sheastáin fhíora, ós rud é nach bhfuil sé beartaithe againn an meicníocht seo a úsáid i dtáirgeadh, ach is féidir linn tuairimíocht a dhéanamh go teoiriciúil cén áit a gcaillfimid agus cén áit a mbeidh an bua againn.

Chun seo a dhéanamh, ní mór dúinn cuimhneamh ar an gcaoi a léitear agus a scríobhtar leathanaigh nuair a bhíonn rochtain orthu:

  • Agus oibríocht léite á déanamh, déantar é a chuardach ar dtús i RAM; mura n-éiríonn leis an gcuardach, lódáiltear an leathanach isteach i RAM ón diosca leis an snáithe céanna a dhéanann an léamh.
  • Nuair a dhéantar oibríocht scríofa, marcáiltear an leathanach i RAM mar shalach, ach ní shábháiltear an leathanach go fisiciúil ar an diosca láithreach ag an snáithe atá i mbun na scríobh. Déantar gach leathanach salach a shábháil ar diosca níos déanaí sa phróiseas seicphointe i snáitheanna ar leith.

Mar sin is é an tionchar ar oibríochtaí léite:

  • Dearfach (diosca IO), mar gheall ar laghdú ar líon na bloic córas comhaid léite.
  • Diúltach (LAP), mar gheall ar an ualach breise a theastaíonn ón gcóras oibriúcháin chun oibriú le comhaid gann. Is féidir freisin go mbeidh oibríochtaí IO breise le feiceáil go hintuigthe anseo chun struchtúr comhaid níos tanaí níos casta a shábháil (ar an drochuair, níl mé eolach ar na sonraí go léir maidir le conas a oibríonn comhaid gann).
  • Diúltach (LAP), mar gheall ar an ngá atá le leathanaigh a dhí-chomhbhrú.
  • Níl aon tionchar ar oibríochtaí scríbhneoireachta.
  • Tionchar ar an bpróiseas seicphointe (tá gach rud anseo cosúil le hoibríochtaí léite):
  • Dearfach (diosca IO), mar gheall ar laghdú ar líon na bloic córas comhaid scríofa.
  • Diúltach (LAP, diosca IO b'fhéidir), mar gheall ar oibriú le comhaid gann.
  • Diúltach (LAP), mar gheall ar an ngá atá le comhbhrú leathanaigh.

Cén taobh den scála a threoróidh an scála? Braitheann sé seo go mór ar an timpeallacht, ach tá claonadh agam a chreidiúint gur dóichí go dtiocfaidh díghrádú feidhmíochta ar fhormhór na gcóras as comhbhrú leathanaigh diosca. Ina theannta sin, léiríonn tástálacha ar DBMSanna eile a úsáideann cur chuige comhchosúil le comhaid gann laghdú ar fheidhmíocht nuair a bhíonn comhbhrú cumasaithe.

Conas a chumasú agus a chumrú

Mar a luadh thuas, is é 2.8 an leagan íosta de Apache Ignite a thacaíonn le comhbhrú leathanach diosca agus ní thacaítear ach le córas oibriúcháin Linux. Cumasaigh agus cumraigh mar seo a leanas:

  • Ní mór modúl comhbhrú ignite a bheith sa rang-chonair. De réir réamhshocraithe, tá sé suite i ndáileadh Apache Ignite sa libs/eolaire roghnach agus níl sé san áireamh i gcosán an ranga. Is féidir leat an t-eolaire a bhogadh suas leibhéal amháin go libs agus ansin nuair a ritheann tú é trí ignite.sh beidh sé a chumasú go huathoibríoch.
  • Ní mór marthanacht a chumasú (Cumasaithe via DataRegionConfiguration.setPersistenceEnabled(true)).
  • Ní mór méid an leathanaigh a bheith níos mó ná méid an bhloc córais comhaid (is féidir leat é a shocrú le húsáid DataStorageConfiguration.setPageSize() ).
  • I gcás gach taisce ar gá a sonraí a chomhbhrú, ní mór duit an modh comhbhrú agus (go roghnach) an leibhéal comhbhrú (modhanna) a chumrú CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

balcadh WAL

Conas a oibríonn seo

Cad é WAL agus cén fáth a bhfuil gá leis? Go hachomair: is logáil é seo ina bhfuil na himeachtaí go léir a athraíonn stóráil an leathanaigh ar deireadh thiar. Tá sé ag teastáil go príomha chun a bheith in ann a ghnóthú i gcás titim. Ní mór d'oibríocht ar bith, sula dtugann sé smacht don úsáideoir, imeacht a thaifeadadh i WAL ar dtús, ionas gur féidir, i gcás teipe, é a imirt ar ais sa logáil agus na hoibríochtaí go léir a bhfuil freagra rathúil faighte ag an úsáideoir ina leith a athchóiriú, fiú má tá na hoibríochtaí sin ní raibh am a léiriú sa stóráil leathanach ar diosca (cheana thuas Tá sé curtha síos go bhfuil an scríbhinn iarbhír chuig an siopa leathanach a rinneadh i bpróiseas ar a dtugtar "seicphointe" le roinnt moille ag snáitheanna ar leith).

Roinntear iontrálacha i WAL ina loighciúil agus go fisiciúil. Is iad na cinn Boole na heochracha agus na luachanna iad féin. Fisiciúil - léiríonn sé athruithe ar leathanaigh sa stór leathanach. Cé gur féidir le taifid loighciúla a bheith úsáideach do roinnt cásanna eile, níl gá le taifid fhisiceacha ach amháin le haghaidh aisghabháil i gcás timpiste agus níl gá le taifid ach ón seicphointe rathúil deiridh. Anseo ní rachaimid go mion agus míneoimid cén fáth a n-oibríonn sé ar an mbealach seo, ach is féidir leo siúd a bhfuil suim acu ann tagairt a dhéanamh don alt a luadh cheana ar an Apache Ignite Wiki: Ignite Store Seasmhach - faoi na cochall.

Is minic a bhíonn roinnt taifead fisiceach in aghaidh an taifid loighciúil. Is é sin, mar shampla, go mbíonn tionchar ag oibríocht amháin a cuireadh isteach sa taisce ar roinnt leathanach i gcuimhne leathanaigh (leathanach ina bhfuil na sonraí féin, leathanaigh le hinnéacsanna, leathanaigh le saorliostaí). I roinnt tástálacha sintéiseacha, fuair mé amach go raibh suas le 90% den chomhad WAL i dtaifid fhisiceacha. Mar sin féin, tá gá leo ar feadh tréimhse an-ghearr (de réir réamhshocraithe, is é 3 nóiméad an t-eatramh idir seicphointí). Bheadh ​​​​sé loighciúil fáil réidh leis na sonraí seo tar éis a ábharthacht a chailliúint. Is é seo go díreach a dhéanann meicníocht dhlúthú WAL: faigheann sé réidh le taifid fhisiceacha agus comhbhrúiteann sé na taifid loighciúla atá fágtha trí úsáid a bhaint as zip, agus laghdaítear méid an chomhaid go suntasach (uaireanta faoi na deich n-uaire).

Go fisiciúil, tá roinnt codanna (10 de réir réamhshocraithe) de mhéid seasta (64MB de réir réamhshocraithe) i WAL, atá forscríofa ar bhealach ciorclach. Chomh luath agus a bhíonn an deighleog reatha líonta, sanntar an chéad deighleog eile mar reatha, agus déantar an deighleog líonta a chóipeáil chuig an gcartlann le snáithe ar leith. Oibríonn balcadh WAL le codanna cartlainne cheana féin. Chomh maith leis sin, mar snáithe ar leith, déanann sé monatóireacht ar fheidhmiú an tseicphointe agus tosaíonn sé ar chomhbhrú i ndeighleoga cartlainne nach bhfuil gá le taifid fhisiceacha a thuilleadh.

Comhbhrú sonraí in Apache Ignite. Taithí Sber

Tionchar Feidhmíochta

Ós rud é go ritheann dhlúthú WAL mar shnáithe ar leith, níor cheart go mbeadh aon tionchar díreach ar na hoibríochtaí atá á ndéanamh. Ach cuireann sé ualach cúlra breise fós ar an LAP (comhbhrú) agus ar an diosca (ag léamh gach deighleog WAL ón gcartlann agus ag scríobh na codanna comhbhrúite), mar sin má tá an córas ag rith ag a chumas uasta, beidh díghrádú feidhmíochta mar thoradh air freisin.

Conas a chumasú agus a chumrú

Is féidir leat balcadh WAL a chumasú leis an airí WalCompactionEnabled в DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). Chomh maith leis sin, ag baint úsáide as an modh DataStorageConfiguration.setWalCompactionLevel() , is féidir leat an leibhéal comhbhrú a shocrú mura bhfuil tú sásta leis an luach réamhshocraithe (BEST_SPEED).

Comhbhrú seat leathanach WAL

Conas a oibríonn seo

Táimid tar éis a fháil amach cheana féin go bhfuil taifid WAL roinnte ina gcuid loighciúil agus fisiceach. I gcás gach athrú ar gach leathanach, gintear taifead fisiciúil WAL mar chuimhne leathanaigh. Roinntear taifid fhisiceacha, ina dhiaidh sin, i 2 fhochineál freisin: taifead seat leathanach agus taifead deilt. Gach uair a athraítear rud éigin ar leathanach agus a aistrímid é ó staid ghlan go staid shalach, coinnítear cóip iomlán den leathanach seo i WAL (taifead seat leathanach). Fiú murar athraigh muid ach beart amháin in WAL, beidh an taifead beagán níos mó ná méid an leathanaigh. Má athraíonn muid rud éigin ar leathanach atá salach cheana féin, cruthaítear taifead deilt in WAL, rud a léiríonn athruithe amháin i gcomparáid le staid an leathanaigh roimhe seo, ach ní an leathanach iomlán. Ós rud é go ndéantar staid na leathanach a athshocrú ó shalach go glan le linn an phróisis seicphointe, díreach tar éis thús an tseicphointe, ní bheidh i mbeagnach gach taifead fisiceach ach pictiúir de na leathanaigh (toisc go bhfuil gach leathanach díreach tar éis thús an seicphointe glan) , ansin agus muid ag druidim leis an gcéad seicphointe eile, tosaíonn an codán taifead deilt ag fás agus ag athshocrú arís ag tús an chéad seicphointe eile. Léirigh tomhais i roinnt tástálacha sintéiseacha go sroicheann an sciar de ghrianghraif leathanaigh i líon iomlán na dtaifead fisiceach 90%.

Is é an smaoineamh a bhaineann le comhbhrú seat leathanaigh WAL ná pictiúir leathanach a chomhbhrú trí úsáid a bhaint as uirlis chomhbhrú leathanach réamhdhéanta (féach comhbhrú leathanaigh diosca). Ag an am céanna, in WAL, déantar taifid a shábháil go seicheamhach i mód aguisín amháin agus ní gá taifid a cheangal de réir teorainneacha na mbloc córais comhaid, mar sin anseo, murab ionann agus meicníocht comhbhrú an leathanaigh diosca, níl gá againn le comhaid gann ag go léir; dá réir sin, oibreoidh an mheicníocht seo ní hamháin ar an OS Linux. Ina theannta sin, níl sé tábhachtach dúinn a thuilleadh cé mhéad a bhí muid in ann an leathanach a chomhbhrú. Fiú má scaoileamar 1 beart, is toradh dearfach é seo cheana féin agus is féidir linn sonraí comhbhrúite a shábháil i WAL, murab ionann agus comhbhrú leathanach diosca, áit a sábhálann muid an leathanach comhbhrúite ach amháin má scaoileamar níos mó ná 1 bloc córas comhaid.

Is sonraí an-comhbhrúite iad na leathanaigh, tá a sciar den toirt iomlán WAL an-ard, agus mar sin gan an fhormáid comhaid WAL a athrú is féidir linn laghdú suntasach a fháil ar a mhéid. Chun comhbhrú, lena n-áirítear taifid loighciúla, bheadh ​​gá le hathrú ar fhormáid agus le cailliúint comhoiriúnachta, mar shampla, i gcás tomhaltóirí seachtracha a bhféadfadh suim a bheith acu i dtaifid loighciúla, ach nach dtiocfadh laghdú suntasach ar mhéid comhaid dá bharr.

Mar is amhlaidh le comhbhrú leathanaigh diosca, is féidir le comhbhrú seat leathanaigh WAL úsáid a bhaint as halgartaim comhbhrú ZSTD, LZ4, Snappy, chomh maith leis an modh SKIP_GARBAGE.

Tionchar Feidhmíochta

Níl sé deacair a thabhairt faoi deara nach ndéanann cumasú díreach ar chomhbhrú seat leathanaigh WAL ach difear do shnáitheanna a scríobhann sonraí chuig cuimhne leathanaigh, is é sin, na snáitheanna sin a athraíonn sonraí i caches. Ní tharlaíonn léamh taifid fhisiceacha ó WAL ach uair amháin, i láthair na huaire ardaítear an nód tar éis titim (agus amháin má thiteann sé le linn seicphointe).

Bíonn tionchar aige seo ar snáitheanna a athraíonn sonraí ar an mbealach seo a leanas: faigheann muid éifeacht dhiúltach (LAP) mar gheall ar an ngá atá le comhbhrú an leathanaigh gach uair roimh scríobh chuig diosca, agus éifeacht dhearfach (IO diosca) mar gheall ar laghdú ar an méid sonraí scríofa. Dá réir sin, tá gach rud simplí anseo: má tá feidhmíocht an chórais teoranta ag an LAP, faigheann muid díghrádú beag, má tá sé teoranta ag diosca I/O, faighimid méadú.

Go hindíreach, cuireann laghdú ar mhéid WAL isteach freisin (go dearfach) ar shruthanna a dhumpálann deighleoga WAL isteach sa chartlann agus i sruthanna dhlúthú WAL.

Léirigh tástálacha fíorfheidhmíochta inár dtimpeallacht ag baint úsáide as sonraí sintéiseacha méadú beag (méadaigh tréchur 10% -15%, tháinig laghdú 10%-15% ar an bhfolae).

Conas a chumasú agus a chumrú

Leagan íosta Apache Ignite: 2.8. Cumasaigh agus cumraigh mar seo a leanas:

  • Ní mór modúl comhbhrú ignite a bheith sa rang-chonair. De réir réamhshocraithe, tá sé suite i ndáileadh Apache Ignite sa libs/eolaire roghnach agus níl sé san áireamh i gcosán an ranga. Is féidir leat an t-eolaire a bhogadh suas leibhéal amháin go libs agus ansin nuair a ritheann tú é trí ignite.sh beidh sé a chumasú go huathoibríoch.
  • Ní mór marthanacht a chumasú (Cumasaithe via DataRegionConfiguration.setPersistenceEnabled(true)).
  • Ní mór an modh comhbhrúite a shocrú ag baint úsáide as an modh DataStorageConfiguration.setWalPageCompression(), tá comhbhrú díchumasaithe de réir réamhshocraithe (mód MÍCHUMAS).
  • Roghnach, is féidir leat a shocrú ar an leibhéal comhbhrú ag baint úsáide as an modh DataStorageConfiguration.setWalPageCompression(), féach an javadoc le haghaidh an mhodha le haghaidh luachanna bailí do gach modh.

Conclúid

Is féidir na meicníochtaí comhbhrú sonraí measta in Apache Ignite a úsáid go neamhspleách ar a chéile, ach tá aon teaglaim díobh inghlactha freisin. Le tuiscint a fháil ar an gcaoi a n-oibríonn siad, beidh tú in ann a chinneadh cé chomh hoiriúnach agus atá siad do do thascanna i do thimpeallacht agus cad a bheidh ort a íobairt agus iad á n-úsáid. Tá comhbhrú leathanaigh diosca deartha chun an príomhstóráil a chomhbhrú agus féadann sé cóimheas comhbhrú meánach a thabhairt. Tabharfaidh comhbhrú seat leathanaigh WAL meánmhéid comhbhrú do chomhaid WAL, agus is dócha go bhfeabhsóidh sé feidhmíocht. Ní bheidh tionchar dearfach ag dhlúthú WAL ar fheidhmíocht, ach laghdóidh sé méid comhaid WAL a oiread agus is féidir trí thaifid fhisiceacha a bhaint.

Foinse: will.com

Add a comment