Cassandra. U se ke ua shoa joang haeba u tseba Oracle feela

Hello Habr.

Lebitso la ka ke Misha Butrimov, ke rata ho u bolella hanyenyane ka Cassandra. Pale ea ka e tla ba molemo ho ba e-so ka ba kopana le li-database tsa NoSQL - e na le likarolo tse ngata tsa ts'ebetsong le maraba ao u hlokang ho a tseba. 'Me haeba ha u e-so bone letho ntle le Oracle kapa database efe kapa efe ea kamano, lintho tsena li tla pholosa bophelo ba hau.

Ke eng e ntle ka Cassandra? Ke database ea NoSQL e entsoeng ntle le ntlha e le 'ngoe ea ho hloleha e lekanyang hantle. Haeba o hloka ho kenyelletsa li-terabyte tse 'maloa bakeng sa database, o kenyelletsa feela li-node lesale. E atolosetse setsing se seng sa data? Kenya li-node ho sehlopha. Eketsa RPS e sebeditsweng? Kenya li-node ho sehlopha. E sebetsa ka lehlakoreng le leng hape.

Cassandra. U se ke ua shoa joang haeba u tseba Oracle feela

O tseba eng hape? E mabapi le ho sebetsana le likopo tse ngata. Empa e ngata ke bokae? 10, 20, 30, 40 likopo tse likete ka motsotsoana ha li ngata. Likopo tse likete tse 100 ka motsotsoana bakeng sa ho rekota - hape. Ho na le lik'hamphani tse boletseng hore li boloka likopo tse limilione tse 2 motsotsoana. Mohlomong ba tla tlameha ho e dumela.

'Me ha e le hantle, Cassandra e na le phapang e le' ngoe e kholo ho tloha ho data ea kamano - ha e tšoane le bona ho hang. 'Me sena ke sa bohlokoa haholo ho se hopola.

Ha se ntho e 'ngoe le e 'ngoe e shebahalang e tšoana e sebetsang ka ho tšoana

Ka nako e ’ngoe mosebetsi-’moho o ile a tla ho ’na ’me a mpotsa: “Ke ena puo ea lipotso ea CQL Cassandra, ’me e na le polelo e khethiloeng, e na le moo, e nang le eona le. Ke ngola mangolo mme ha se sebetse. Hobaneng?". Ho tšoara Cassandra joalo ka database ea kamano ke tsela e phethahetseng ea ho ipolaea ka mabifi. 'Me ha ke e khothalletse, e thibetsoe Russia. U tla rala ntho e fosahetseng.

Ka mohlala, moreki e mong o tla ho rōna ’me a re: “A re theheng polokelo ea boitsebiso bakeng sa letoto la TV, kapa pokello ea boitsebiso bakeng sa buka ea diresepe. Re tla ba le lijana tsa lijo moo kapa lethathamo la letoto la TV le batšoantšisi ho lona. ” Ka thabo re re: “Ha re eeng!” Romela li-byte tse peli feela, matšoao a 'maloa' me u qetile, ntho e 'ngoe le e' ngoe e tla sebetsa ka potlako le ka botšepehi. 'Me ntho e' ngoe le e 'ngoe e ntle ho fihlela bareki ba tla' me ba re basali ba malapa le bona ba rarolla bothata bo fapaneng: ba na le lethathamo la lihlahisoa, 'me ba batla ho tseba hore na ba batla ho pheha sejana sefe. U shoele.

Lebaka ke hobane Cassandra ke database ea lebasetere: ka nako e ts'oanang e fana ka boleng ba bohlokoa mme e boloka lintlha ka likholomo tse pharaletseng. Ho Java kapa Kotlin, e ka hlalosoa tjena:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Ke hore, 'mapa o nang le' mapa o hlophisitsoeng. Senotlolo sa pele 'mapeng ona ke senotlolo sa Row kapa senotlolo sa karohano - senotlolo sa ho arola. Senotlolo sa bobeli, e leng senotlolo sa 'mapa o seng o hlophiloe, ke senotlolo sa Clustering.

Ho etsa mohlala oa ho ajoa ha database, a re huleng li-node tse tharo. Hona joale o hloka ho utloisisa mokhoa oa ho senya data ka li-node. Hobane haeba re kenya ntho e 'ngoe le e' ngoe ho e le 'ngoe (ka tsela, ho ka ba le sekete, likete tse peli, tse hlano - tse ngata kamoo u ratang), sena ha se hlile ha se mabapi le kabo. Ka hona, re hloka mosebetsi oa lipalo o tla khutlisa palo. Palo feela, int e telele e tla oela sebakeng se itseng. 'Me re tla ba le node e le' ngoe e ikarabellang bakeng sa mefuta e le 'ngoe, ea bobeli bakeng sa bobeli, ea nth bakeng sa nth.

Cassandra. U se ke ua shoa joang haeba u tseba Oracle feela

Nomoro ena e nkiloe ho sebelisoa hash function, e sebelisoang ho seo re se bitsang senotlolo sa Partition. Ena ke kholomo e boletsoeng ho Tataiso ea lintlha tsa mantlha, 'me ena ke kholomo eo e tla ba senotlolo sa pele le sa mantlha sa 'mapa. E etsa qeto ea hore na ke node efe e tla amohela data efe. Tafole e thehiloe Cassandra e nang le mantsoe a batlang a tšoana le a SQL:

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

)

Senotlolo sa mantlha tabeng ena se na le kholomo e le 'ngoe, hape ke senotlolo sa ho arola.

Basebelisi ba rona ba tla sebetsa joang? Ba bang ba tla ea sebakeng se seng, ba bang ba ea ho ba bang, ba bang ho ea boraro. Sephetho ke tafole e tloaelehileng ea hash, e tsejoang hape e le 'mapa, e tsejoang hape e le dikishinari ho Python, kapa sebopeho se bonolo sa bohlokoa sa Key moo re ka balang litekanyetso tsohle, ho bala le ho ngola ka senotlolo.

Cassandra. U se ke ua shoa joang haeba u tseba Oracle feela

Khetha: ha u lumella ho sefa ho fetoha ho skena ka botlalo, kapa seo u sa lokelang ho se etsa

Ha re ngole polelo e itseng e khethiloeng: select * from users where, userid = . Hoa tšoana le ho Oracle: re ngola khetha, hlalosa maemo le ntho e 'ngoe le e' ngoe e sebetsa, basebelisi ba e fumana. Empa haeba u khetha, ka mohlala, mosebedisi ea nang le selemo se itseng sa tsoalo, Cassandra o tletleba ka hore e ke ke ea phethahatsa kopo. Hobane ha a tsebe letho ho hang mabapi le hore na re aba lintlha joang mabapi le selemo sa tsoalo - o na le kholomo e le 'ngoe feela e bontšitsoeng e le senotlolo. Ebe o re, “Ho lokile, ke ntse ke khona ho phethahatsa kopo ena. Eketsa lumella ho sefa." Re eketsa taelo, tsohle lia sebetsa. Mme motsotsong ona ho etsahala ntho e mpe.

Ha re sebelisa data ea liteko, tsohle li hantle. 'Me ha u etsa potso tlhahisong, moo re nang le, mohlala, lirekoto tse limilione tse 4, joale ntho e' ngoe le e 'ngoe ha e ntle haholo ho rona. Hobane ho lumella ho sefa ke taelo e lumellang Cassandra ho bokella lintlha tsohle tse tsoang tafoleng ena ho tsoa ho li-node tsohle, litsi tsohle tsa data (haeba ho na le tse ngata tsa tsona sehlopheng sena), ebe feela e sefa. Ena ke analogue ea Full Scan, 'me ha ho motho ea e thabelang.

Haeba re ne re hloka feela basebelisi ka ID, re ne re tla phela hantle ka sena. Empa ka linako tse ling re hloka ho ngola lipotso tse ling le ho beha lithibelo tse ling ho khethoeng. Ka hona, rea hopola: ena kaofela ke 'mapa o nang le senotlolo sa ho arola, empa ka hare ho oona ho na le' mapa o hlophisitsoeng.

Hape o na le senotlolo, seo re se bitsang Clustering Key. Senotlolo sena, seo le sona, se nang le litšiea tseo re li khethang, ka thuso eo Cassandra a utloisisang hore na data ea eona e hlophisoa joang 'me e tla be e le sebakeng se seng le se seng. Ke hore, bakeng sa senotlolo se seng sa Partition, senotlolo sa Clustering se tla u bolella hantle hore na u ka sutumelletsa data joang sefateng sena, hore na e tla nka sebaka sefe moo.

Ha e le hantle sena ke sefate, se bapisang se bitsoa feela moo, moo re fetisang sehlopha se itseng sa litšiea ka sebōpeho sa ntho, 'me e boetse e hlalosoa e le lethathamo la litšiea.

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

Ela hloko taelo ea mantlha ea mantlha; khang ea eona ea pele (ho rona, selemo) e lula e le senotlolo sa Partition. E ka ba le kholomo e le 'ngoe kapa ho feta, ha ho na taba. Haeba ho na le litšiea tse 'maloa, e hloka ho tlosoa ka masakaneng hape e le hore preprocessor ea puo e utloisise hore ena ke senotlolo sa mantlha,' me ka mor'a eona litšiea tse ling kaofela ke senotlolo sa Clustering. Tabeng ena, li tla fetisoa ka papiso ka tatellano eo li hlahang ka eona. Ke hore, kholomo ea pele ke ea bohlokoa haholo, ea bobeli ha e bohlokoa hakaalo, joalo-joalo. Tsela eo re ngolang ka eona, mohlala, e lekana le masimo bakeng sa lihlopha tsa data: re thathamisa masimo, 'me bakeng sa bona re ngola hore na ke life tse kholoanyane le tse nyenyane. Ho Cassandra, tsena ke, ha ho bapisoa, masimo a sehlopha sa data, moo ho tla sebelisoa tse lekanang le tsona.

Re beha litlhophiso le ho beha lithibelo

U lokela ho hopola hore taelo ea mofuta (ho theoha, ho nyoloha, eng kapa eng) e behiloe ka nako e le 'ngoe ha senotlolo se bōptjoa,' me se ke ke sa fetoloa hamorao. E etsa qeto ea hore na data e tla hlophisoa joang le hore na e tla bolokoa joang. Haeba o hloka ho fetola konopo ea Clustering kapa tatellano ea ho hlophisa, o tla tlameha ho theha tafole e ncha le ho fetisetsa data ho eona. Sena se ke ke sa sebetsa le se seng se ntse se le teng.

Cassandra. U se ke ua shoa joang haeba u tseba Oracle feela

Re ile ra tlatsa tafole ea rona ka basebelisi mme ra bona hore ba oela ka har'a selikalikoe, pele ka selemo sa tsoalo, ebe ka hare ho node ka 'ngoe ka moputso le ID ea mosebelisi. Hona joale re ka khetha ka ho beha lithibelo.

Ea rona e sebetsang e hlaha hape where, and, 'me re fumana basebelisi,' me tsohle li hantle hape. Empa haeba re leka ho sebelisa feela karolo ea senotlolo sa Clustering, 'me e seng ea bohlokoa haholo, Cassandra o tla tletleba hang-hang hore e ke ke ea fumana sebaka 'mapeng oa rona moo ntho ena, e nang le likarolo tsena bakeng sa comparator ea lefeela, le ena. seo se ne se sa tsoa behoa , - moo a robetseng teng. Ke tla tlameha ho hula lintlha tsohle ho node ena hape ebe ke e sefa. 'Me sena ke analogue ea Full Scan ka har'a node, sena se mpe.

Boemong bofe kapa bofe bo sa hlakang, theha tafole e ncha

Haeba re batla ho khona ho lebisa basebelisi ka ID, kapa ka lilemo, kapa ka moputso, re lokela ho etsa joang? Ha ho letho. Sebelisa litafole tse peli feela. Haeba o hloka ho fihlela basebelisi ka litsela tse tharo tse fapaneng, ho tla ba le litafole tse tharo. Matsatsi a fetile ha re boloka sebaka holim'a screw. Ena ke mohloli o theko e tlaase. E bitsa chelete e tlase haholo ho feta nako ea karabo, e ka bang kotsi ho mosebelisi. Ho monate haholo hore mosebelisi a fumane ho hong ka motsotsoana ho feta ka metsotso e 10.

Re rekisa sebaka se sa hlokahaleng le data e sa tsitsang bakeng sa bokhoni ba ho hola hantle le ho sebetsa ka ts'epo. Ha e le hantle, sehlopha se nang le litsi tse tharo tsa data, e 'ngoe le e' ngoe e na le li-node tse hlano, tse nang le boemo bo amohelehang ba ho boloka boitsebiso (ha ho se letho le lahlehileng), le khona ho pholoha lefu la setsi se le seng sa data ka ho feletseng. Le li-node tse ling tse peli ho e 'ngoe ea tse peli tse setseng. 'Me feela ka mor'a sena mathata a qala. Ena ke khaello e ntle haholo, e bohlokoa ho li-drive le li-processor tse 'maloa tse eketsehileng. Ka hona, e le hore u sebelise Cassandra, eo ho seng mohla e leng SQL, eo ho eona ho se nang likamano, linotlolo tsa linaheng tse ling, u lokela ho tseba melao e bonolo.

Re rala tsohle ho latela kopo ea hau. Ntho e ka sehloohong ha se data, empa hore na kopo e tla sebetsa joang le eona. Haeba e hloka ho amohela data e fapaneng ka mekhoa e fapaneng kapa data e tšoanang ka mekhoa e fapaneng, re tlameha ho e beha ka tsela e loketseng ts'ebeliso. Ho seng joalo, re tla hloleha ho Full Scan mme Cassandra e ke ke ea re fa monyetla ofe kapa ofe.

Denormalizing data ke ntho e tloaelehileng. Re lebala ka liforomo tse tloaelehileng, ha re sa na li-database tsa likamano. Haeba re beha ntho fatše ka makhetlo a 100, e tla robala ka makhetlo a 100. E ntse e theko e tlase ho feta ho emisa.

Re khetha linotlolo tsa ho arola e le hore li ka ajoa ka mokhoa o tloaelehileng. Ha re batle hash ea linotlolo tsa rona e oela sebakeng se le seng se moqotetsane. Ke hore, selemo sa tsoalo mohlaleng o ka holimo ke mohlala o mobe. Ha e le hantle, ho molemo haeba basebelisi ba rona ba atisa ho ajoa ka selemo sa tsoalo, 'me ho hobe haeba re bua ka liithuti tsa sehlopha sa 5 - karohano ea moo e ke ke ea e-ba ntle haholo.

Ho hlopha ho khethoa hanngoe sethaleng sa ho theha Clustering Key. Haeba e hloka ho fetoloa, re tla tlameha ho nchafatsa tafole ea rona ka senotlolo se fapaneng.

'Me ntho ea bohlokoa ka ho fetisisa: haeba re hloka ho fumana lintlha tse tšoanang ka litsela tse 100 tse fapaneng, re tla ba le litafole tse 100 tse fapaneng.

Source: www.habr.com

Eketsa ka tlhaloso