Cassandra. Kusafa sei kana iwe uchingoziva Oracle

Hei Habr.

Zita rangu ndiMisha Butrimov, ndinoda kukuudza zvishoma nezveCassandra. Nyaya yangu ichave yakakosha kune avo vasina kumbobvira vasangana neNoSQL dhatabhesi - ine akawanda ekuita maficha nemakomba aunoda kuziva nezvazvo. Uye kana iwe usati waona chimwe chinhu kunze kweOracle kana chero imwe hukama dhatabhesi, izvi zvinhu zvinoponesa hupenyu hwako.

Chii chakanakira Cassandra? Iyo dhatabhesi yeNoSQL yakagadzirwa isina kana imwe poindi yekutadza inoyera zvakanaka. Kana iwe uchida kuwedzera akati wandei eterabytes kune imwe dhatabhesi, iwe unongo wedzera node kumhete. Iwedzere kune imwe nzvimbo yedata? Wedzera nodes kune sumbu. Wedzera yakagadziriswa RPS? Wedzera nodes kune sumbu. Inoshanda nenzira yakapesana zvakare.

Cassandra. Kusafa sei kana iwe uchingoziva Oracle

Chii chimwe chaanogona? Ndezve kubata zvikumbiro zvakawanda. Asi yakawanda sei? 10, 20, 30, 40 zviuru zvikumbiro pasekondi hazvina zvakawanda. 100 zviuru zvikumbiro pasekondi yekurekodha - zvakare. Pane makambani akati anochengeta 2 miriyoni zvikumbiro pasekondi. Vanotofanira kuzvitenda.

Uye pamusimboti, Cassandra ane musiyano mukuru kubva kune data rehukama - haina kufanana navo zvachose. Uye izvi zvakakosha zvikuru kuyeuka.

Hazvisi zvese zvinotaridzika zvakafanana zvinoshanda zvakafanana

Pane imwe nguva mumwe wandaishanda naye akauya kwandiri ndokubvunza kuti: “Heino CQL Cassandra mutauro wemubvunzo, uye ine chirevo chakasarudzwa, ine pairi, uye. Ndinonyora tsamba uye hazvishande. Sei?". Kubata Cassandra senge dhatabhesi yehukama ndiyo nzira yakakwana yekuzviuraya nechisimba. Uye ini handisi kuisimudzira, inorambidzwa muRussia. Unongogadzira chimwe chinhu chisina kunaka.

Somuenzaniso, mutengi anouya kwatiri oti: “Ngativakei dura rezvinyorwa zveTV dzakatevedzana, kana kuti dhatabhesi remabhuku eresipi. Tichava nendiro dzechikafu ipapo kana runyoro rwemitambo yeTV nevatambi mairi. " Tinoti nomufaro: “Handei!” Ingotumira mabyte maviri, mashoma ezviratidzo uye wapedza, zvese zvichashanda nekukurumidza uye nekuvimbika. Uye zvinhu zvose zvakanaka kusvikira vatengi vauya uye vanoti vakadzi veimba vari kugadzirisawo dambudziko rinopesana: vane runyoro rwezvigadzirwa, uye vanoda kuziva kuti ndeipi ndiro yavanoda kubika. Iwe wakafa.

Izvi zvinodaro nekuti Cassandra ndeye hybrid dhatabhesi: iyo panguva imwe chete inopa yakakosha kukosha uye inochengeta data mumakoramu akafara. MuJava kana Kotlin, inogona kutsanangurwa seizvi:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Kureva, mepu ine zvakare mepu yakarongwa. Kiyi yekutanga kumepu iyi kiyi yeRow kana Partition kiyi - kiyi yekugovera. Kiyi yechipiri, inova kiyi kune mepu yakatorongwa, ndiyo Clustering kiyi.

Kuenzanisira kugoverwa kwedhatabhesi, ngatidhirowe node nhatu. Iye zvino iwe unofanirwa kunzwisisa nzira yekubvisa iyo data mumanode. Nokuti kana tikapinza zvinhu zvose mune imwe (nenzira, panogona kuva nechiuru, zviuru zviviri, zvishanu - zvakawanda sezvaunoda), izvi hazvisi zvekugovera. Nokudaro, tinoda basa remasvomhu rinozodzorera nhamba. Ingori nhamba, inti refu iyo inowira mune imwe mhando. Uye isu tichava nenode imwe inotarisira kune rumwe rudzi, yechipiri kune yechipiri, nth imwe yenth.

Cassandra. Kusafa sei kana iwe uchingoziva Oracle

Iyi nhamba inotorwa uchishandisa hash function, iyo inoshandiswa kune yatinoti Partition key. Iyi ndiyo column inotsanangurwa muPrimary key directive, uye iyi ndiyo column ichave yekutanga uye yakanyanya kiyi pamepu. Iyo inosarudza kuti ndeipi node ichagamuchira iyo data. Tafura inogadzirwa muCassandra ine inenge yakafanana syntax semuSQL:

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

)

Kiyi Yekutanga mune iyi kesi ine koramu imwe, uye iri zvakare kiyi yekugovera.

Vashandisi vedu vachaita sei? Vamwe vachaenda kune imwe node, vamwe kune imwe, uye vamwe kune yechitatu. Mhedzisiro iyi tafura yakajairwa hashi, inozivikanwawo semepu, inozivikanwawo seduramazwi muPython, kana yakapusa Key kukosha chimiro kubva kwatinogona kuverenga ese kukosha, kuverenga nekunyora nekiyi.

Cassandra. Kusafa sei kana iwe uchingoziva Oracle

Sarudza: kana uchibvumira kusefa kunoshanduka kuita yakazara scan, kana zvekusaita

Ngatinyore chirevo chakasarudzwa: select * from users where, userid = . Zvinoitika senge muOracle: isu tinonyora sarudza, tsanangura mamiriro uye zvese zvinoshanda, vashandisi vanozviwana. Asi kana ukasarudza, semuenzaniso, mushandisi ane rimwe gore rekuzvarwa, Cassandra anonyunyuta kuti haigone kuzadzisa chikumbiro. Nekuti hapana chaanoziva zvachose nezvekugovera kwatinoita data nezvegore rekuzvarwa - ane koramu imwe chete inoratidzwa sekiyi. Anobva ati, “Zvakanaka, ndichiri kukwanisa kuzadzisa chikumbiro ichi. Wedzera bvumidza kusefa." Isu tinowedzera kuraira, zvese zvinoshanda. Uye panguva ino chimwe chinhu chinotyisa chinoitika.

Kana isu tichimhanya pabvunzo data, zvese zvakanaka. Uye kana iwe uchiita mubvunzo mukugadzira, kwatinayo, semuenzaniso, mamirioni mana marekodhi, saka zvese hazvina kunaka kwatiri. Nekuti kubvumidza kusefa murairo unobvumira Cassandra kuunganidza data rese kubva patafura iyi kubva kune ese ma node, ese data data (kana paine akawanda awo musumbu iri), uye chete wozoisefa. Iyi analogue yeFull Scan, uye hapana chero munhu ari kufadzwa nazvo.

Dai isu taingoda vashandisi neID, taizonaka neizvi. Asi dzimwe nguva tinoda kunyora mimwe mibvunzo uye kuisa zvimwe zvirambidzo pakusarudza. Naizvozvo, tinorangarira: iyi yese mepu ine kiyi yekuparadzanisa, asi mukati mayo mune mepu yakarongwa.

Uye anewo kiyi, yatinodaidza kuti Clustering Key. Iri kiyi, iro, iro, rinosanganisira makoramu atinosarudza, nerubatsiro rwekuti Cassandra anonzwisisa kuti data rayo rakarongwa sei mumuviri uye richawanikwa pane imwe neimwe node. Ndokunge, kune imwe Partition kiyi, kiyi yeClustering ichakuudza chaizvo kuti ungasundidzira sei data mumuti uyu, inzvimbo ipi yainotora ipapo.

Uyu ndiwo muti chaiwo, muenzanisi anongodaidzwa ipapo, kwatinopfuudza imwe seti yemakoramu muchimiro chechinhu, uye zvakare inotsanangurwa serondedzero yemakoramu.

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

Teerera kune Yekutanga kiyi yekurayira; nharo yayo yekutanga (munyaya yedu, gore) inogara iri Chikamu kiyi. Inogona kuve nekoramu imwe kana akawanda, hazvina basa. Kana paine makoramu akati wandei, inoda kubviswa mumabhuraketi zvakare kuitira kuti preprocessor yemutauro inzwisise kuti iyi ndiyo kiyi Yepuraimari, uye kuseri kwayo mamwe makoramu eClustering kiyi. Muchiitiko ichi, ivo vanozoparidzirwa mukuenzanisa mukurongeka kwavanooneka. Ndiko kuti, koramu yekutanga inonyanya kukosha, yechipiri haina kukosha, zvichingodaro. Manyorero atinoita, semuenzaniso, akaenzana minda yemakirasi edata: tinonyora minda, uye kwavari tinonyora kuti ndeapi makuru uye madiki. MuCassandra, aya ndiwo, kana tichitaura, minda yekirasi yedata, iyo yakaenzana yakanyorerwa iyo ichashandiswa.

Isu tinoisa kurongedza uye kuisa zvirambidzo

Iwe unofanirwa kuyeuka kuti urongwa hwemhando (kuburuka, kukwira, chero chipi zvacho) chakagadzirirwa panguva imwechete iyo kiyi yakasikwa, uye haigoni kuchinjwa gare gare. Iyo inotarisa pairi kuti data ichagadziriswa sei uye kuti ichachengetwa sei. Kana iwe uchida kushandura kiyi yeClustering kana kuronga kurongeka, uchafanirwa kugadzira tafura nyowani uye kuendesa data mairi. Izvi hazvishande nezviripo.

Cassandra. Kusafa sei kana iwe uchingoziva Oracle

Takazadza tafura yedu nevashandisi uye takaona kuti vakawira mumhete, kutanga negore rekuzvarwa, uyezve mukati pane imwe neimwe node nemuhoro uye mushandisi ID. Iye zvino tinogona kusarudza nekuisa zvirambidzo.

Yedu yekushanda inooneka zvakare where, and, uye tinowana vashandisi, uye zvinhu zvose zvakanaka zvakare. Asi kana tikaedza kushandisa chete chikamu cheClustering kiyi, uye isina kukosha, ipapo Cassandra anobva anyunyuta kuti haikwanise kuwana nzvimbo mumepu yedu pane chinhu ichi, chine minda iyi yeanofananidzira, uye ino. iyo yakanga ichangobva kuiswa , - kwaanorara. Ini ndichafanirwa kudhonza data rese kubva pane ino node zvakare uye kuisefa. Uye iyi analogue yeFull Scan mukati me node, izvi zvakaipa.

Mune chero mamiriro ezvinhu asina kujeka, gadzira tafura itsva

Kana tichida kukwanisa kunanga vashandisi neID, kana nezera, kana nemuhoro, chii chatinofanira kuita? Hapana. Ingoshandisa matafura maviri. Kana iwe uchida kusvika kune vashandisi nenzira nhatu dzakasiyana, pachava nematafura matatu. Aenda mazuva atakachengeta nzvimbo pane screw. Ichi ndicho chiwanikwa chakachipa. Inodhura zvishoma pane nguva yekupindura, iyo inogona kukanganisa mushandisi. Zvinonyanya kufadza kuti mushandisi agamuchire chimwe chinhu musekondi kupfuura mumaminetsi gumi.

Isu tinotengeserana zvisina basa nzvimbo uye denormalized data kuti tikwanise kuyera zvakanaka uye kushanda zvakavimbika. Mushure mezvose, chaizvoizvo, boka rinosanganisira nzvimbo nhatu dze data, imwe neimwe ine node shanu, ine chiyero chinogamuchirwa chekuchengetedza data (kana pasina chakarasika), inokwanisa kurarama nekufa kweimwe data data zvachose. Uye mamwe mafundo maviri mune imwe neimwe yeasara maviri. Uye chete mushure meizvi matambudziko anotanga. Iyi yakanaka yakanaka redundancy, yakakodzera akati wandei ekuwedzera SSD madhiraivha uye processors. Saka, kuti ushandise Cassandra, iyo isingambofi SQL, umo pasina hukama, makiyi ekunze, unofanirwa kuziva mitemo iri nyore.

Isu tinogadzira zvese zvinoenderana nechikumbiro chako. Chinhu chikuru hachisi iyo data, asi kuti mashandisirwo achaita sei nawo. Kana ichida kugashira data rakasiyana nenzira dzakasiyana kana iyo data yakafanana nenzira dzakasiyana, isu tinofanirwa kuiisa nenzira yakanakira application. Zvikasadaro, isu tinokundikana muFull Scan uye Cassandra haazotipe chero mukana.

Denormalizing data ndiyo yakajairika. Isu tinokanganwa nezve akajairwa mafomu, isu hatisisina hukama dhatabhesi. Kana tikaisa chinhu pasi ka100, chinorara pasi ka100. Ichiri yakachipa pane kumira.

Isu tinosarudza makiyi ekuparadzanisa kuitira kuti agovane zvakajairika. Hatidi kuti hashi yemakiyi edu iwire mune imwe nhete. Ndiko kuti, gore rekuberekwa mumuenzaniso uri pamusoro apa muenzaniso wakaipa. Kunyanya, zvakanaka kana vashandisi vedu vachiwanzo kugovaniswa negore rekuzvarwa, uye zvakaipa kana tiri kutaura nezvevadzidzi vegiredhi rechishanu - kupatsanura ikoko hakuzove kwakanaka.

Kuronga kunosarudzwa kamwe chete paClustering Key kugadzira nhanho. Kana ichida kuchinjwa, tichafanirwa kugadzirisa tafura yedu nekiyi yakasiyana.

Uye chinhu chinonyanya kukosha: kana tichida kudzoreredza data rakafanana munzira zana dzakasiyana, saka tichava ne100 matafura akasiyana.

Source: www.habr.com

Voeg