Cassandra. Conas nach bhfaighidh tú bás mura bhfuil a fhios agat ach Oracle

Hey Habr.

Misha Butrimov is ainm dom, ba mhaith liom beagán a insint duit faoi Cassandra. Beidh mo scéal úsáideach dóibh siúd nár tháinig riamh le bunachair shonraí NoSQL - tá go leor gnéithe cur chun feidhme agus gaistí ann ar gá duit a bheith ar an eolas fúthu. Agus mura bhfaca tú aon rud seachas Oracle nó aon bhunachar sonraí coibhneasta eile, sábhálfaidh na rudaí seo do shaol.

Cad atá chomh maith sin faoi Cassandra? Is bunachar sonraí NoSQL é atá deartha gan aon phointe teipe amháin a sháraíonn go maith. Más gá duit cúpla terabytes a chur le roinnt bunachar sonraí, níl ort ach nóid a chur leis an bhfáinne. An bhfuil fonn ort é a leathnú chuig ionad sonraí eile? Cuir nóid leis an mbraisle. Méadú ar RPS próiseáilte? Cuir nóid leis an mbraisle. Oibríonn sé sa treo eile freisin.

Cassandra. Conas nach bhfaighidh tú bás mura bhfuil a fhios agat ach Oracle

Cad eile a bhfuil sí go maith ag? Baineann sé le láimhseáil go leor iarratas. Ach cé mhéad atá go leor? 10, 20, 30, 40 iarratas in aghaidh an tsoicind nach bhfuil i bhfad. 100 míle iarratas in aghaidh an tsoicind ar thaifeadadh - freisin. Tá cuideachtaí ann a dúirt go gcoimeádann siad 2 mhilliún iarratas in aghaidh an tsoicind. Is dócha go gcaithfidh siad é a chreidiúint.

Agus i bprionsabal, tá difríocht mhór amháin ag Cassandra ó shonraí coibhneasta - níl sé cosúil leo ar chor ar bith. Agus tá sé seo an-tábhachtach cuimhneamh.

Ní oibríonn gach rud a bhreathnaíonn mar an gcéanna

Nuair a tháinig comhghleacaí chugam agus d’fhiafraigh sé: “Seo teanga cheist CQL Cassandra, agus tá ráiteas roghnaithe aici, tá cá háit, tá agus. Scríobhaim litreacha agus ní oibríonn sé. Cén fáth?". Is bealach iontach é caitheamh le Cassandra cosúil le bunachar sonraí gaolmhar le féinmharú foréigneach a dhéanamh. Agus níl mé á chur chun cinn, tá sé toirmiscthe sa Rúis. Dearfaidh tú rud éigin mícheart.

Mar shampla, tagann custaiméir chugainn agus deir: “Déanaimis bunachar sonraí a thógáil le haghaidh sraitheanna teilifíse, nó bunachar sonraí le haghaidh eolaire oidis. Beidh miasa bia againn ansin nó liosta de shraith teilifíse agus aisteoirí ann.” Deirimid go lúcháireach: “Rachaimid!” Just a sheoladh dhá bytes, cúpla comharthaí agus tú ag déanamh, beidh gach rud ag obair go han-tapa agus go hiontaofa. Agus tá gach rud go breá go dtí go dtagann na custaiméirí agus a rá go bhfuil mná tí ag réiteach an fhadhb eile freisin: tá liosta táirgí acu, agus ba mhaith leo a fháil amach cén mhias is mian leo a chócaireacht. Tá tú marbh.

Is é seo an fáth gur bunachar sonraí hibrideach é Cassandra: soláthraíonn sé luach lárnach ag an am céanna agus stórálann sé sonraí i gcolúin leathana. I Java nó Kotlin, d'fhéadfaí cur síos a dhéanamh air mar seo:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Is é sin, léarscáil ina bhfuil léarscáil sórtáilte freisin. Is í an chéad eochair don léarscáil seo ná an eochair Rae nó an eochair Partition - an eochair deighilte. Is í an dara eochair, arb í an eochair do léarscáil atá curtha in eagar cheana í, an eochair Chnuasaithe.

Chun dáileadh an bhunachair sonraí a léiriú, déanaimis trí nóid a tharraingt. Anois ní mór duit a thuiscint conas na sonraí a dhianscaoileadh ina nóid. Toisc má táimid ag cram gach rud isteach i gceann (dála an scéil, is féidir go mbeadh míle, dhá mhíle, cúig - an oiread agus is mian leat), níl sé seo i ndáiríre faoi dháileadh. Mar sin, ní mór dúinn feidhm matamaitice a chuirfidh uimhir ar ais. Díreach uimhir, slánuimhir fhada a thitfidh isteach i raon éigin. Agus beidh nód amháin againn freagrach as raon amháin, an dara ceann don dara, an nú ceann don nú.

Cassandra. Conas nach bhfaighidh tú bás mura bhfuil a fhios agat ach Oracle

Tógtar an uimhir seo ag baint úsáide as feidhm hash, a chuirtear i bhfeidhm ar an rud ar a dtugaimid an eochair Deighiltí. Seo é an colún atá sonraithe sa treoir Phríomh-eochair, agus seo é an colún a bheidh mar an chéad eochair agus is bunúsaí ar an léarscáil. Cinneann sé cén nód a gheobhaidh na sonraí. Cruthaítear tábla i Cassandra leis an chomhréir chéanna beagnach agus atá i SQL:

CREATE TABLE users (
	user_id uu id,
	name text,
	year int,
	salary float,
	PRIMARY KEY(user_id)

)

Tá an eochair Bunscoile sa chás seo comhdhéanta de cholún amháin, agus is é an eochair deighilte í freisin.

Conas a fheidhmeoidh ár n-úsáideoirí? Rachaidh cuid acu chuig nód amháin, cuid go nód eile, agus cuid eile chuig an tríú cuid. Is é an toradh ná gnáth-tábla hash, ar a dtugtar léarscáil freisin, ar a dtugtar foclóir i Python freisin, nó struchtúr simplí Eochairluacha ónar féidir linn na luachanna go léir a léamh, a léamh agus a scríobh le heochair.

Cassandra. Conas nach bhfaighidh tú bás mura bhfuil a fhios agat ach Oracle

Roghnaigh: nuair a cheadaíonn an scagadh ina scanadh iomlán, nó cad nach bhfuil le déanamh

Scríobhaimis roinnt ráiteas roghnaithe: select * from users where, userid = . Tharlaíonn sé mar atá i Oracle: scríobhann muid roghnaigh, sonraigh na coinníollacha agus oibríonn gach rud, faigheann úsáideoirí é. Ach má roghnaíonn tú, mar shampla, úsáideoir le bliain áirithe breithe, gearánann Cassandra nach féidir leis an iarratas a chomhlíonadh. Toisc nach bhfuil a fhios aici ar chor ar bith conas a dháilimid sonraí faoin mbliain bhreithe - níl ach colún amháin curtha in iúl aici mar eochair. Ansin deir sí, “Ceart go leor, is féidir liom an t-iarratas seo a chomhlíonadh go fóill. Cuir cead scagadh." Cuirimid an treoir, oibríonn gach rud. Agus ag an nóiméad seo a tharlaíonn rud éigin uafásach.

Nuair a rithimid ar shonraí tástála, tá gach rud go breá. Agus nuair a fhorghníomhaíonn tú ceist i dtáirgeadh, áit a bhfuil againn, mar shampla, 4 milliún taifead, ansin níl gach rud an-mhaith dúinn. Toisc gur treoir é an scagadh a cheadú a ligeann do Cassandra na sonraí go léir ón tábla seo a bhailiú ó gach nód, gach ionad sonraí (má tá go leor acu sa bhraisle seo), agus gan ach é a scagadh ansin. Is analóg é seo de Scanadh Iomlán, agus is ar éigean atá aon duine thar a bheith sásta leis.

Mura raibh de dhíth orainn ach úsáideoirí le haitheantas, bheimis ceart go leor leis seo. Ach uaireanta caithfimid ceisteanna eile a scríobh agus srianta eile a chur ar an roghnúchán. Mar sin, cuimhnímid: is léarscáil é seo go léir a bhfuil eochair deighilte ann, ach taobh istigh de tá léarscáil sórtáilte.

Agus tá eochair aici freisin, ar a dtugaimid an Eochair Chnuasaithe. Tá an eochair seo, ina bhfuil, ina dhiaidh sin, comhdhéanta de na colúin a roghnaíonn muid, le cabhair óna dtuigeann Cassandra conas a dhéantar a sonraí a shórtáil go fisiciúil agus a bheidh suite ar gach nód. Is é sin, i gcás roinnt eochair Deighiltí, inseoidh an eochair Cnuasaithe duit go díreach conas na sonraí a bhrú isteach sa chrann seo, cén áit a thógfaidh sé ann.

Is crann é seo i ndáiríre, tugtar comparadóir go simplí ann, a gcuirimid sraith áirithe de cholúin i bhfoirm réad chuige, agus sonraítear é freisin mar liosta de na colúin.

CREATE TABLE users_by_year_salary_id (
	user_id uuid,
	name text,
	year int,
	salary float,
	PRIMARY KEY((year), salary, user_id)

Tabhair aird ar phríomhthreoir na Bunscoile; bíonn a chéad argóint (inár gcás, an bhliain) i gcónaí eochair Deighiltí. Is féidir é a bheith comhdhéanta de cholún amháin nó níos mó, is cuma. Má tá roinnt colúin ann, ní mór é a bhaint idir lúibíní arís ionas go dtuigeann an réamhphróiseálaí teanga gurb í seo an eochair Phríomhúil, agus taobh thiar de is iad na colúin eile go léir an eochair Chnuasaithe. Sa chás seo, déanfar iad a tharchur sa chomparadóir san ord ina bhfuil siad le feiceáil. Is é sin, tá an chéad cholún níos suntasaí, tá an dara ceann níos lú suntasach, agus mar sin de. Mar a scríobhaimid, mar shampla, is ionann réimsí do ranganna sonraí: déanaimid liosta de na réimsí, agus scríobhaimid cé na cinn is mó agus cé na cinn atá níos lú. I gCassandra, is iad seo, go réasúnta, réimsí na haicme sonraí, ar a gcuirfear na comhionanna a scríobhtar ina leith.

Socraímid sórtáil agus cuirimid srianta i bhfeidhm

Ní mór duit cuimhneamh go bhfuil an t-ord sórtála (ag dul suas, ag dul suas, is cuma cad é) socraithe ag an nóiméad céanna nuair a chruthaítear an eochair, agus ní féidir é a athrú níos déanaí. Cinneann sé go fisiciúil conas a shórtáilfear na sonraí agus conas a stórálfar iad. Más gá duit an eochair Chnuasaithe nó an t-ordú sórtála a athrú, beidh ort tábla nua a chruthú agus sonraí a aistriú isteach ann. Ní oibreoidh sé seo le ceann atá ann cheana féin.

Cassandra. Conas nach bhfaighidh tú bás mura bhfuil a fhios agat ach Oracle

Líonamar ár mbord le húsáideoirí agus chonaiceamar gur thit siad isteach i bhfáinne, ar dtús de réir bliana breithe, agus ansin taobh istigh de gach nód de réir tuarastail agus aitheantais úsáideora. Anois is féidir linn a roghnú trí shrianta a fhorchur.

Tá ár gceann oibre le feiceáil arís where, and, agus faigheann muid úsáideoirí, agus tá gach rud go breá arís. Ach má dhéanaimid iarracht gan ach cuid den eochair Chnuasaithe a úsáid, agus ceann nach bhfuil chomh suntasach, déanfaidh Cassandra gearán láithreach nach féidir leis an áit ar ár léarscáil a aimsiú ina bhfuil an réad seo, a bhfuil na réimsí seo aige don chomparadóir nialasach, agus an ceann seo. a bhí leagtha díreach , - áit a luíonn sé . Beidh orm na sonraí go léir ón nód seo a tharraingt suas arís agus iad a scagadh. Agus is analóg é seo de Scanadh Iomlán laistigh de nód, tá sé seo dona.

In aon chás doiléir, cruthaigh tábla nua

Más mian linn a bheith in ann díriú ar úsáideoirí de réir aitheantais, nó de réir aoise, nó tuarastail, cad ba cheart dúinn a dhéanamh? Ní dhéanfaidh aon ní. Bain úsáid as dhá tábla. Más gá duit úsáideoirí a bhaint amach ar thrí bhealach éagsúla, beidh trí thábla ann. Imithe atá na laethanta nuair a shábháil muid spás ar an scriú. Is é seo an acmhainn is saoire. Cosnaíonn sé i bhfad níos lú ná am freagartha, rud a d'fhéadfadh a bheith díobhálach don úsáideoir. Tá sé i bhfad níos taitneamhaí don úsáideoir rud éigin a fháil i soicind ná i 10 nóiméad.

Déanaimid trádáil spáis neamhriachtanach agus sonraí dí-normalaithe chun go mbeimid in ann scála maith agus oibriú go hiontaofa. Tar éis an tsaoil, i ndáiríre, tá braisle atá comhdhéanta de thrí ionad sonraí, a bhfuil cúig nóid ag gach ceann acu, le leibhéal inghlactha caomhnaithe sonraí (nuair nach gcailltear aon rud), in ann maireachtáil go hiomlán ar bhás ionad sonraí amháin. Agus dhá nód níos mó i ngach ceann den dá cheann eile. Agus ach amháin tar éis seo a thosaíonn na fadhbanna. Is iomarcaíocht maith go leor é seo, is fiú cúpla thiomáineann agus próiseálaí SSD breise. Dá bhrí sin, d'fhonn úsáid a bhaint as Cassandra, nach bhfuil SQL riamh, ina bhfuil aon caidrimh, eochracha coigríche, ní mór duit fios a bheith agat rialacha simplí.

Déanaimid gach rud a dhearadh de réir d'iarratais. Ní hé an rud is mó ná na sonraí, ach conas a bheidh an t-iarratas ag obair leis. Más gá dó sonraí éagsúla a fháil ar bhealaí éagsúla nó na sonraí céanna ar bhealaí éagsúla, ní mór dúinn é a chur ar bhealach atá áisiúil don fheidhmchlár. Seachas sin, teipfimid i Scanadh Iomlán agus ní thabharfaidh Cassandra aon bhuntáiste dúinn.

Is gnách sonraí a dhínormalú. Déanaimid dearmad ar ghnáthfhoirmeacha, níl bunachair shonraí choibhneasta againn a thuilleadh. Má chuirfimid rud éigin síos 100 uair, luífidh sé síos 100 uair. Tá sé fós níos saoire ná stopadh.

Roghnaimid na heochracha do dheighilt ionas go ndéantar iad a dháileadh de ghnáth. Nílimid ag iarraidh go dtitfeadh hash ár n-eochracha in aon raon cúng amháin. Is é sin, is drochshampla an bhliain bhreithe sa sampla thuas. Níos cruinne, tá sé go maith má tá ár n-úsáideoirí a dháileadh de ghnáth de réir bliana breithe, agus olc má tá muid ag caint faoi mhic léinn 5ú grád - an deighilt ní bheidh an-mhaith.

Roghnaítear an sórtáil uair amháin ag céim chruthú na nEochrach Cnuasaithe. Más gá é a athrú, beidh orainn ár tábla a nuashonrú le heochair eile.

Agus an rud is tábhachtaí: más gá dúinn a fháil ar na sonraí céanna ar 100 bealaí éagsúla, ansin beidh orainn 100 táblaí éagsúla.

Foinse: will.com

Add a comment