NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Kusvika nguva pfupi yadarika, Odnoklassniki yakachengeta inosvika makumi mashanu TB yedata yakagadziriswa munguva chaiyo muSQL Server. Kune vhoriyamu yakadaro, hazvigoneke kupa nekukurumidza uye kwakavimbika, uye kunyange data centre kutadza-kushivirira kuwana uchishandisa SQL DBMS. Kazhinji, mumamiriro ezvinhu akadaro, imwe yeNoSQL storages inoshandiswa, asi hazvisi zvose zvinogona kuendeswa kuNoSQL: mamwe masangano anoda ACID transaction guarantees.

Izvi zvakatitungamirira kukushandiswa kweNewSQL kuchengetedza, kureva, DBMS inopa kukanganisa kushivirira, scalability uye kushanda kweNoSQL systems, asi panguva imwechete kuchengetedza ACID inovimbisa inozivikanwa kune classical systems. Kune mashoma anoshanda maindasitiri masisitimu eiyi kirasi nyowani, saka isu takaita yakadaro sisitimu isu tikaiisa mukushanda kwekutengesa.

Iyo inoshanda sei uye chii chakaitika - verenga pasi pekucheka.

Nhasi, vateereri vemwedzi weOdnoklassniki vanopfuura mamirioni makumi manomwe vakasiyana vashanyi. Isu Tiri mushanu dzepamusoro yakakura masocial network munyika, uye pakati pemasaiti makumi maviri ayo vashandisi vanopedza nguva yakawanda. Iyo OK zvivakwa zvinobata zvakakura kwazvo: zvinopfuura miriyoni HTTP zvikumbiro/sec kumberi. Zvikamu zvevhavha yevhavha yezvimedu zvinopfuura 8000 zviri pedyo nemumwe - mune ina Moscow data centers, izvo zvinoita kuti zvive nechokwadi chekuchengetedza network latency isingasviki 1 ms pakati pavo.

Tanga tichishandisa Cassandra kubvira 2010, kutanga neshanduro 0.6. Nhasi kune gumi nemaviri masumbu ari kushanda. Iyo inokurumidza cluster inoita zvinopfuura 4 miriyoni mashandiro pasekondi, uye zvitoro zvikuru 260 TB.

Nekudaro, aya ese akajairwa NoSQL masumbu anoshandiswa kuchengetedza zvisina kusimba kurongeka data. Isu taida kutsiva iyo huru isingachinjiki yekuchengetedza, Microsoft SQL Server, yakashandiswa kubva pakuvambwa kweOdnoklassniki. Iyo yekuchengetedza yaisanganisira anopfuura mazana matatu eSQL Server Standard Edition michina, yaive ne300 TB yedata - masangano ebhizinesi. Iyi data inoshandurwa sechikamu che ACID transactions uye inoda kuenderana kwepamusoro.

Kuti tigovane data paSQL Server node, takashandisa zvese zvakadzika uye zvakachinjika partitioning (kugovana). Nhoroondo, takashandisa iri nyore data sharding scheme: chimwe nechimwe chaive chakabatana nechiratidzo - basa reiyo ID yesangano. Masangano ane chiratidzo chimwechete akaiswa pane imwecheteyo SQL server. Iyo master-detail relationship yakashandiswa kuitira kuti zviratidzo zvemarekodhi makuru uye emwana aigara achienderana uye aive pane imwechete server. Mune social network, anenge ese marekodhi anogadzirwa pachinzvimbo chemushandisi - zvinoreva kuti data rese remushandisi mukati meimwe inoshanda subsystem inochengetwa pane imwe server. Ndiko kuti, bhizinesi rekutengeserana rinenge ragara richisanganisira matafura kubva kune imwe SQL server, izvo zvakaita kuti zvive nechokwadi chekuenderana kwedata uchishandisa emuno ACID transaction, pasina chikonzero chekushandisa. anononoka uye asina kuvimbika akagovera ACID transactions.

Kutenda kusharding uye nekumhanyisa SQL:

  • Isu hatishandise makiyi ekune dzimwe nyika zvipingamupinyi, sezvo kana sharding iyo ID ID inogona kunge iri pane imwe sevha.
  • Isu hatishandise maitiro akachengetwa uye zvinokonzeresa nekuda kwekuwedzera mutoro paDBMS CPU.
  • Isu hatishandise maJOIN nekuda kwezvose zviri pamusoro uye zvakawanda zvakaerekana kuverenga kubva kudhisiki.
  • Kunze kwekutengeserana, isu tinoshandisa iyo Read Uncommitted yekuzviparadzanisa nevamwe nhanho kudzikisa deadlocks.
  • Isu tinoita chete mapfupi kutengeserana (paavhareji ipfupi pane 100 ms).
  • Isu hatishandise akawanda-mutsara UPDATE uye DELETE nekuda kwehuwandu hukuru hweakafa - isu tinovandudza rekodhi rimwe chete panguva.
  • Isu tinogara tichiita mibvunzo chete pama indexes - mubvunzo une yakazara tafura scan plan yedu zvinoreva kuwandisa dhatabhesi uye kuita kuti itandike.

Matanho aya akatibvumira kudzvanya kunenge kwakanyanyisa kuita kunze kwemaseva eSQL. Zvisinei, zvinetso zvacho zvakaramba zvichiwanda. Ngativatarise.

Matambudziko neSQL

  • Sezvo isu takashandisa-yakanyorwa sharding, kuwedzera shards nyowani kwakaitwa nemaoko nevatungamiriri. Nguva yese iyi, scalable data replicas yanga isiri kuita zvikumbiro.
  • Sezvo huwandu hwemarekodhi mutafura huchikura, kumhanya kwekuisa nekugadzirisa kunodzikira; kana uchiwedzera indexes kune tafura iripo, iyo yekumhanyisa inodonha nechinhu; kusikwa uye kugadzira patsva kwe indexes kunoitika nekuderera.
  • Kuve nehuwandu hudiki hweWindows yeSQL Server mukugadzira kunoita kuti manejimendi ezvivakwa zviome

Asi dambudziko guru ndere

kukanganisa kushivirira

Iyo yekirasi SQL server ine kutadza kushivirira kukanganisa. Ngatiti iwe une imwe chete dhatabhesi server, uye inokundikana kamwe chete makore matatu. Munguva iyi saiti iri pasi kwemaminitsi makumi maviri, izvo zvinogamuchirwa. Kana iwe uine maseva makumi matanhatu nemana, saka saiti iri pasi kamwe pamavhiki matatu. Uye kana uine 20 maseva, saka saiti haishande svondo rega rega. Iri idambudziko.

Chii chingaitwa kuvandudza kukanganisa kushivirira kweSQL server? Wikipedia inotikoka kuvaka yakanyanya kuwanikwa cluster: apo kana paine kutadza kwechimwe chezvikamu pane chekuchengetedza.

Izvi zvinoda boka remidziyo inodhura: kudzokorora kwakawanda, optical fiber, kuchengetwa kwakagovaniswa, uye kuiswa kwenzvimbo yekuchengetera hakushande zvakavimbika: nezve 10% yekuchinja inopera nekutadza kweiyo backup node sechitima kuseri kwenode huru.

Asi kukanganisa kukuru kweboka rakadaro rinowanikwa zvikuru ndeye zero kuwanikwa kana data data iyo iripo ikakundikana. Odnoklassniki ine mana data data, uye isu tinofanirwa kuve nechokwadi chekushanda muchiitiko chekutadza kwakakwana mune imwe yacho.

Nokuti izvi tinogona kushandisa Multi-Master kudzokorora kwakavakirwa muSQL Server. Mhinduro iyi inodhura zvakanyanya nekuda kwemutengo wesoftware uye inotambura neanozivikanwa matambudziko nekudzokorora - kusingafungidzike kutengeserana kunonoka ne synchronous replication uye kunonoka mukushandisa kudzokorora (uye, semhedzisiro, yakarasika shanduko) neasynchronous replication. Zvinorehwa kugadziriswa kwegakava remaoko inoita kuti sarudzo iyi isashande zvachose kwatiri.

Matambudziko ose aya aida mhinduro huru, uye takatanga kuaongorora zvakadzama. Pano tinofanira kujairana neSQL Server inonyanya kuita - kutengeserana.

Kutengeserana kuri nyore

Ngatifungei nezve yakapfava kutengeserana, kubva pakuona kweyakashandiswa SQL programmer: kuwedzera mufananidzo kune album. Albums nemifananidzo zvinochengetwa mumahwendefa akasiyana. The album ine public photo counter. Zvadaro kutengeserana kwakadaro kunokamurwa kuita zvinotevera:

  1. Isu tinovhara iyo album nekiyi.
  2. Gadzira chinyorwa mutafura yemifananidzo.
  3. Kana iyo foto iine chimiro cheruzhinji, wobva wawedzera iyo yeruzhinji pikicha counter kune iyo albhamu, gadziridza rekodhi uye ita kutengeserana.

Kana mune pseudocode:

TX.start("Albums", id);
Album album = albums.lock(id);
Photo photo = photos.create(…);

if (photo.status == PUBLIC ) {
    album.incPublicPhotosCount();
}
album.update();

TX.commit();

Isu tinoona kuti yakajairika mamiriro ekutengeserana bhizinesi kuverenga data kubva kudhatabhesi kuenda kundangariro ye server yekushandisa, shandura chimwe chinhu uye chengetedza hutsva hutsva kudhatabhesi. Kazhinji mukutengeserana kwakadaro isu tinogadziridza akati wandei masangano, akati wandei matafura.

Paunenge uchiita kutengeserana, kugadziridzwa kwakafanana kweiyo data kubva kune imwe system inogona kuitika. Semuenzaniso, Antispam inogona kusarudza kuti mushandisi ane imwe nzira yekufungira uye saka mapikicha ese emushandisi haafanire kuve pachena, anofanirwa kutumirwa kune mwero, izvo zvinoreva kushandura photo.status kune imwe kukosha uye kudzima zviverengero zvinoenderana. Zviripachena, kana kuvhiya uku kukaitika pasina vimbiso yeatomicity yekushandisa uye kuparadzaniswa kwemakwikwi ekugadzirisa, semu. ACID, ipapo chigumisiro hachizove icho chinodiwa - ingave iyo pikicha counter icharatidza kukosha kwakashata, kana kwete mapikicha ose achatumirwa kuenzanisa.

Yakawanda yekodhi yakafanana, kugadzirisa akasiyana bhizinesi masangano mukati mekutengesa kumwe, yakanyorwa mukati mehupenyu hwese hweOdnoklassniki. Kubva pane ruzivo rwekutamira kuNoSQL kubva Pakupedzisira Consistency Isu tinoziva kuti dambudziko rakakura (uye nguva yekudyara) inobva mukugadzira kodhi kuchengetedza data kuenderana. Naizvozvo, isu takafunga chinhu chikuru chinodiwa kuti chengetedzo nyowani ive yekupihwa chaiyo ACID transaction yekushandisa logic.

Zvimwe, zvisinganyanyi kukosha, zvaidiwa zvaive:

  • Kana iyo data data ikakundikana, zvese kuverenga nekunyora kune nyowani yekuchengetedza kunofanirwa kuwanikwa.
  • Kuchengetedza ikozvino kukurumidza kukurumidza. Ndokunge, kana uchishanda neiyo nyowani repository, huwandu hwekodhi hunofanirwa kunge hwakafanana; hapafanirwe kuve nechikonzero chekuwedzera chero chinhu kune repository, gadzira algorithms ekugadzirisa kusawirirana, kuchengetedza yechipiri indexes, nezvimwe.
  • Kumhanya kwenzvimbo yekuchengetera kutsva kwaifanira kunge kwakakwira zvakanyanya, zvese kana uchiverenga data uye kana uchigadzira kutengeserana, izvo zvainyatsoreva kuti mudzidzo yakaoma, yepasirese, asi inononoka mhinduro, senge, semuenzaniso, yaisashanda. maviri-phase anoita.
  • Otomatiki pa-the-fly scaling.
  • Kushandisa yakachipa maseva, pasina chikonzero chekutenga exotic hardware.
  • Mikana yekuvandudzwa kwekuchengetedza nevagadziri vekambani. Mune mamwe mazwi, kukoshesa kwakapihwa kune varidzi kana kuvhurika sosi mhinduro, zviri nani muJava.

Sarudzo, zvisarudzo

Tichiongorora mhinduro dzinogoneka, takasvika kune mbiri sarudzo dzezvivakwa:

Yekutanga ndeyekutora chero SQL server uye kushandisa inodiwa kukanganisa kushivirira, scaling mechanism, failover cluster, kugadzirisa kusawirirana uye kugoverwa, yakavimbika uye nekukurumidza ACID transaction. Isu takatara iyi sarudzo seisina diki uye inoshanda zvakanyanya.

Yechipiri sarudzo ndeyekutora yakagadzirira-yakagadzirwa NoSQL chengetedzo ine yakamisikidzwa chiyero, failover cluster, kugadzirisa kusawirirana, uye kuita matranseksheni uye SQL iwe pachako. Pakutanga kuona, kunyange basa rekushandisa SQL, tisingatauri ACID transactions, rinoratidzika sebasa rinotora makore. Asi takazoona kuti iyo SQL ficha seti yatinoshandisa mukuita iri kure neANSI SQL se Cassandra CQL kure ne ANSI SQL. Tichinyatsotarisisa CQL, takaona kuti yaive padyo nezvataida.

Cassandra uye CQL

Saka, chii chinonakidza pamusoro peCassandra, chii chaainacho?

Chekutanga, pano iwe unogona kugadzira matafura anotsigira akasiyana emhando dzedata; unogona kuita SARUDZA kana UPDATE pakiyi yekutanga.

CREATE TABLE photos (id bigint KEY, owner bigint,…);
SELECT * FROM photos WHERE id=?;
UPDATE photos SET … WHERE id=?;

Kuita kuti replica data ifanane, Cassandra inoshandisa quorum approach. Munyaya yakapfava, izvi zvinoreva kuti kana zvidhori zvitatu zvemutsara mumwe chete zvikaiswa panzvimbo dzakasiyana dzeboka, kunyora kunoonekwa kwakabudirira kana ruzhinji rwemanodhi (kureva, maviri kubva matatu) akasimbisa budiriro yekunyora uku. . Iyo mutsara data inoonekwa seyakafanana kana, pakuverenga, mazhinji emanodhi akabvunzurudzwa uye akaasimbisa. Nekudaro, neatatu akadzokorora, yakakwana uye nekukurumidza data kuenderana kunovimbiswa kana imwe node ikatadza. Iyi nzira yakatibvumira kuita chirongwa chakatonyanya kuvimbika: gara uchitumira zvikumbiro kune ese matatu replicas, uchimirira mhinduro kubva kune maviri anokurumidza. Mhinduro yekunonoka yechitatu replica inoraswa mune iyi kesi. Node inononoka kupindura inogona kunge iine matambudziko akakomba - mabhureki, kuunganidzwa kwemarara muJVM, yakananga ndangariro kudzoreredza muLinux kernel, kutadza kwehardware, kubviswa kubva kunetiweki. Nekudaro, izvi hazvikanganise mashandiro emutengi kana data neimwe nzira.

Nzira iyo patinobata node nhatu togamuchira mhinduro kubva kune mbiri inodanwa kufungidzira: chikumbiro chekuwedzera replicas inotumirwa kunyange isati "yadonha".

Imwe bhenefiti yeCassandra iBatchlog, chigadziriso chinova nechokwadi chekuti batch yeshanduko yaunoita inogona kushandiswa zvizere kana kusaiswa zvachose. Izvi zvinotibvumira kugadzirisa A muACID - atomicity kunze kwebhokisi.

Chinhu chepedyo chekutengeserana muCassandra ndizvo zvinonzi "kutengeserana kwakareruka". Asi ivo vari kure ne "chaiyo" ACID kutengeserana: kutaura zvazviri, uyu mukana wekuita CAS pane data kubva rekodhi imwe chete, uchishandisa kubvumirana uchishandisa heavyweight Paxos protocol. Nokudaro, kukurumidza kwekutengeserana kwakadaro kwakaderera.

Zvatakanga tisina kuCassandra

Saka, taifanira kuita chaiyo ACID transactions muCassandra. Kushandisa izvo zvataigona kuita zviri nyore zvimwe zviviri zviri nyore maficha ekare eDBMS: inowirirana inokurumidza indexes, iyo yaizotitendera kuita sarudzo dzedata kwete chete nekiyi yekutanga, uye jenareta yenguva dzose ye monotonic auto-incrementing ID.

C* Imwe

Nokudaro DBMS itsva yakazvarwa C* Imwe, ine marudzi matatu emaseva node:

  • Kuchengeta - (inenge) akajairwa Cassandra maseva ane basa rekuchengetedza data pamadhisiki emunharaunda. Sezvo mutoro uye vhoriyamu yedata ichikura, huwandu hwavo hunogona kuyerwa nyore kusvika makumi nemazana.
  • Transaction coordinators - chengetedza kuitwa kwekutengeserana.
  • Vatengi maseva ekushandisa anoshandisa bhizinesi mashandiro uye anotanga kutengeserana. Panogona kuva nezviuru zvevatengi vakadaro.

NewSQL = NoSQL+ACID

Masevha emhando dzese chikamu cheboka rakajairika, shandisa iyo yemukati Cassandra meseji protocol kutaurirana uye makuhwa pakupanana ruzivo rwemasumbu. NeKurova Kwemoyo, maseva anodzidza nezve kutadza kuwirirana, chengetedza imwechete data schema - matafura, chimiro chavo uye kudzokorora; partitioning scheme, cluster topology, nezvimwe.

Vatengi

NewSQL = NoSQL+ACID

Panzvimbo pevatyairi vakajairwa, Fat Client mode inoshandiswa. Node yakadaro haichengetedzi data, asi inogona kuita semurongi wekuita chikumbiro, kureva kuti, Mutengi pachake anoita semurongi wezvikumbiro zvake: inobvunza zvinyorwa zvekuchengetedza uye inogadzirisa kusawirirana. Izvi hazvisi kungovimbika uye nekukurumidza kupfuura mutyairi akajairwa, izvo zvinoda kutaurirana nemurongi ari kure, asi zvakare inobvumidza iwe kudzora kutapurirana kwezvikumbiro. Kunze kwekutengeserana kwakavhurika pane mutengi, zvikumbiro zvinotumirwa kune repositori. Kana mutengi akavhura kutengeserana, saka zvikumbiro zvese mukati mekutengesa zvinotumirwa kumurongi wekutengesa.
NewSQL = NoSQL+ACID

C * Imwe Transaction Coordinator

Murongi chimwe chinhu chatakashandisira C * Imwe kubva pakutanga. Iro rine basa rekutonga matransaction, makiyi, uye marongero anoitwa matransaction.

Pakutengeserana kwega kwega, murongi anogadzira chidhindo chenguva: chimwe nechimwe chinotevera kutengeserana ukuru pane chapfuura. Sezvo Cassandra's gakava rekugadzirisa system rakavakirwa pazvitambi zvenguva (zvezvinyorwa zviviri zvinopokana, iyo ine chitambi chenguva ichangoburwa ichionekwa seyazvino), kunetsana kunogara kuchigadziriswa mukufarira kutengeserana kunotevera. Saka takashandisa Lamport watch - nzira yakachipa yekugadzirisa kusawirirana muhurongwa hwakagoverwa.

Locks

Kuti tive nechokwadi chekuzviparadzanisa nevamwe, takasarudza kushandisa nzira yakapusa - yekukiya makiyi zvichienderana nekiyi yekutanga rekodhi. Mune mamwe mazwi, mukutengeserana, rekodhi inofanira kutanga yakavharwa, chete ipapo kuverenga, kugadziridzwa, uye kuchengetwa. Chete mushure mekuita kwakabudirira rekodhi inogona kuvhurwa kuitira kuti makwikwi ekutengeserana anogona kuishandisa.

Kushandisa kuvhara kwakadaro kuri nyore munzvimbo isina kugoverwa. Muchirongwa chakagovaniswa, pane maviri makuru sarudzo: shandisa kukiya kukiyiwa pane cluster, kana kugovera matransaction kuitira kuti matransaction anosanganisira rekodhi imwechete agare achishandirwa nemurongi mumwechete.

Sezvo kwatiri isu data yakatogoverwa pakati pemapoka ekutengeserana emunharaunda muSQL, zvakasarudzwa kugovera mapoka ekutengeserana emunharaunda kune varongi: murongi mumwe anoita kutengeserana kwese nezviratidzo kubva ku0 kusvika ku9, yechipiri - nezviratidzo kubva ku10 kusvika ku19, zvichingoenda zvakadaro. Nekuda kweizvozvo, imwe neimwe yezviitiko zvemurongi inova tenzi weboka rekutengesa.

Ipapo makiyi anogona kuitwa muchimiro cheBanal HashMap mundangariro yemurongi.

Coordinator kukundikana

Sezvo murongi mumwe chete anoshandira boka rekutengeserana chete, zvakakosha kukurumidza kuona chokwadi chekukundikana kwayo kuitira kuti kuedza kwechipiri kuita kutengeserana kuchapera. Kuti tiite izvi nekukurumidza uye zvakavimbika, takashandisa yakazara yakabatana quorum heartbeat protocol:

Imwe neimwe nzvimbo yedata inobata angangoita maviri coordinator node. Nguva nenguva, murongi mumwe nemumwe anotumira meseji yekurova kwemoyo kune vamwe varongi uye anovaudza nezvekushanda kwayo, pamwe neapi mameseji ekurohwa kwemoyo aakagamuchira kubva kune varongi vari musumbu kekupedzisira.

NewSQL = NoSQL+ACID

Vachigamuchira ruzivo rwakafanana kubva kune vamwe sechikamu chemashoko avo ekurohwa kwemoyo, murongi wega wega anozvisarudzira kuti ndeapi masumbu emasumbu ari kushanda uye asiri, achitungamirwa neiyo quorum musimboti: kana node X yakagamuchira ruzivo kubva kuruzhinji rwemanodhi musumbu nezve yakajairika. kugamuchira mameseji kubva node Y, ipapo, Y inoshanda. Uye zvakapesana, kana ruzhinji ruchingotaura rusipo mameseji kubva node Y, ipapo Y aramba. Zvinoda kuziva kuti kana quorum ichizivisa node X kuti haisisiri kugamuchira mameseji kubva kwairi, ipapo node X pachayo inozviona sekunge yakundikana.

Mharidzo yemoyo inotumirwa nepamusoro-soro, kanokwana makumi maviri pasekondi, ine nguva ye20 ms. MuJava, zvakaoma kuvimbisa mhinduro yekushandisa mukati me50 ms nekuda kwehurefu hwakafanana hwekumira kunokonzerwa nemuunganidzi wemarara. Isu takakwanisa kuwana iyi nguva yekupindura tichishandisa G50 muunganidzi wemarara, izvo zvinotitendera kudoma chinangwa chenguva yekumira kweGC. Nekudaro, dzimwe nguva, kashoma, muunganidzi anomira anopfuura 1 ms, izvo zvinogona kutungamirira mukuonekwa kwenhema. Kuti izvi zvisaitike, murongi haatauri kukundikana kwenode iri kure kana meseji yekutanga kurova kwemoyo kubva kwairi inonyangarika, chete kana akati wandei anyangarika mumutsara.Izvi ndizvo zvatakakwanisa kuona kutadza kweiyo coordinator node muna 50. ms.

Asi hazvina kukwana kukurumidza kunzwisisa kuti ndeipi node yakamira kushanda. Tinofanira kuita chimwe chinhu pamusoro peizvi.

Reservation

The classic scheme inosanganisira, kana chiitiko chekukundikana kukuru, kutanga sarudzo itsva uchishandisa imwe ye fashionable zvakasikwa algorithms. Nekudaro, maalgorithms akadaro ane matambudziko anozivikanwa nekusangana kwenguva uye kureba kwesarudzo pachayo. Isu takakwanisa kudzivirira kunonoka kwakadaro tichishandisa coordinator kutsiva chirongwa mune network yakabatana zvizere:

NewSQL = NoSQL+ACID

Ngatitii tinoda kuita kutengeserana muboka 50. Ngatitarisei mberi kwechirongwa chekutsiviwa, ndiko kuti, iyo nodes ichaita kutengeserana muboka re50 kana chiitiko chekukundikana kwemurongi mukuru. Chinangwa chedu ndechekuchengetedza mashandiro ehurongwa muchiitiko chekutadza kwedata center. Ngationei kuti yekutanga kuchengetedza ichava node kubva kune imwe nzvimbo yedata, uye yechipiri chengetedzo ichava node kubva kune yechitatu. Ichi chirongwa chinosarudzwa kamwe chete uye hachichinje kusvikira iyo topology yesumbu yachinja, ndiko kuti, kusvikira node itsva dzapinda mairi (izvo zvinoitika kashoma). Maitiro ekusarudza tenzi mutsva anoshanda kana yekare akakundikana anogara ari akadai: yekutanga chengetedzo ichava tenzi anoshanda, uye kana yakamira kushanda, yechipiri chengetedzo ichava tenzi anoshanda.

Ichi chirongwa chakavimbika kupfuura algorithm yepasirese, sezvo kumisa tenzi mutsva zvakakwana kuona kutadza kweiyo yekare.

Asi vatengi vanozonzwisisa sei kuti ndeupi tenzi ari kushanda izvozvi? Hazvibviri kutumira ruzivo kuzviuru zvevatengi mu50 ms. Mamiriro ezvinhu anogoneka kana mutengi akatumira chikumbiro chekuvhura kutengeserana, asati aziva kuti tenzi uyu haasisiri kushanda, uye chikumbiro chichapera. Kudzivirira izvi kuti zvisaitike, vatengi vanofungidzira kutumira chikumbiro chekuvhura kutengeserana kune tenzi weboka uye ese ari maviri matura ake kamwechete, asi iye chete ari tenzi anoshanda panguva ino achapindura kuchikumbiro ichi. Mutengi achaita zvese zvinotevera kutaurirana mukati mekutengesa chete neanoshanda tenzi.

Backup masters nzvimbo yakagashira zvikumbiro zvekutengeserana zvisiri zvavo mumutsara wezvinoitika zvisati zvazvarwa, uko zvinochengetwa kwenguva yakati. Kana tenzi anoshanda akafa, tenzi mutsva anoita zvikumbiro zvekuvhura kutengeserana kubva pamutsetse wayo uye anopindura mutengi. Kana mutengi atovhura kutengeserana natenzi wekare, ipapo mhinduro yechipiri inoregeredzwa (uye, zviri pachena, kutengeserana kwakadaro hakuzopedzi uye kunodzokororwa nemutengi).

Kuti kutengeserana kunoshanda sei

Ngatitii mutengi akatumira chikumbiro kune murongi kuti avhure kutengeserana kune chakadaro nechakadaro chine kiyi yekutanga. Murongi anokiya chinhu ichi ochiisa mutafura yekukiya mundangariro. Kana zvichidikanwa, murongi anoverenga chikamu ichi kubva mudura uye anochengeta data rinobuda muchiitiko chekutengeserana mundangariro yemurongi.

NewSQL = NoSQL+ACID

Kana mutengi achida kushandura data mukutengeserana, inotumira chikumbiro kune murongi kuti agadzirise mubatanidzwa, uye murongi anoisa iyo data nyowani mutafura yemamiriro ekutengeserana mundangariro. Izvi zvinopedzisa kurekodha - hapana kurekodha kunoitwa kunzvimbo yekuchengetedza.

NewSQL = NoSQL+ACID

Kana mutengi achikumbira yake yakashandurwa data sechikamu cheanoshanda transaction, murongi anoita sezvizvi:

  • kana iyo ID yatova mukutengeserana, ipapo data inotorwa kubva mundangariro;
  • kana iyo ID isiri muchirangaridzo, ipapo iyo inoshaikwa data inoverengwa kubva munzvimbo dzekuchengetedza, yakabatanidzwa neaya atove mundangariro, uye mhedzisiro inopiwa kune mutengi.

Nokudaro, mutengi anogona kuverenga kuchinja kwayo, asi vamwe vatengi havaoni kuchinja uku, nokuti vanochengetwa chete muchiyeuchidzo chemurongi; havasati vari muCassandra nodes.

NewSQL = NoSQL+ACID

Kana mutengi achitumira chibvumirano, iyo nyika yaive mundangariro yesevhisi inochengetwa nemurongi mubatch rakadhindwa, uye inotumirwa sebheti rakarogwa kuCassandra kuchengetedza. Zvitoro zvinoita zvese zvinodiwa kuti ive nechokwadi chekuti pasuru iyi yaiswa atomu (yakazara), uye inodzosera mhinduro kumurongi, anoburitsa makiyi uye anosimbisa budiriro yekutengeserana kumutengi.

NewSQL = NoSQL+ACID

Uye kudzosera kumashure, murongi anongoda chete kusunungura ndangariro inogarwa nemamiriro ekutengeserana.

Nekuda kwekuvandudzwa kuri pamusoro, takaita misimboti yeACID:

  • Atomicity. Ichi chivimbiso chekuti hapana kutengeserana kucharekodhwa muchidimbu muhurongwa; ingave yese mashandisirwo ayo achapedzwa, kana kuti hapana ichapedzwa. Isu tinonamatira kune iyi musimboti kuburikidza neyakagadzika batch muCassandra.
  • Kuenderana. Imwe neimwe yakabudirira kutengeserana, netsanangudzo, inorekodha chete mibairo inoshanda. Kana, mushure mekuvhura kutengeserana uye kuita chikamu chekushanda, zvakaonekwa kuti mhedzisiro haina kukodzera, rollback inoitwa.
  • Kuiswa kwemurwere kwake ega. Kana kutengeserana kuchiitwa, kutengeserana kwakafanana hakufanire kukanganisa mhedzisiro yayo. Makwikwi ekutengeserana akaiswa ega pachishandiswa pessimistic kiyi pamurongi. Zvekuverenga kunze kwekutengeserana, musimboti wekuzviparadzanisa unocherechedzwa padanho reRead Committed.
  • Sustainability. Pasinei nezvinetso pamazinga akaderera-kudzima kwehurongwa, kutadza kwehardware-shanduko dzakaitwa nekutengeserana kwakapedzwa zvakabudirira dzinofanira kuramba dzakachengetedzwa kana mashandiro atangazve.

Kuverenga nendekisi

Ngatitorei tafura iri nyore:

CREATE TABLE photos (
id bigint primary key,
owner bigint,
modified timestamp,
…)

Iyo ine ID (kiyi yekutanga), muridzi uye zuva rekugadzirisa. Iwe unofanirwa kuita chikumbiro chakareruka - sarudza data pane muridzi nezuva rekuchinja "kwezuva rekupedzisira".

SELECT *
WHERE owner=?
AND modified>?

Kuti mubvunzo wakadaro ugadziriswe nekukurumidza, mune yekare SQL DBMS iwe unofanirwa kuvaka index nemakoramu (muridzi, akagadziridzwa). Tinogona kuita izvi zviri nyore, sezvo isu tava ne ACID garandi!

Indexes muC * Imwe

Kune sosi tafura ine mafoto umo rekodhi ID ndiyo kiyi yekutanga.

NewSQL = NoSQL+ACID

Kune index, C * Imwe inogadzira tafura nyowani iri kopi yepakutanga. Kiyi yacho yakafanana neiyo index expression, uye inosanganisirawo kiyi yekutanga rekodhi kubva patafura yekutangira:

NewSQL = NoSQL+ACID

Zvino mubvunzo we "muridzi wezuva rekupedzisira" unogona kunyorwa zvakare sesarudzo kubva kune imwe tafura:

SELECT * FROM i1_test
WHERE owner=?
AND modified>?

Iko kuenderana kweiyo data mune sosi tafura mafoto uye iyo index tafura i1 inochengetwa otomatiki nemurongi. Kubva pane data schema chete, kana shanduko yakagamuchirwa, murongi anogadzira uye anochengetedza shanduko kwete chete mutafura huru, asiwo mumakopi. Hapana zviito zvekuwedzera zvinoitwa patafura ye index, matanda haaverengeki, uye hapana makiyi anoshandiswa. Ndokunge, kuwedzera ma indexes kunodya zvinenge zvisina zviwanikwa uye hazvina kana mhedzisiro pakumhanya kwekushandisa shanduko.

Tichishandisa ACID, takakwanisa kushandisa SQL-like indexes. Iwo anowirirana, anokura, anokurumidza, anogona kuumbwa, uye akavakirwa muCQL yemubvunzo mutauro. Hapana shanduko kukodhi yekushandisa inodiwa kutsigira indexes. Zvese zviri nyore sezviri muSQL. Uye zvinonyanya kukosha, indexes haikanganisi kukurumidza kwekuita kwekugadzirisa kune yekutanga tafura yekutengeserana.

Chii chaitika

Isu takagadzira C * Imwe makore matatu apfuura uye takaitanga mukushanda kwekutengesa.

Chii chatakawana pakupedzisira? Ngationgororei izvi tichishandisa muenzaniso weiyo mafoto kugadzirisa uye kuchengetedza subsystem, imwe yemhando dzakakosha dze data musocial network. Hatisi kutaura nezvemitumbi yemifananidzo pachayo, asi nezve marudzi ese e-meta-ruzivo. Iye zvino Odnoklassniki ine mabhiriyoni makumi maviri ezvinyorwa zvakadaro, iyo system inoshandisa zviuru makumi masere zvekuverenga zvikumbiro pasekondi imwe neimwe, kusvika ku20 ACID transactions pasekondi yakabatana nekugadzirisa data.

Patakashandisa SQL ine replication factor = 1 (asi muRAID 10), iyo metainformation yemufananidzo yakachengetwa paboka rinowanikwa kwazvo remichina makumi matatu nembiri inoshandisa Microsoft SQL Server (pamwe negumi nerimwe backups). 32 maseva akagoverwawo kuchengetedza ma backups. Huwandu hwemotokari dzinodhura makumi mashanu. Panguva imwecheteyo, iyo sisitimu yakashanda pane yakatarwa mutoro, isina kuchengetwa.

Mushure mekutamira kuhurongwa hutsva, takagamuchira replication factor = 3 - kopi mune imwe neimwe data data. Iyo sisitimu ine 63 Cassandra yekuchengetedza node uye 6 coordinator michina, yehuwandu hwemasevha makumi matanhatu nepfumbamwe. Asi michina iyi yakachipa zvakanyanya, mutengo wayo wese ungangoita 69% yemutengo weSQL system. Panguva imwecheteyo, mutoro unochengetwa pa30%.

Nekuunzwa kweC * Imwe, latency zvakare yakadzikira: muSQL, basa rekunyora rakatora anenge 4,5 ms. MuC * Imwe - inenge 1,6 ms. Nguva yekutengeserana iri paavhareji isingasviki makumi mana ms, kuzvipira kunopedzwa mu40 ms, nguva yekuverenga nekunyora iri paavhareji 2 ms. 2th percentile - chete 99-3 ms, nhamba yenguva yakadzikira nezana nguva - zvese nekuda kwekushandiswa kwakapararira kwekufungidzira.

Parizvino, mazhinji eSQL Server node akadzimwa; zvigadzirwa zvitsva zviri kuvandudzwa chete uchishandisa C * Imwe. Isu takagadzirisa C * Imwe kuti ishande mugore redu gore rimwe, izvo zvakaita kuti zvikwanise kukurumidza kutumira masumbu matsva, kurerutsa gadziriro uye otomatiki kushanda. Pasina iyo kodhi kodhi, kuita izvi kungave kwakaoma uye kunetsa.

Ikozvino tiri kushanda kuendesa zvimwe zvivakwa zvedu zvekuchengetera kune gore - asi iyo inyaya yakasiyana zvachose.

Source: www.habr.com

Voeg