Cassandra. Mar nach bàsaich thu mura h-eil thu eòlach ach air Oracle

Hi Habr.

Is e m ’ainm Misha Butrimov, bu mhath leam beagan innse dhut mu Cassandra. Bidh an sgeulachd agam feumail dhaibhsan nach do choinnich a-riamh ri stòran-dàta NoSQL - tha tòrr fheartan gnìomhachaidh agus duilgheadasan ann air am feum thu fios a bhith agad. Agus mura h-eil thu air dad fhaicinn ach Oracle no stòr-dàta dàimh sam bith eile, sàbhalaidh na rudan sin do bheatha.

Dè tha cho math mu dheidhinn Cassandra? Is e stòr-dàta NoSQL a th’ ann a chaidh a dhealbhadh às aonais aon phuing fàilligeadh a tha a ’sgèile gu math. Ma dh’ fheumas tu terabytes no dhà a chur ris airson cuid de stòr-dàta, dìreach cuir nodan ris a’ fhàinne. Leudaich e gu ionad dàta eile? Cuir nòtaichean ris a’ chòmhlan. Àrdachadh RPS pròiseasaichte? Cuir nòtaichean ris a’ chòmhlan. Bidh e ag obair an taobh eile cuideachd.

Cassandra. Mar nach bàsaich thu mura h-eil thu eòlach ach air Oracle

Dè eile air a bheil i math? Tha e mu dheidhinn a bhith a’ làimhseachadh mòran iarrtasan. Ach dè an ìre a tha tòrr? Chan eil mòran 10, 20, 30, 40 mìle iarrtas gach diog. 100 mìle iarrtas gach diog airson clàradh - cuideachd. Tha companaidhean ann a thuirt gu bheil iad a' cumail 2 mhillean iarrtas gach diog. Is dòcha gum feum iad a chreidsinn.

Agus ann am prionnsabal, tha aon eadar-dhealachadh mòr aig Cassandra bho dhàta dàimh - chan eil e coltach riutha idir. Agus tha seo glè chudromach airson cuimhneachadh.

Chan eil a h-uile dad a tha coltach ri chèile ag obair mar an ceudna

Aon uair ‘s gun tàinig co-obraiche thugam agus dh’ fhaighnich e: “Seo cànan ceist CQL Cassandra, agus tha aithris taghte aige, tha càite, tha e agus. Bidh mi a’ sgrìobhadh litrichean agus chan eil e ag obair. Carson?". Is e a bhith a’ làimhseachadh Cassandra mar stòr-dàta dàimh an dòigh cheart air fèin-mharbhadh fòirneartach a dhèanamh. Agus chan eil mi ga bhrosnachadh, tha e toirmisgte anns an Ruis. Bidh thu dìreach a’ dealbhadh rudeigin ceàrr.

Mar eisimpleir, thig neach-ceannach thugainn agus ag ràdh: “Togamaid stòr-dàta airson sreathan Tbh, no stòr-dàta airson eòlaire reasabaidh. Bidh soithichean bìdh againn an sin no liosta de shreath Tbh agus cleasaichean ann.” Bidh sinn ag ràdh le toileachas: “Rachamaid!” Dìreach cuir dà bytes, soidhne no dhà agus tha a h-uile dad deiseil, obraichidh a h-uile dad gu math luath agus earbsach. Agus tha a h-uile dad ceart gu leòr gus an tig an luchd-ceannach agus ag ràdh gu bheil mnathan-taighe cuideachd a ’fuasgladh na duilgheadas eile: tha liosta de thoraidhean aca, agus tha iad airson faighinn a-mach dè a’ mhias a tha iad airson a chòcaireachd. Tha thu marbh.

Tha seo air sgàth gur e stòr-dàta tar-chinealach a th’ ann an Cassandra: aig an aon àm a’ toirt seachad prìomh luach agus a’ stòradh dàta ann an colbhan farsaing. Ann an Java no Kotlin, faodar a mhìneachadh mar seo:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Is e sin, mapa anns a bheil mapa seòrsaichte cuideachd. 'S e a' chiad iuchair don mhapa seo an iuchair Row no an iuchair Partition - an iuchair sgaradh. Is e an dàrna iuchair, a tha na iuchair do mhapa a chaidh a sheòrsachadh mar-thà, an iuchair Clustering.

Gus sgaoileadh an stòr-dàta a nochdadh, tarraingidh sinn trì nodan. A-nis feumaidh tu tuigsinn mar a dhì-cheileadh an dàta gu nodan. Oir ma chuireas sinn a h-uile càil ann an aon (co-dhiù, faodaidh mìle, dà mhìle, còig a bhith ann - nas urrainn dhut), chan eil seo gu mòr mu dheidhinn cuairteachadh. Mar sin, feumaidh sinn gnìomh matamataigeach a thilleas àireamh. Dìreach àireamh, int fada a thuiteas ann an raon air choreigin. Agus bidh aon nód againn airson aon raon, an dàrna fear airson an dàrna, an nth airson an nth.

Cassandra. Mar nach bàsaich thu mura h-eil thu eòlach ach air Oracle

Tha an àireamh seo air a thoirt a’ cleachdadh gnìomh hash, a tha air a chuir an sàs anns an rud ris an can sinn an iuchair Partition. Is e seo an colbh a tha air a shònrachadh anns a’ phrìomh phrìomh stiùireadh, agus seo an colbh a bhios mar a’ chiad agus an iuchair as bunaitiche air a’ mhapa. Bidh e a’ dearbhadh dè an nód a gheibh an dàta. Tha clàr air a chruthachadh ann an Cassandra le cha mhòr an aon cho-chòrdadh ri SQL:

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

)

Tha an iuchair Bun-sgoile sa chùis seo air a dhèanamh suas de aon cholbh, agus is e cuideachd an iuchair sgaradh.

Ciamar a choileanas ar luchd-cleachdaidh? Thèid cuid gu aon nód, cuid gu nod eile, agus cuid gu treas. Is e an toradh clàr hash àbhaisteach, ris an canar cuideachd mapa, ris an canar cuideachd faclair ann am Python, no structar prìomh luach sìmplidh às an urrainn dhuinn na luachan gu lèir a leughadh, a leughadh agus a sgrìobhadh le iuchair.

Cassandra. Mar nach bàsaich thu mura h-eil thu eòlach ach air Oracle

Tagh: nuair a cheadaicheas sìoladh tionndadh gu làn scan, no dè nach bu chòir a dhèanamh

Sgrìobhamaid aithris taghte: select * from users where, userid = . Tha e a ’tionndadh a-mach mar ann an Oracle: bidh sinn a’ sgrìobhadh tagh, sònraich na cumhaichean agus bidh a h-uile dad ag obair, gheibh luchd-cleachdaidh e. Ach ma thaghas tu, mar eisimpleir, neach-cleachdaidh le bliadhna-breith sònraichte, tha Cassandra a 'gearan nach urrainn dha an t-iarrtas a choileanadh. Leis nach eil fios aice idir mu mar a bhios sinn a’ sgaoileadh dàta mu bhliadhna breith - chan eil aice ach aon cholbh air a chomharrachadh mar iuchair. An uairsin tha i ag ràdh, “Ceart gu leòr, is urrainn dhomh fhathast an t-iarrtas seo a choileanadh. Cuir ris an cead sìoladh." Bidh sinn a’ cur ris an stiùireadh, bidh a h-uile dad ag obair. Agus aig an àm seo tha rudeigin uamhasach a’ tachairt.

Nuair a ruitheas sinn air dàta deuchainn, tha a h-uile dad gu math. Agus nuair a nì thu ceist ann an cinneasachadh, far a bheil, mar eisimpleir, 4 millean clàr, chan eil a h-uile dad glè mhath dhuinn. Leis gu bheil cead sìoladh na stiùireadh a leigeas le Cassandra an dàta gu lèir bhon chlàr seo a chruinneachadh bho gach nod, a h-uile ionad dàta (ma tha mòran dhiubh sa bhuidheann seo), agus dìreach an uairsin a shìoladh. Is e seo analogue de Full Scan, agus cha mhòr gu bheil duine air leth toilichte leis.

Mura feum sinn ach luchd-cleachdaidh le ID, bhiodh sinn ceart gu leòr le seo. Ach uaireannan feumaidh sinn ceistean eile a sgrìobhadh agus cuingeachaidhean eile a chuir air an taghadh. Mar sin, tha sinn a’ cuimhneachadh: is e mapa a tha seo uile aig a bheil iuchair sgaradh, ach a-staigh tha mapa eagraichte.

Agus tha iuchair aice cuideachd, ris an can sinn an Clustering Key. Tha an iuchair seo, a tha, an uair sin, air a dhèanamh suas de na colbhan a thaghas sinn, le cuideachadh a tha Cassandra a 'tuigsinn mar a tha an dàta aice air a rèiteachadh gu corporra agus bidh e suidhichte air gach nód. Is e sin, airson cuid de iuchair Partition, innsidh an iuchair Clustering dhut dìreach mar a phut thu an dàta a-steach don chraoibh seo, dè an àite a bheir e an sin.

Is e craobh a tha seo dha-rìribh, canar coimeas ri dìreach an sin, ris am bi sinn a’ dol seachad air seata sònraichte de cholbhan ann an cruth nì, agus tha e cuideachd air a shònrachadh mar liosta de cholbhan.

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

Thoir aire don phrìomh stiùireadh; tha a’ chiad argamaid aige (anns a’ chùis againn, a’ bhliadhna) an-còmhnaidh mar iuchair Partition. Faodaidh aon cholbh no barrachd a bhith ann, chan eil e gu diofar. Ma tha grunn cholbhan ann, feumar a thoirt air falbh eadar camagan a-rithist gus am bi an ro-phròiseasar cànain a’ tuigsinn gur e seo am prìomh iuchair, agus air a chùlaibh tha na colbhan eile uile mar an iuchair Clustering. Anns a 'chùis seo, thèid an sgaoileadh anns a' choimeasar san òrdugh anns a bheil iad a 'nochdadh. Is e sin, tha a 'chiad cholbh nas cudromaiche, chan eil an dàrna fear cho cudromach, agus mar sin air adhart. Tha mar a sgrìobhas sinn, mar eisimpleir, co-ionann ri raointean airson clasaichean dàta: bidh sinn a’ liostadh nan raointean, agus air an son bidh sinn a’ sgrìobhadh dè an fheadhainn a tha nas motha agus nas lugha. Ann an Cassandra, is iad sin, an ìre mhath a’ bruidhinn, raointean a’ chlas dàta, ris an cuirear na co-ionannachdan sgrìobhte air a shon.

Bidh sinn a 'suidheachadh rèiteachadh agus a' cur bacadh air

Feumaidh tu cuimhneachadh gu bheil an òrdugh seòrsachaidh (teàrnadh, dìreadh, ge bith dè) air a shuidheachadh aig an aon àm nuair a thèid an iuchair a chruthachadh, agus chan urrainnear atharrachadh nas fhaide air adhart. Bidh e a’ dearbhadh gu corporra mar a thèid an dàta a sheòrsachadh agus mar a thèid a stòradh. Ma dh’fheumas tu an iuchair Clustering atharrachadh no òrdugh a sheòrsachadh, feumaidh tu clàr ùr a chruthachadh agus dàta a ghluasad a-steach ann. Chan obraich seo le fear a tha ann mar-thà.

Cassandra. Mar nach bàsaich thu mura h-eil thu eòlach ach air Oracle

Lìon sinn ar bòrd le luchd-cleachdaidh agus chunnaic sinn gun do thuit iad ann am fàinne, an toiseach ro bhliadhna breith, agus an uairsin a-staigh air gach nód a rèir tuarastal agus ID neach-cleachdaidh. A-nis is urrainn dhuinn taghadh le bhith a’ sparradh cuingealachaidhean.

Tha am fear obrach againn a’ nochdadh a-rithist where, and, agus gheibh sinn luchd-cleachdaidh, agus tha a h-uile dad gu math a-rithist. Ach ma dh’ fheuchas sinn ri dìreach pàirt den iuchair Clustering a chleachdadh, agus tè nach eil cho cudromach, an uairsin gearain Cassandra sa bhad nach urrainn dhi an t-àite a lorg air a’ mhapa againn far a bheil an nì seo, aig a bheil na raointean sin airson a’ choimeasar null, agus am fear seo. bha sin direach air a shuidheachadh, — far am bheil e 'na luidhe. Feumaidh mi an dàta gu lèir a tharraing suas bhon nód seo a-rithist agus a shìoladh. Agus is e seo analogue de Full Scan taobh a-staigh nód, tha seo dona.

Ann an suidheachadh neo-shoilleir sam bith, cruthaich clàr ùr

Ma tha sinn airson a bhith comasach air cuimseachadh air luchd-cleachdaidh le ID, no a rèir aois, no a rèir tuarastail, dè a bu chòir dhuinn a dhèanamh? Chan eil dad. Dìreach cleachd dà chlàr. Ma dh'fheumas tu luchd-cleachdaidh a ruighinn ann an trì dòighean eadar-dhealaichte, bidh trì clàran ann. Tha na làithean air falbh nuair a shàbhail sinn àite air an sgriubha. Is e seo an goireas as saoire. Tha e a’ cosg mòran nas lugha na an ùine freagairt, a dh’ fhaodadh a bhith cronail don neach-cleachdaidh. Tha e tòrr nas tlachdmhoire don neach-cleachdaidh rudeigin fhaighinn ann an diog na ann an 10 mionaidean.

Bidh sinn a’ malairt àite neo-riatanach agus dàta neo-àbhaisteach airson a bhith comasach air sgèile gu math agus obrachadh gu earbsach. Às deidh na h-uile, gu dearbh, tha cruinneachadh anns a bheil trì ionadan dàta, le còig nodan aig gach fear dhiubh, le ìre iomchaidh de ghleidheadh ​​​​dàta (nuair nach eil dad air chall), comasach air mairsinn gu tur bàs aon ionad dàta. Agus dà nodan eile anns gach aon den dhà eile. Agus is ann dìreach às deidh seo a thòisicheas na duilgheadasan. Is e call obrach math a tha seo, is fhiach e dà dhràibhear SSD agus pròiseasairean a bharrachd. Mar sin, gus Cassandra a chleachdadh, nach eil ann an SQL a-riamh, anns nach eil dàimhean, iuchraichean cèin, feumaidh fios a bhith agad air riaghailtean sìmplidh.

Bidh sinn a’ dealbhadh a h-uile càil a rèir d’ iarrtas. Chan e am prìomh rud an dàta, ach mar a bhios an tagradh ag obair leis. Ma dh'fheumas e dàta eadar-dhealaichte fhaighinn ann an diofar dhòighean no an aon dàta ann an diofar dhòighean, feumaidh sinn a chuir ann an dòigh a tha freagarrach airson an tagraidh. Rud eile, fàilligidh sinn ann an Full Scan agus cha toir Cassandra buannachd sam bith dhuinn.

Tha dì-mheadhanachadh dàta àbhaisteach. Bidh sinn a’ dìochuimhneachadh mu fhoirmean àbhaisteach, chan eil stòran-dàta dàimheach againn tuilleadh. Ma chuireas sinn rudeigin sìos 100 uair, luidhidh e sìos 100 uair. Tha e fhathast nas saoire na stad.

Bidh sinn a’ taghadh na h-iuchraichean airson sgaradh gus am bi iad air an sgaoileadh gu h-àbhaisteach. Chan eil sinn ag iarraidh gun tuit hash ar n-iuchraichean a-steach do aon raon cumhang. Is e sin, tha a’ bhliadhna-breith san eisimpleir gu h-àrd na dhroch eisimpleir. Nas mionaidiche, tha e math ma tha an luchd-cleachdaidh againn mar as trice air an sgaoileadh le bliadhna breith, agus dona ma tha sinn a 'bruidhinn mu dheidhinn oileanaich 5mh ìre - cha bhi an sgaradh an sin glè mhath.

Tha seòrsachadh air a thaghadh aon uair aig ìre cruthachaidh Clustering Key. Ma dh’ fheumar atharrachadh, feumaidh sinn ar clàr ùrachadh le iuchair eile.

Agus an rud as cudromaiche: ma dh'fheumas sinn an aon dàta fhaighinn air ais ann an 100 diofar dhòighean, bidh 100 clàran eadar-dhealaichte againn.

Source: www.habr.com

Cuir beachd ann