Cassandra. Ahoana no tsy ho faty raha tsy mahalala afa-tsy Oracle

Aho Habr.

Misha Butrimov no anarako, te-hilaza aminao kely momba an'i Cassandra aho. Ny tantarako dia hahasoa an'ireo izay mbola tsy nihaona tamin'ny angon-drakitra NoSQL - manana endri-javatra fampiharana sy fandrika maro tokony ho fantatrao. Ary raha tsy nahita na inona na inona afa-tsy Oracle na angon-drakitra mifandraika hafa ianao dia hamonjy ny ainao ireo zavatra ireo.

Inona no tsara momba an'i Cassandra? Izy io dia angon-drakitra NoSQL natao tsy misy teboka tsy fahombiazana izay mizana tsara. Raha mila manampy terabytes roa ianao ho an'ny angon-drakitra sasany dia ampidirinao fotsiny ny nodes amin'ny peratra. Hanitatra izany any amin'ny foibe angona hafa? Ampio nodes amin'ny cluster. Ampitomboy ny RPS voahodina? Ampio nodes amin'ny cluster. Miasa amin'ny lalana mifanohitra ihany koa izy io.

Cassandra. Ahoana no tsy ho faty raha tsy mahalala afa-tsy Oracle

Inona koa no maha tsara azy? Mikasika ny fikirakirana fangatahana maro. Ohatrinona anefa no betsaka? Ny fangatahana 10, 20, 30, 40 arivo isan-tsegondra dia tsy dia betsaka. Fangatahana 100 arivo isan-tsegondra ho an'ny fandraisam-peo - koa. Misy orinasa nilaza fa mitazona fangatahana 2 tapitrisa isan-tsegondra. Tsy maintsy hino an’izany angamba izy ireo.

Ary raha ny fitsipika, Cassandra dia manana fahasamihafana lehibe amin'ny angon-drakitra mifandraika - tsy mitovy amin'izy ireo mihitsy. Ary tena zava-dehibe ny mahatsiaro izany.

Tsy mitovy daholo ny zavatra mitovy

Indray mandeha nisy mpiara-miasa iray nanatona ahy ary nanontany hoe: “Ity ny fiteny CQL Cassandra fanontaniana, ary manana fanambarana voafantina izy, misy hoe aiza, misy ary. Manoratra taratasy aho dia tsy mandeha. Nahoana?" Ny fitondrana an'i Cassandra ho toy ny angon-drakitra mifandray no fomba tsara indrindra hamonoana tena amin'ny herisetra. Ary tsy mampiroborobo izany aho, voarara any Rosia izany. Hanamboatra zavatra tsy mety ianao.

Ohatra, misy mpanjifa tonga any aminay ary miteny hoe: “Andao isika hanorina database ho an'ny andian-tantara amin'ny fahitalavitra, na database ho an'ny lahatahiry momba ny recipe. Hanana sakafo ara-tsakafo any izahay na lisitr’ireo andian-tantara sy mpilalao ao amin’ny tele.” Miteny amim-pifaliana isika hoe: “Andao isika!” Alefaso fotsiny ny bita roa, famantarana roa dia vita ianao, hiasa haingana sy azo itokisana ny zava-drehetra. Ary tsara ny zava-drehetra mandra-pahatongan'ny mpanjifa milaza fa mamaha ny olana mifanohitra amin'izany koa ny vehivavy mpikarakara tokantrano: manana lisitry ny vokatra izy ireo, ary te hahafantatra izay sakafo tiany hohanina. Maty ianao.

Izany dia satria Cassandra dia angon-drakitra hybrid: manome lanja lehibe izy io ary mitahiry angona amin'ny tsanganana midadasika. Ao amin'ny Java na Kotlin dia azo faritana toy izao:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

Izany hoe sarintany misy sarintany voasokajy ihany koa. Ny lakile voalohany amin'ity sarintany ity dia ny lakile Row na lakile Partition - ny fanalahidin'ny fisarahana. Ny fanalahidy faharoa, izay fanalahidin'ny sarintany efa voalamina, dia ny fanalahidin'ny Clustering.

Mba hampisehoana ny fizarana ny angon-drakitra dia andao hanao sary telo nodes. Ankehitriny dia mila mahatakatra ny fomba famongorana ny angon-drakitra ho nodes ianao. Satria raha atambatra ho iray ny zava-drehetra (amin'ny ankapobeny, mety ho arivo, roa arivo, dimy - araka izay tianao), tsy resaka fizarana izany. Noho izany dia mila asa matematika izay hamerina isa. Tarehimarika fotsiny, int lava izay hilatsaka amin'ny faritra sasany. Ary hanana node iray isika tompon'andraikitra amin'ny faritra iray, ny faharoa ho an'ny faharoa, ny faha-n'ny faha-n.

Cassandra. Ahoana no tsy ho faty raha tsy mahalala afa-tsy Oracle

Ity isa ity dia raisina amin'ny fampiasana hash function, izay ampiharina amin'ny antsoina hoe Partition key. Ity no tsanganana voafaritra ao amin'ny toromarika fanalahidy Kilonga, ary ity no tsanganana izay ho fanalahidy voalohany sy fototra indrindra amin'ny sarintany. Izy io no mamaritra izay node hahazo izay angona. Misy tabilao noforonina ao Cassandra miaraka amin'ny syntax mitovy amin'ny SQL:

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

)

Ny fanalahidin'ny Kilonga amin'ity tranga ity dia misy tsanganana iray, ary io ihany koa ny fanalahidin'ny fisarahana.

Ahoana no hataon'ireo mpampiasa anay? Ny sasany dia mankany amin'ny node iray, ny sasany mankany amin'ny iray hafa, ary ny sasany mankany amin'ny fahatelo. Ny vokatr'izany dia latabatra tenifototra mahazatra, fantatra amin'ny anarana hoe sari-tany, fantatra ihany koa amin'ny hoe rakibolana amin'ny Python, na rafitra sanda Key tsotra izay ahafahantsika mamaky ny soatoavina rehetra, mamaky sy manoratra amin'ny alalan'ny fanalahidy.

Cassandra. Ahoana no tsy ho faty raha tsy mahalala afa-tsy Oracle

Safidio: rehefa avela hivadika ho scan feno ny sivana, na izay tsy tokony hatao

Andao hanoratra fanambarana voafantina: select * from users where, userid = . Toa toy ny ao amin'ny Oracle izany: manoratra mifidy izahay, mamaritra ny fepetra ary mandeha ny zava-drehetra, azon'ny mpampiasa izany. Saingy raha misafidy ianao, ohatra, mpampiasa iray manana taona nahaterahana iray, dia mitaraina i Cassandra fa tsy afaka manatanteraka ny fangatahana. Satria tsy mahalala na inona na inona momba ny fizarana angon-drakitra momba ny taona nahaterahana izy - tsanganana iray ihany no voatondro ho fanalahidy. Dia hoy izy: “Eny, mbola afaka manatanteraka io fangatahana io aho. Ampio mamela sivana." Manampy ny torolàlana izahay, mandeha ny zava-drehetra. Ary amin'izao fotoana izao dia misy zavatra mahatsiravina mitranga.

Rehefa mandeha amin'ny angon-drakitra fitsapana isika dia tsara ny zava-drehetra. Ary rehefa manao fangatahana amin'ny famokarana ianao, izay ananantsika, ohatra, firaketana 4 tapitrisa, dia tsy tsara ho antsika ny zava-drehetra. Satria ny fanivanana mamela dia torolalana ahafahan'i Cassandra manangona ny angona rehetra avy amin'ity latabatra ity avy amin'ny node rehetra, ny foibe angona rehetra (raha misy maro amin'izy ireo ao anatin'ity cluster ity), ary avy eo dia manivana azy. Ity dia analogue amin'ny Full Scan, ary zara raha misy faly amin'izany.

Raha mila mpampiasa amin'ny alàlan'ny ID fotsiny izahay dia mety tsara izany. Saingy indraindray mila manoratra fanontaniana hafa isika ary mametraka fameperana hafa amin'ny fisafidianana. Noho izany, tadidintsika: sarintany misy fanalahidin'ny fisarahana izany rehetra izany, fa ao anatiny dia sarintany voafantina.

Ary manana lakile koa izy, izay antsoinay hoe Clustering Key. Ity fanalahidy ity, izay, kosa, dia ahitana ny tsanganana izay nofantenantsika, miaraka amin'ny fanampian'i Cassandra hahatakatra ny fomba nandaminana ara-batana ny angona ary ho hita eo amin'ny node tsirairay. Izany hoe, ho an'ny fanalahidin'ny Partition sasany, ny fanalahidy Clustering dia hilaza aminao tsara ny fomba hanosehana ny angon-drakitra ao anatin'ity hazo ity, izay toerana halehany any.

Izany dia hazo tena izy, ny fampitahana dia antsoina fotsiny hoe, izay mandalo andian-tsangantsangana amin'ny endrika zavatra iray, ary voatondro ho lisitry ny tsanganana ihany koa.

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

Tandremo ny toromarika fanalahidy Kilonga; ny tohan-kevitra voalohany (amin'ny tranga misy antsika, ny taona) dia fanalahidin'ny Partition foana. Mety ahitana tsanganana iray na maromaro, tsy maninona izany. Raha misy tsanganana maromaro, dia mila esorina ao anaty fononteny indray izy io mba hahafantaran'ny mpandrindra fiteny fa io no lakile Kilonga, ary ao ambadik'izany ny tsanganana hafa rehetra dia ny fanalahidin'ny Clustering. Amin'ity tranga ity dia halefa ao amin'ny comparator izy ireo amin'ny filaharan'ny fisehoany. Izany hoe, ny tsanganana voalohany dia manan-danja kokoa, ny faharoa tsy dia manan-danja, sy ny sisa. Ny fomba fanoratra, ohatra, dia mitovy saha ho an'ny kilasy data: tanisaintsika ireo saha, ary ho azy ireo dia soratanay hoe iza no lehibe kokoa ary iza no kely kokoa. Ao amin'ny Cassandra, ireo dia, raha lazaina amin'ny teny hafa, ny sahan'ny kilasy data, izay hampiharana ny mitovy amin'izany.

Nametraka fanasokajiana izahay ary mametraka fameperana

Tokony hotadidinao fa ny filaharana (midina, miakatra, na inona na inona) dia napetraka amin'ny fotoana iray ihany rehefa noforonina ny fanalahidy, ary tsy azo ovaina izany any aoriana. Izy io no mamaritra ny fomba handaminana ny angona sy ny fomba fitahirizana azy. Raha mila manova ny fanalahidin'ny Clustering na ny filaharana ianao dia tsy maintsy mamorona latabatra vaovao ary mamindra angona ao anatiny. Tsy mety amin'ny efa misy izany.

Cassandra. Ahoana no tsy ho faty raha tsy mahalala afa-tsy Oracle

Nofenoinay tamin'ny mpampiasa ny latabatray ary hitanay fa latsaka tao anaty peratra izy ireo, voalohany tamin'ny taona nahaterahana, ary avy eo tao anaty node tsirairay tamin'ny karama sy ID mpampiasa. Ankehitriny isika dia afaka misafidy amin'ny fametrahana fameperana.

Miseho indray ny asantsika where, and, ary mahazo mpampiasa izahay, ary milamina indray ny zava-drehetra. Fa raha miezaka mampiasa afa-tsy ampahany amin'ny famaha Clustering isika, ary tsy dia manan-danja loatra, dia hitaraina avy hatrany i Cassandra fa tsy hahita ny toerana ao amin'ny sari-tany misy an'io zavatra io, izay manana ireo saha ireo ho an'ny fampitahana null, ary ity iray ity. izay vao napetraka , - izay misy azy. Tsy maintsy haka ny angon-drakitra rehetra avy amin'ity node ity indray aho ary hanivana azy. Ary ity dia analogue ny Full Scan ao anaty node, ratsy izany.

Amin'ny toe-javatra tsy mazava, mamorona latabatra vaovao

Raha te ho afaka mikendry mpampiasa amin'ny alàlan'ny ID, na amin'ny taona, na amin'ny karama isika, inona no tokony hataontsika? Tsy misy. Mampiasà latabatra roa fotsiny. Raha mila manatratra ireo mpampiasa amin'ny fomba telo samihafa ianao dia hisy latabatra telo. Lasa ny andro izay namonjy toerana tamin'ny visy. Ity no loharano mora indrindra. Latsaka lavitra noho ny fotoana famaliana izany, izay mety hanimba ny mpampiasa. Mahafinaritra kokoa ho an'ny mpampiasa ny mahazo zavatra ao anatin'ny iray segondra noho ny ao anatin'ny 10 minitra.

Izahay dia mivarotra habaka tsy ilaina sy angon-drakitra tsy ara-dalàna mba hahafahana manitatra tsara sy miasa azo antoka. Rehefa dinihina tokoa, raha ny marina, ny cluster izay misy foibe data telo, izay samy manana nodes dimy, miaraka amin'ny haavon'ny fitehirizana angon-drakitra azo ekena (rehefa tsy misy very), dia afaka mivelona amin'ny fahafatesan'ny foibe iray manontolo. Ary node roa hafa ao amin'ny tsirairay amin'ireo roa ambiny. Ary rehefa afaka izany, dia manomboka ny olana. Ity dia redundancy tsara tarehy, mendrika ny roa fanampiny SSD drive sy processeur. Noho izany, mba hampiasa Cassandra, izay tsy SQL na oviana na oviana, izay tsy misy fifandraisana, vahiny fanalahidy, dia mila mahafantatra fitsipika tsotra.

Mamolavola ny zava-drehetra araka ny fangatahanao izahay. Ny zava-dehibe dia tsy ny angon-drakitra, fa ny fomba fiasan'ny fampiharana azy. Raha mila mandray angon-drakitra samihafa amin'ny fomba samihafa na angon-drakitra mitovy amin'ny fomba samihafa, dia tsy maintsy mametraka izany amin'ny fomba mety amin'ny fampiharana. Raha tsy izany dia tsy hahomby amin'ny Scan feno isika ary tsy hanome tombony antsika i Cassandra.

Ny angon-drakitra denormalizing no mahazatra. Adinonay ny endrika mahazatra, tsy manana tahiry fifandraisana intsony izahay. Raha mametraka zavatra in-100 isika, dia mandry in-100 izany. Mbola mora kokoa noho ny mijanona.

Mifidy ny fanalahidy ho an'ny fisarahana izahay mba hizarana ara-dalàna. Tsy tianay ho latsaka ao anatin'ny elanelana tery iray ny hash amin'ny fanalahidinay. Izany hoe ny taona nahaterahana amin'ny ohatra etsy ambony dia ohatra ratsy. Raha ny marimarina kokoa, tsara raha mizara ara-dalàna ny mpampiasa antsika amin'ny taona nahaterahana, ary ratsy raha miresaka momba ny mpianatra kilasy faha-5 isika - tsy dia tsara loatra ny fisarahana eo.

Voafantina indray mandeha eo amin'ny dingana famoronana Clustering Key ny fanasokajiana. Raha mila ovaina izany dia tsy maintsy manavao ny latabatray amin'ny fanalahidy hafa isika.

Ary ny zava-dehibe indrindra: raha mila maka angon-drakitra mitovy amin'ny fomba 100 samihafa isika, dia hanana latabatra 100 samihafa isika.

Source: www.habr.com

Add a comment