Cassandra. Bii o ṣe le ku ti o ba mọ Oracle nikan

Hello, Habr.

Orukọ mi ni Misha Butrimov, Emi yoo fẹ lati sọ fun ọ diẹ nipa Cassandra. Itan mi yoo wulo fun awọn ti ko tii pade awọn apoti isura infomesonu NoSQL - o ni ọpọlọpọ awọn ẹya imuse ati awọn ọfin ti o nilo lati mọ nipa rẹ. Ati pe ti o ko ba tii ri ohunkohun miiran ju Oracle tabi eyikeyi data ibatan miiran, awọn nkan wọnyi yoo gba ẹmi rẹ là.

Kini o dara nipa Cassandra? O jẹ aaye data NoSQL ti a ṣe apẹrẹ laisi aaye ikuna kan ti o ni iwọn daradara. Ti o ba nilo lati ṣafikun tọkọtaya terabytes fun data data kan, o kan ṣafikun awọn apa si iwọn. Faagun rẹ si ile-iṣẹ data miiran? Ṣafikun awọn apa si iṣupọ. Ṣe alekun RPS ti a ṣe ilana? Ṣafikun awọn apa si iṣupọ. O tun ṣiṣẹ ni idakeji.

Cassandra. Bii o ṣe le ku ti o ba mọ Oracle nikan

Kini ohun miiran ti o dara ni? O jẹ nipa mimu ọpọlọpọ awọn ibeere mu. Ṣugbọn melo ni pupọ? 10, 20, 30, 40 ẹgbẹrun ibeere fun keji ni ko Elo. Awọn ibeere 100 ẹgbẹrun fun iṣẹju keji fun gbigbasilẹ - paapaa. Awọn ile-iṣẹ wa ti o sọ pe wọn tọju awọn ibeere miliọnu 2 fun iṣẹju kan. Wọn yoo ni lati gbagbọ.

Ati ni opo, Cassandra ni iyatọ nla kan lati data ibatan - ko jọra si wọn rara. Ati pe eyi ṣe pataki pupọ lati ranti.

Ko ohun gbogbo ti o wulẹ kanna ṣiṣẹ kanna

Ni kete ti ẹlẹgbẹ kan wa si mi o beere: “Eyi ni ede ibeere CQL Cassandra kan, ati pe o ni alaye yiyan, o ni ibiti, o ni ati. Mo kọ awọn lẹta ati pe ko ṣiṣẹ. Kí nìdí?". Itoju Cassandra bi aaye data ibatan jẹ ọna pipe lati ṣe igbẹmi ara ẹni iwa-ipa. Ati pe Emi ko ṣe igbega rẹ, o jẹ ewọ ni Russia. Iwọ yoo kan ṣe apẹrẹ nkan ti ko tọ.

Fún àpẹẹrẹ, oníbàárà kan wá sọ́dọ̀ wa, ó sì sọ pé: “Jẹ́ kí a kọ ibi ìpamọ́ fún ọ̀wọ́ tẹlifíṣọ̀n, tàbí ibi ìpamọ́ fún ìtọ́sọ́nà ìṣètò. A yoo ni awọn ounjẹ ounjẹ nibẹ tabi atokọ ti jara TV ati awọn oṣere ninu rẹ. ” A sọ pẹlu ayọ pe: “Jẹ ki a lọ!” Kan firanṣẹ awọn baiti meji, awọn ami ami meji ati pe o ti pari, ohun gbogbo yoo ṣiṣẹ ni iyara ati igbẹkẹle. Ati pe ohun gbogbo dara titi awọn alabara yoo fi wa sọ pe awọn iyawo ile tun yanju iṣoro idakeji: wọn ni atokọ ti awọn ọja, ati pe wọn fẹ lati mọ iru satelaiti ti wọn fẹ lati ṣe. O ti ku.

Eyi jẹ nitori Cassandra jẹ aaye data arabara: nigbakanna o pese iye bọtini kan ati pe o tọju data ni awọn ọwọn nla. Ni Java tabi Kotlin, o le ṣe apejuwe bi eyi:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Iyẹn ni, maapu ti o tun ni maapu ti a ti to lẹsẹsẹ ninu. Bọtini akọkọ si maapu yii jẹ bọtini ila tabi bọtini ipin - bọtini ipin. Bọtini keji, eyiti o jẹ kọkọrọ si maapu ti a ti lẹsẹsẹ tẹlẹ, jẹ bọtini Isopọ.

Lati ṣe apejuwe pinpin data data, jẹ ki a fa awọn apa mẹta. Bayi o nilo lati ni oye bi o ṣe le decompose data sinu awọn apa. Nitoripe ti a ba jo ohun gbogbo sinu ọkan (nipasẹ ọna, o le jẹ ẹgbẹrun, ẹgbẹrun meji, marun - bi o ṣe fẹ), eyi kii ṣe nipa pinpin. Nitorinaa, a nilo iṣẹ mathematiki ti yoo da nọmba kan pada. O kan nọmba kan, int gigun ti yoo ṣubu sinu diẹ ninu awọn sakani. Ati pe a yoo ni ipade kan ti o ni iduro fun iwọn kan, ekeji fun keji, nth ọkan fun nth.

Cassandra. Bii o ṣe le ku ti o ba mọ Oracle nikan

Nọmba yii ni a mu ni lilo iṣẹ hash, eyiti a lo si ohun ti a pe ni bọtini ipin. Eyi ni ọwọn ti o jẹ pato ninu itọsọna bọtini akọkọ, ati pe eyi ni ọwọn ti yoo jẹ akọkọ ati bọtini ipilẹ julọ ti maapu naa. O pinnu iru ipade ti yoo gba iru data. A ṣẹda tabili kan ni Cassandra pẹlu fere sintasi kanna bi ni SQL:

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

)

Bọtini akọkọ ninu ọran yii ni iwe kan, ati pe o tun jẹ bọtini ipin.

Bawo ni awọn olumulo wa yoo ṣe? Diẹ ninu awọn yoo lọ si ipade kan, diẹ si omiran, ati diẹ ninu si ẹkẹta. Abajade jẹ tabili hash lasan, ti a tun mọ ni maapu, ti a tun mọ ni iwe-itumọ ni Python, tabi ipilẹ iye Key ti o rọrun lati eyiti a le ka gbogbo awọn iye, ka ati kọ nipasẹ bọtini.

Cassandra. Bii o ṣe le ku ti o ba mọ Oracle nikan

Yan: nigba ti gba sisẹ laaye yipada si ọlọjẹ kikun, tabi kini lati ṣe

Jẹ ki a kọ diẹ ninu alaye yiyan: select * from users where, userid = . O wa ni bi Oracle: a kọ yan, pato awọn ipo ati ohun gbogbo ṣiṣẹ, awọn olumulo gba. Ṣugbọn ti o ba yan, fun apẹẹrẹ, olumulo kan pẹlu ọdun ibimọ kan, Cassandra kerora pe ko le mu ibeere naa ṣẹ. Nitoripe ko mọ ohunkohun rara nipa bii a ṣe pin kaakiri data nipa ọdun ibimọ - o ni iwe kan nikan ti o tọka bi bọtini. Lẹhinna o sọ pe, “Dara, Mo tun le mu ibeere yii ṣẹ. Ṣafikun gbigba sisẹ laaye." A ṣafikun itọsọna naa, ohun gbogbo ṣiṣẹ. Ati ni akoko yi nkankan ẹru ṣẹlẹ.

Nigba ti a ba ṣiṣẹ lori data idanwo, ohun gbogbo dara. Ati nigbati o ba ṣe ibeere kan ni iṣelọpọ, nibiti a ni, fun apẹẹrẹ, awọn igbasilẹ miliọnu 4, lẹhinna ohun gbogbo ko dara pupọ fun wa. Nitori gbigba sisẹ jẹ itọsọna ti o fun laaye Cassandra lati gba gbogbo data lati tabili yii lati gbogbo awọn apa, gbogbo awọn ile-iṣẹ data (ti o ba jẹ pe ọpọlọpọ ninu wọn wa ninu iṣupọ yii), ati lẹhinna ṣe àlẹmọ nikan. Eleyi jẹ ẹya afọwọṣe ti Full wíwo, ati ki o fee ẹnikẹni ni inudidun pẹlu o.

Ti a ba nilo awọn olumulo nikan nipasẹ ID, a yoo dara pẹlu eyi. Ṣugbọn nigbami a nilo lati kọ awọn ibeere miiran ati fa awọn ihamọ miiran lori yiyan. Nitorinaa, jẹ ki a ranti: gbogbo eyi jẹ maapu kan ti o ni bọtini ipin, ṣugbọn inu rẹ jẹ maapu ti a ṣeto.

Ó sì tún ní kọ́kọ́rọ́ kan, èyí tí a ń pè ní Kọ́kọ́rọ́ Àkópọ̀. Bọtini yii, eyiti, lapapọ, ni awọn ọwọn ti a yan, pẹlu iranlọwọ eyiti Cassandra loye bi data rẹ ṣe jẹ lẹsẹsẹ ti ara ati pe yoo wa lori ipade kọọkan. Iyẹn ni, fun diẹ ninu bọtini ipin, bọtini Clustering yoo sọ fun ọ gangan bi o ṣe le Titari data naa sinu igi yii, ibi wo ni yoo gba sibẹ.

Eleyi jẹ gan igi kan, a comparator ti wa ni nìkan a npe ni nibẹ, si eyi ti a koja kan awọn ṣeto ti awọn ọwọn ni awọn fọọmu ti ohun kan, ati awọn ti o ti wa ni tun pato bi awọn akojọ ti awọn ọwọn.

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

San ifojusi si itọsọna bọtini akọkọ; ariyanjiyan akọkọ rẹ (ninu ọran wa, ọdun) jẹ bọtini ipin nigbagbogbo. O le ni ọkan tabi diẹ ẹ sii awọn ọwọn, ko ṣe pataki. Ti awọn ọwọn pupọ ba wa, o nilo lati yọkuro ni awọn biraketi lẹẹkansi ki oluṣaaju ede ni oye pe eyi ni bọtini akọkọ, ati lẹhin rẹ gbogbo awọn ọwọn miiran jẹ bọtini Iṣiro. Ni idi eyi, wọn yoo gbejade ni comparator ni aṣẹ ti wọn han. Iyẹn ni, iwe akọkọ jẹ pataki diẹ sii, ekeji ko ṣe pataki, ati bẹbẹ lọ. Bii a ṣe kọ, fun apẹẹrẹ, awọn aaye dogba fun awọn kilasi data: a ṣe atokọ awọn aaye, ati fun wọn a kọ iru eyi ti o tobi ati eyiti o kere. Ni Cassandra, iwọnyi jẹ, sisọ ni ilodi si, awọn aaye ti kilasi data, eyiti awọn dọgba ti a kọ fun rẹ yoo lo.

A ṣeto tito lẹsẹsẹ ati fa awọn ihamọ

O nilo lati ranti pe aṣẹ too (sọkalẹ, igoke, ohunkohun) ti ṣeto ni akoko kanna nigbati bọtini ba ṣẹda, ati pe ko le yipada nigbamii. O pinnu nipa ti ara bi data yoo ṣe to lẹsẹsẹ ati bii yoo ṣe fipamọ. Ti o ba nilo lati yi bọtini Clustering pada tabi aṣẹ lẹsẹsẹ, iwọ yoo ni lati ṣẹda tabili tuntun ki o gbe data sinu rẹ. Eyi kii yoo ṣiṣẹ pẹlu ọkan ti o wa tẹlẹ.

Cassandra. Bii o ṣe le ku ti o ba mọ Oracle nikan

A kun tabili wa pẹlu awọn olumulo ati rii pe wọn ṣubu sinu oruka kan, akọkọ nipasẹ ọdun ibimọ, ati lẹhinna inu lori ipade kọọkan nipasẹ owo osu ati ID olumulo. Bayi a le yan nipa fifi awọn ihamọ.

Ọkan iṣẹ wa han lẹẹkansi where, and, ati awọn ti a gba awọn olumulo, ati ohun gbogbo ni itanran lẹẹkansi. Ṣugbọn ti a ba gbiyanju lati lo apakan kan ti bọtini Clustering, ati ọkan ti ko ṣe pataki, lẹhinna Cassandra yoo kerora lẹsẹkẹsẹ pe ko le wa aaye ninu maapu wa nibiti nkan yii, eyiti o ni awọn aaye wọnyi fun alafiwe asan, ati eyi ti o kan ṣeto, - ibi ti o dubulẹ. Emi yoo ni lati fa gbogbo data soke lati oju ipade yii lẹẹkansi ati ṣe àlẹmọ rẹ. Ati pe eyi jẹ afọwọṣe ti Ṣiṣayẹwo Kikun laarin apa kan, eyi ko dara.

Ni eyikeyi koyewa ipo, ṣẹda titun kan tabili

Ti a ba fẹ lati ni anfani lati fojusi awọn olumulo nipasẹ ID, tabi nipasẹ ọjọ-ori, tabi nipasẹ owo-oṣu, kini o yẹ ki a ṣe? Ko si nkankan. O kan lo awọn tabili meji. Ti o ba nilo lati de ọdọ awọn olumulo ni awọn ọna oriṣiriṣi mẹta, awọn tabili mẹta yoo wa. Lọ ni awọn ọjọ nigba ti a ti fipamọ aaye lori dabaru. Eleyi jẹ lawin awọn oluşewadi. O-owo pupọ kere si akoko idahun, eyiti o le ṣe ipalara si olumulo. O jẹ igbadun pupọ diẹ sii fun olumulo lati gba ohunkan ni iṣẹju kan ju iṣẹju mẹwa 10 lọ.

A ṣowo aaye ti ko wulo ati data ti a sọ di mimọ fun agbara lati ṣe iwọn daradara ati ṣiṣẹ ni igbẹkẹle. Lẹhinna, ni otitọ, iṣupọ ti o ni awọn ile-iṣẹ data mẹta, ọkọọkan wọn ni awọn apa marun, pẹlu ipele itẹwọgba ti itọju data (nigbati ohunkohun ko ba sọnu), ni anfani lati ye iku ti ile-iṣẹ data kan patapata. Ati awọn apa meji miiran ni ọkọọkan awọn meji ti o ku. Ati lẹhin eyi awọn iṣoro bẹrẹ. Eleyi jẹ kan lẹwa ti o dara apọju, o jẹ tọ kan tọkọtaya ti afikun SSD drives ati nse. Nitorinaa, lati le lo Cassandra, eyiti kii ṣe SQL, ninu eyiti ko si awọn ibatan, awọn bọtini ajeji, o nilo lati mọ awọn ofin ti o rọrun.

A ṣe apẹrẹ ohun gbogbo gẹgẹbi ibeere rẹ. Ohun akọkọ kii ṣe data naa, ṣugbọn bii ohun elo yoo ṣe ṣiṣẹ pẹlu rẹ. Ti o ba nilo lati gba awọn oriṣiriṣi data ni awọn ọna oriṣiriṣi tabi data kanna ni awọn ọna oriṣiriṣi, a gbọdọ fi sii ni ọna ti o rọrun fun ohun elo naa. Bibẹẹkọ, a yoo kuna ni Ṣiṣayẹwo ni kikun ati Cassandra kii yoo fun wa ni anfani eyikeyi.

Denormalizing data jẹ iwuwasi. A gbagbe nipa awọn fọọmu deede, a ko ni awọn data data ibatan mọ. Ti a ba fi nkan silẹ ni igba 100, yoo dubulẹ ni igba 100. O tun din owo ju idaduro.

A yan awọn bọtini fun ipin ki wọn pin ni deede. A ko fẹ ki hash ti awọn bọtini wa ṣubu sinu ibiti o dín kan. Iyẹn ni, ọdun ibi ni apẹẹrẹ loke jẹ apẹẹrẹ buburu. Ni deede diẹ sii, o dara ti awọn olumulo wa ni deede pin kaakiri nipasẹ ọdun ibimọ, ati buburu ti a ba n sọrọ nipa awọn ọmọ ile-iwe 5th - ipin ti o wa nibẹ kii yoo dara pupọ.

Ti yan tito lẹẹkan ni ipele ẹda Klustering Key. Ti o ba nilo lati yipada, a yoo ni lati ṣe imudojuiwọn tabili wa pẹlu bọtini miiran.

Ati ohun pataki julọ: ti a ba nilo lati gba data kanna ni awọn ọna oriṣiriṣi 100, lẹhinna a yoo ni awọn tabili oriṣiriṣi 100.

orisun: www.habr.com

Fi ọrọìwòye kun