Cassandra. Sida aadan u dhiman haddii aad kaliya taqaan Oracle

Haye Habr.

Magacaygu waa Misha Butrimov, waxaan jeclaan lahaa inaan wax yar kaaga sheego Cassandra. Sheekadayda waxay faa'iido u yeelan doontaa kuwa aan weligood la kulmin NoSQL database - waxay leedahay astaamo badan oo fulin ah iyo cillado aad u baahan tahay inaad wax ka ogaato. Oo haddii aadan arkin wax aan ahayn Oracle ama xog kale oo xiriir la leh, waxyaalahan ayaa badbaadin doona noloshaada.

Maxaa ku wanaagsan Cassandra? Waa xog-ururin NoSQL ah oo loo qaabeeyey iyada oo aan hal dhibic oo guuldarro ah lahayn oo si fiican u miisaantay. Haddii aad u baahan tahay inaad ku darto dhowr terabytes xog-ururin, waxaad si fudud ugu dari kartaa giraanta. Ku balaadhi xarun xogeed kale? Ku dar noodhadhka kooxda Kordhi RPS la farsameeyay? Ku dar noodhadhka kooxda Waxay u shaqeysaa dhanka kale sidoo kale.

Cassandra. Sida aadan u dhiman haddii aad kaliya taqaan Oracle

Maxaa kale oo ay ku fiican tahay? Waxay ku saabsan tahay maaraynta codsiyo badan. Laakiin imisa ayaa badan? 10, 20, 30, 40 kun codsi ilbiriqsikii maahan wax badan. 100 kun oo codsi ilbiriqsikiiba si loo duubo - sidoo kale. Waxaa jira shirkado sheegay in ay hayaan 2 milyan oo codsi ilbiriqsikiiba. Waxay u badan tahay inay rumaystaan.

Iyo mabda 'ahaan, Cassandra waxay leedahay hal farqi weyn oo ka yimaada xogta xiriirka - maaha mid la mid ah iyaga oo dhan. Tanina aad ayay muhiim u tahay in la xasuusto.

Wax kasta oo isku si u eg isku si uma shaqeeyaan

Mar uu saaxiib ii yimid oo i weydiiyey: “Halkan waa luqad weydiinta CQL Cassandra, waxayna leedahay hadal la xushay, waxay leedahay halkee, waxay leedahay iyo. Waxaan qoraa waraaqo mana shaqeeyaan. waayo?" In Cassandra loola dhaqmo sida xog ururineed oo kale ayaa ah habka ugu fiican ee la isku dili karo. Aniguna ma dhiirrigelinayo, waa ka mamnuuc Ruushka. Waxaad kaliya naqshadayn doontaa wax khaldan.

Tusaale ahaan, macaamiil ayaa noo yimid oo nagu yidhi: “Aan dhisno kaydka xogta taxanaha TV-ga, ama kaydka kaydka buugga cuntada. Waxaan halkaas ku haysan doonaa suxuunta cuntada ama liiska taxanaha TV-ga iyo jilayaasha.” Waxaanu si farxad leh u nidhaahnaa: “Aan tagno!” Kaliya dir laba bytes, dhowr calaamadood oo aad dhammaysay, wax walba si degdeg ah oo la isku halleyn karo ayay u shaqayn doonaan. Wax walbana way fiican yihiin ilaa macaamiishu yimaadaan oo ay sheegaan in haweenka gurigu ay sidoo kale xalliyaan dhibaatada ka soo horjeeda: waxay haystaan ​​liiska alaabta, waxayna rabaan inay ogaadaan saxanka ay rabaan inay ku karsadaan. Waad dhimatay.

Tani waa sababta oo ah Cassandra waa xog-ururin isku-dhafan: waxay isla markaa bixisaa qiime muhiim ah waxayna ku kaydisaa xogta tiirar ballaaran. Java ama Kotlin, waxa lagu tilmaami karaa sidan:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Taasi waa, khariidad ka kooban khariidad la soocay. Furaha ugu horreeya ee khariidadan waa furaha safka ama furaha qaybta - furaha qaybinta. Furaha labaad, oo fure u ah khariidad hore loo soocay, waa furaha Kutlada.

Si aan u qeexno qaybinta kaydka xogta, aynu sawirno saddex nood. Hadda waxaad u baahan tahay inaad fahamto sida loo kala gooyo xogta qanjidhada. Maxaa yeelay, haddaynu wax walba ku ururinno hal (sida, waxaa jiri kara kun, laba kun, shan - inta aad jeceshahay), tani runtii maaha qaybinta. Sidaa darteed, waxaan u baahanahay hawl xisaabeed oo soo celin doonta lambar. Kaliya tiro, int dheer oo ku dhici doona qayb ka mid ah. Oo waxaan yeelan doonaa hal nood oo mas'uul ka ah hal saf, kan labaadna kan labaad, kan nth ee nth.

Cassandra. Sida aadan u dhiman haddii aad kaliya taqaan Oracle

Lanbarkan waxa lagu qaataa xashiish, kaas oo lagu dabaqo waxa aanu ugu yeedhno furaha qaybta. Kani waa tiirka lagu qeexay dardaaranka furaha aasaasiga ah, waana kan tiirka noqon doona furaha ugu horreeya iyo furaha khariidada. Waxay go'aaminaysaa noodhka heli doona xogta. Miis ayaa laga sameeyay Cassandra oo leh ku dhawaad ​​isku mid ah sida SQL:

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

)

Furaha koowaad ee kiiskan wuxuu ka kooban yahay hal tiir, waana furaha qaybinta.

Sidee isticmaalayaashu u fulin doonaan? Qaar waxay aadi doonaan hal meel, qaarna mid kale, qaarna saddex meelood meel. Natiijadu waa miiska xashiishka caadiga ah, oo sidoo kale loo yaqaano khariidad, oo sidoo kale loo yaqaan qaamuuska Python, ama qaab dhismeedka qiimaha muhiimka ah ee fudud kaas oo aan ka akhrin karno dhammaan qiyamka, akhrin iyo ku qori karno furaha.

Cassandra. Sida aadan u dhiman haddii aad kaliya taqaan Oracle

Dooro: marka la oggolaado shaandhaynta ay isu beddesho iskaanka buuxa, ama waxa aan la samaynayn

Aan qorno hadal xul ah: select * from users where, userid = . Waxay u egtahay sida Oracle: waxaan ku qornaa xulashada, qeex shuruudaha iyo wax walba oo shaqeeya, isticmaalayaashu way helayaan. Laakiin haddii aad doorato, tusaale ahaan, isticmaale leh sannad gaar ah oo dhalasho ah, Cassandra wuxuu ka cabanayaa inaysan buuxin karin codsiga. Sababtoo ah iyadu waxba kama garanayso sida aan u qaybinno xogta sanadka dhalashada - waxay leedahay hal tiir oo kaliya oo lagu tilmaamay fure. Markaas ayay tidhaahdaa, "Hagaag, weli waan buuxin karaa codsigan. Kudar oggolaanshaha shaandhaynta." Waxaan ku darnaa dardaaranka, wax walba way shaqeeyaan. Haddana wax aad u xun ayaa dhacaya.

Marka aan ku soconno xogta imtixaanka, wax walba waa fiican yihiin. Oo markaad sameyso su'aal ku saabsan wax soo saarka, halkaas oo aan haysanno, tusaale ahaan, 4 milyan oo rikoodh ah, markaa wax walba maaha kuwo aad noogu wanaagsan. Sababtoo ah oggolaanshaha shaandhaynta waa dardaaran u oggolaanaya Cassandra inuu ka soo ururiyo dhammaan xogta shaxdan dhammaan noodyada, dhammaan xarumaha xogta (haddii ay jiraan qaar badan oo iyaga ka mid ah kutladan), ka dibna kaliya sifeyso. Kani waa analooga ee Full Scan, oo ay adag tahay in qofna ku faraxsan yahay.

Haddii aan kaliya ugu baahanahay isticmaalayaasha aqoonsiga, waan ku fiicnaan lahayn tan. Laakiin mararka qaarkood waxaan u baahanahay inaan qorno su'aalo kale oo aan ku soo rogno xaddidaadyo kale xulashada. Sidaa darteed, waxaan xasuusannahay: kani waa khariidad leh furaha qaybinta, laakiin gudaha waa khariidad la soocay.

Waxayna sidoo kale leedahay fure, kaas oo aan ugu yeerno Furaha Kutlada. Furahaan, oo isna, ka kooban tiirarka aan dooranay, iyadoo la kaashanayo Cassandra waxay fahamsan tahay sida xogteeda jir ahaan loo kala soocayo oo ay ku yaalliin node kasta. Taasi waa, qaar ka mid ah furaha Qaybta, furaha Kutlada ayaa kuu sheegi doona sida saxda ah ee loogu riixo xogta geedkan, meesha uu qaadan doono.

Runtii kani waa geed, isbarbardhig si fudud ayaa halkaas loogu yeeraa, kaas oo aan u dhaafno tiirar gaar ah oo qaab shay ah, waxaana sidoo kale lagu tilmaamaa liiska tiirarka.

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

U fiirso dardaaranka muhiimka ah ee aasaasiga ah; doodiisa kowaad (xaaladkeena, sanadka) had iyo jeer waa furaha Qaybinta. Waxay ka koobnaan kartaa hal ama dhowr tiir, dhib malahan. Haddi ay jiraan dhawr tiir, waxa ay u baahantahay in mar kale la saaro xidhmooyinka si uu horudhacaha luuqadu u fahmo in kani yahay furaha koowaad, gadaashiisana dhamaan tiirarka kale waa furaha Kutlada. Xaaladdan oo kale, waxaa lagu kala qaadi doonaa isbarbardhigga sida ay u muuqdaan. Taasi waa, tiirka koowaad ayaa ka sii muhiimsan, kan labaadna wuu yar yahay, iyo wixi la mid ah. Sida aan u qorno, tusaale ahaan, waxay la mid yihiin goobaha xogta fasalka: waxaan taxnaa beeraha, iyagana waxaan u qoreynaa kuwa waaweyn iyo kuwa yaryar. Cassandra, kuwani waa, si xad dhaaf ah loo hadlaayo, qaybaha xogta fasalka, kuwaas oo isla'egyada loo qoray lagu dabaqi doono.

Waxaan dejinnay kala-soocidda waxaana soo rognay xannibaadyo

Waxaad u baahan tahay inaad xasuusato in nidaamka kala-soocida (soo-dejinta, kor u kaca, wax kasta) la dhigay isla waqtigaas marka furaha la abuurayo, oo aan la beddeli karin mar dambe. Jir ahaan ayay go'aaminaysaa sida xogta loo kala saarayo iyo sida loo kaydin doono. Haddii aad u baahan tahay inaad bedesho furaha Kutlada ama nidaamka kala soocida, waa inaad abuurtaa miis cusub oo aad xogta ku wareejiso. Tani kuma shaqayn doonto mid jira.

Cassandra. Sida aadan u dhiman haddii aad kaliya taqaan Oracle

Waxaan ka buuxinay miiskayaga isticmaalayaasha waxaanan aragnay inay ku dhaceen giraan, marka hore sanadka dhalashada, ka dibna gudaha nood kasta mushaharka iyo aqoonsiga isticmaalaha. Hadda waxaan dooran karnaa innagoo soo rogayna xayiraad.

Midkayaga shaqada ayaa soo muuqda mar kale where, and, oo waxaan helnaa isticmaalayaasha, wax walbana waa hagaagsan yihiin mar kale. Laakiin haddii aan isku dayno inaan isticmaalno qayb ka mid ah furaha Clustering-ka, iyo mid ka yar oo muhiim ah, markaa Cassandra waxay isla markiiba ka caban doontaa inaysan ka heli karin meesha khariidaddayada halkaas oo shaygan, oo leh meelahan isbarbardhigga null, iyo kan in la dhigay kaliya , - halka uu jiifo. Waa inaan mar kale ka soo saaraa dhammaan xogta noodhkan oo aan shaandheeyaa. Oo kani waa analoog ah Scan buuxa oo ku dhex jira noodhka, tani waa xun.

Xaalad kasta oo aan caddayn, samee miis cusub

Haddii aan rabno inaan awoodno inaan isticmaaleyaasha ku bartilmaameedsanno aqoonsiga, ama da'da, ama mushaharka, maxaan samaynaa? Waxba. Kaliya isticmaal laba miis. Haddii aad u baahan tahay inaad ku gaadho isticmaalayaasha saddex siyaabood oo kala duwan, waxaa jiri doona saddex miis. Way tageen maalmihii aanu kaydsanay booska furka. Tani waa kheyraadka ugu jaban. Waxay ku kacaysaa wax aad uga yar wakhtiga jawaabta, taas oo waxyeello u geysan karta isticmaalaha. Aad bay ugu faraxsan tahay isticmaaluhu inuu wax ku helo ilbiriqsiyo gudaheed marka loo eego 10 daqiiqo gudahood.

Waxaan ka baayac-mushtareynaa meel aan loo baahnayn iyo xogta aan caadiga ahayn ee awoodda si loo cabbiro si wanaagsan oo loogu shaqeeyo si la isku halleyn karo. Ka dib oo dhan, dhab ahaantii, koox ka kooban saddex xarumood oo xog ah, mid kasta oo ka mid ah wuxuu leeyahay shan qanjidh, oo leh heer la aqbali karo oo ilaalinta xogta (marka waxba la lumin), waxay awood u leedahay inay ka badbaado dhimashada hal xarun xog si buuxda. Iyo laba nood oo kale mid kasta oo ka mid ah labada soo hadhay. Oo tan ka dib kaliya dhibaatooyinka ayaa bilaabma. Tani waa dib-u-celin aad u wanaagsan, waxay u qalantaa dhowr ka mid ah darawallada SSDs iyo soo-saareyaasha dheeraadka ah. Sidaa darteed, si aad u isticmaasho Cassandra, oo aan waligood SQL, taas oo aysan jirin cilaaqaad, furayaal shisheeye, waxaad u baahan tahay inaad ogaato sharciyo fudud.

Wax walba waxaanu u qaabaynaa si waafaqsan codsigaaga. Waxa ugu weyni maaha xogta, laakiin sida codsigu ula shaqaynayo. Haddii ay u baahan tahay inay hesho xog kala duwan siyaabo kala duwan ama xog isku mid ah siyaabo kala duwan, waa inaan u dhignaa hab ku habboon codsiga. Haddii kale, waxaan ku guuldareysan doonaa in Full Scan iyo Cassandra na ma siin doono wax faa'iido ah.

Denormalization xogta waa caadi. Waxaan illownaa foomamka caadiga ah, hadda ma hayno xog-ururin xiriir ah. Haddaynu 100 jeer wax dhigno waxay jiifsanaysaa 100 jeer. Wali way ka jaban tahay joojinta

Waxaan dooranaa furayaasha qaybinta si ay si caadi ah u qaybiyaan. Ma doonayno in xashiishka furayaashayadu ay ku dhacaan hal meel oo cidhiidhi ah. Taasi waa, sanadka dhalashada ee tusaalaha sare waa tusaale xun. Si sax ah, way fiicantahay haddii isticmaaleyaasheenu sida caadiga ah loo qaybiyo sanadka dhalashada, iyo xun haddii aan ka hadlayno ardayda fasalka 5aad - qaybinta halkaas ma noqon doonto mid aad u wanaagsan.

Kala-soocidda waxa la doortaa hal mar marka la joogo marxaladda abuuritaanka Furaha Kutlada. Haddii ay u baahan tahay in wax laga beddelo, waa in aan miiskayaga ku cusboonaysiinnaa fure kale.

Iyo waxa ugu muhiimsan: haddii aan u baahanahay inaan soo saarno xog isku mid ah 100 siyaabood oo kala duwan, markaa waxaan yeelan doonaa 100 miisas kala duwan.

Source: www.habr.com

Add a comment