NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Ruo n'oge na-adịbeghị anya, Odnoklassniki na-echekwa ihe dị ka 50 TB nke data emebere ozugbo na SQL Server. Maka olu dị otú ahụ, ọ fọrọ nke nta ka ọ bụrụ na ọ gaghị ekwe omume ịnye ngwa ngwa na ntụkwasị obi, yana ọbụna ohere nkwụsị nke data center site na iji SQL DBMS. N'ọnọdụ dị otú ahụ, a na-eji otu n'ime nchekwa NoSQL, ma ọ bụghị ihe niile nwere ike ibufe na NoSQL: ụfọdụ ụlọ ọrụ chọrọ nkwa azụmahịa ACID.

Nke a mere ka anyị jiri NewSQL nchekwa, ya bụ, DBMS nke na-enye ntachi obi, scalability na arụmọrụ nke usoro NoSQL, ma n'otu oge ahụ na-ejigide ACID na-ekwe nkwa nke ọma na usoro oge ochie. Enwere usoro mmepụta ihe ole na ole na-arụ ọrụ nke klas ọhụrụ a, ya mere, anyị mere usoro dị otú ahụ n'onwe anyị ma tinye ya n'ọrụ azụmahịa.

Otu esi arụ ọrụ na ihe mere - gụọ n'okpuru ịkpụ.

Taa, ndị na-ege ntị kwa ọnwa nke Odnoklassniki karịrị nde 70 ndị ọbịa pụrụ iche. Anyị Anyị nọ na ise kacha elu netwọkụ mmekọrịta kachasị n'ụwa, yana n'etiti saịtị iri abụọ nke ndị ọrụ na-etinye oge kachasị. Akụrụngwa OK na-ejikwa ibu dị oke elu: ihe karịrị otu nde HTTP arịrịọ/sk n'ihu. Akụkụ nke ihe nkesa nke ihe karịrị 8000 iberibe dị nso na ibe ha - na anọ data data Moscow, nke na-enye ohere maka netwọk netwọk nke na-erughị 1 ms n'etiti ha.

Anyị na-eji Cassandra kemgbe 2010, malite na ụdị 0.6. Taa enwere ọtụtụ ụyọkọ iri na abụọ na-arụ ọrụ. Ụyọkọ kacha ọsọ na-arụ ọrụ karịa nde anọ kwa nkeji, yana nnukwu ụlọ ahịa 4 TB.

Agbanyeghị, ndị a bụ ụyọkọ NoSQL nkịtị ejiri maka nchekwa na-adịghị ike achikota data. Anyị chọrọ dochie isi nchekwa na-agbanwe agbanwe, Microsoft SQL Server, nke ejirila kemgbe ntọala Odnoklassniki. Nchekwa ahụ nwere ihe karịrị 300 SQL Server Standard Edition igwe, nke nwere TB 50 nke data - ụlọ ọrụ azụmahịa. Agbanwere data a dịka akụkụ nke azụmahịa ACID ma chọọ elu agbanwe agbanwe.

Iji kesaa data n'ofe oghere SQL Server, anyị na-eji ma vetikal na kehoraizin nkewa (sharding). N'akụkọ ihe mere eme, anyị na-eji atụmatụ nhịahụ data dị mfe: ejikọtara ihe ọ bụla na akara ngosi - ọrụ nke ID ụlọ ọrụ. Edebere ụlọ ọrụ nwere otu akara na otu sava SQL. Emebere mmekọrịta nna ukwu-nkọwa nke mere na akara ngosi nke isi na ndekọ ụmụaka na-adakọ mgbe niile ma dị n'otu ihe nkesa. Na netwọk mmekọrịta, ihe fọrọ nke nta ka ọ bụrụ ihe ndekọ niile ka emepụtara n'aha onye ọrụ - nke pụtara na echekwara data onye ọrụ niile n'ime otu sistemụ arụmọrụ na-echekwa n'otu sava. Ya bụ, azụmahịa azụmahịa fọrọ nke nta ka ọ bụrụ mgbe niile na-etinye tebụl site na otu ihe nkesa SQL, nke mere ka o kwe omume ịhụ na data na-agbanwe agbanwe site na iji azụmahịa ACID mpaghara, na-enweghị mkpa iji. ngwa ngwa na enweghị ntụkwasị obi ekesa azụmahịa ACID.

Daalụ maka sharding na ime ka SQL dị ngwa:

  • Anyị anaghị eji mmachi igodo mba ofesi, ebe ọ bụ na mgbe ị na-ekekọrịta ID nwere ike ịdị na sava ọzọ.
  • Anyị anaghị eji usoro echekwara yana mkpalite n'ihi ibu agbakwunyere na DBMS CPU.
  • Anyị anaghị eji JOIN n'ihi ihe niile dị n'elu yana ọtụtụ agụghị ihe na diski.
  • Na-abụghị azụmahịa, anyị na-eji ọkwa kewapụ Gụọ Uncommitted iji belata mkpọchi.
  • Anyị na-eme naanị obere azụmahịa (na nkezi mkpụmkpụ karịa 100 ms).
  • Anyị anaghị eji ọtụtụ ahịrị emelitere na ihichapụ n'ihi ọnụ ọgụgụ buru ibu nke ndị kpọchiri akpọchi - anyị na-emelite naanị otu ndekọ n'otu oge.
  • Anyị na-ajụ ajụjụ naanị na ndeksi - ajụjụ nwere atụmatụ nyocha tebụl zuru ezu maka anyị pụtara ibufe nchekwa data na ime ka ọ daa.

Usoro ndị a nyere anyị ohere iwepu ihe fọrọ nke nta ka ọ bụrụ arụmọrụ kachasị na sava SQL. Otú ọ dị, nsogbu ndị ahụ bịara na-aba ụba. Ka anyị lee ha anya.

Nsogbu na SQL

  • Ebe ọ bụ na anyị na-eji sharding ede onwe ya, ịgbakwunye shards ọhụrụ bụ ndị nchịkwa ji aka mee ya. N'oge a niile, oyiri data enwere ike agbasa abụghị arịrịọ ọrụ.
  • Dị ka ọnụ ọgụgụ nke ndekọ na tebụl na-eto eto, ọsọ nke ntinye na mgbanwe na-ebelata;
  • Inwe obere Windows maka SQL Server na mmepụta na-eme ka njikwa akụrụngwa sie ike

Mana isi nsogbu bụ

nnabata mmejọ

Ihe nkesa SQL kpochapụrụ enweghị nnabata mmejọ na-adịghị mma. Ka anyị kwuo na ị nwere naanị otu sava nchekwa data, ọ na-adakwa otu ugboro n'ime afọ atọ. N'ime oge a, saịtị ahụ na-agbada maka nkeji 20, nke a na-anabata. Ọ bụrụ na ị nwere sava 64, mgbe ahụ saịtị ahụ na-agbada otu ugboro kwa izu atọ. Ma ọ bụrụ na ị nwere sava 200, mgbe ahụ saịtị ahụ anaghị arụ ọrụ kwa izu. Nke a bụ nsogbu.

Kedu ihe a ga-eme iji kwalite nnabata mmejọ nke sava SQL? Wikipedia na-akpọ anyị òkù ka anyị wuo ụyọkọ dị ukwuu: ebe ọ bụrụ na ọdịda nke ọ bụla n'ime ihe ndị ahụ nwere nkwado ndabere.

Nke a na-achọ ụgbọ mmiri nke akụrụngwa dị oke ọnụ: ọtụtụ mbiputegharị, eriri anya, nchekwa nkekọrịta, na ntinye nke nchekwa anaghị arụ ọrụ nke ọma: ihe dị ka 10% nke mgbanwe na-akwụsị na ọdịda nke oghere ndabere dị ka ụgbọ oloko n'azụ ọnụ ụzọ.

Mana nnukwu ọghọm dị n'ụyọkọ dị ukwuu dị otú a bụ enweghị ohere ma ọ bụrụ na etiti data nke ọ dị na ya ada ada. Odnoklassniki nwere ebe data anọ, anyị kwesịrị ịhụ na anyị na-arụ ọrụ ma ọ bụrụ na ọdịda zuru oke na otu n'ime ha.

Maka nke a anyị nwere ike iji Multi-Master Ntugharị arụnyere n'ime SQL Server. Ngwọta a dị oke ọnụ karịa n'ihi ọnụ ahịa ngwanrọ ma na-ata ahụhụ site na nsogbu ndị a ma ama na mmegharị - na-enweghị atụ oge azụmahịa na-egbu oge na synchronous replication na igbu oge n'itinye ntugharị (na, n'ihi ya, furu efu mgbanwe) na asynchronous replication. Nke pụtara ntuziaka esemokwu mkpebi na-eme ka nhọrọ a ghara ịdị na-emetụta anyị kpamkpam.

Nsogbu ndị a niile chọrọ ngwọta dị egwu, anyị wee malite nyochaa ha n'ụzọ zuru ezu. N'ebe a, anyị kwesịrị ịmara ihe SQL Server na-emekarị - azụmahịa.

Azụmahịa dị mfe

Ka anyị tụlee azụmahịa kachasị mfe, site na echiche nke onye mmemme SQL etinyere: na-agbakwunye foto na ọba. A na-echekwa ọba na foto na efere dị iche iche. Album ahụ nwere counter foto ọha. Mgbe ahụ, a na-ekewa azụmahịa dị otú ahụ na usoro ndị a:

  1. Anyị ji igodo kpọchie ọba ahụ.
  2. Mepụta ntinye na tebụl foto.
  3. Ọ bụrụ na foto ahụ nwere ọkwa ọhaneze, tinyezie counter foto ọha na ọba akwụkwọ ahụ, melite ndekọ ma mee azụmahịa ahụ.

Ma ọ bụ na pseudocode:

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

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

TX.commit();

Anyị na-ahụ na ọnọdụ azụmahịa azụmahịa na-emekarị bụ ịgụ data sitere na nchekwa data n'ime ebe nchekwa nke ihe nkesa ngwa, gbanwee ihe ma chekwaa ụkpụrụ ọhụrụ azụ na nchekwa data. Ọtụtụ mgbe na azụmahịa dị otú ahụ anyị na-emelite ọtụtụ ụlọ ọrụ, ọtụtụ tebụl.

Mgbe ị na-eme azụmahịa, mgbanwe n'otu oge nke otu data sitere na sistemụ ọzọ nwere ike ime. Dịka ọmụmaatụ, Antispam nwere ike kpebie na onye ọrụ na-enyo enyo n'ụzọ ụfọdụ, ya mere foto onye ọrụ niile agaghịzi adị n'ihu ọha, ha kwesịrị iziga ha maka imeru ihe n'ókè, nke pụtara na-agbanwe foto.status gaa na uru ọzọ ma gbanyụọ counters kwekọrọ. N'ụzọ doro anya, ọ bụrụ na ọrụ a emee na-enweghị nkwa nke atomity nke ngwa na iche nke mgbanwe mgbanwe, dị ka na Acid, mgbe ahụ, ihe ga-esi na ya pụta agaghị abụ ihe dị mkpa - ma ọ bụ foto foto ga-egosi uru na-ezighị ezi, ma ọ bụ na ọ bụghị foto niile ka a ga-eziga maka imeru ihe n'ókè.

Ọtụtụ koodu ndị yiri ya, na-emegharị ụlọ ọrụ azụmahịa dị iche iche n'ime otu azụmahịa, ka edere ya n'oge niile nke Odnoklassniki. Dabere na ahụmịhe nke mbugharị na NoSQL si Nkwenye n'ikpeazụ Anyị maara na nnukwu ihe ịma aka (na itinye ego oge) sitere na ịmepụta koodu iji nọgide na-enwe data. Ya mere, anyị tụlere isi ihe achọrọ maka nchekwa ọhụrụ ahụ ka ọ bụrụ ndokwa maka ezigbo azụmahịa ACID maka mgbagha ngwa.

Ihe ndị ọzọ, ọ dịchaghị mkpa, ihe achọrọ bụ:

  • Ọ bụrụ na ebe data ada ada, ma ịgụ na ide na nchekwa ọhụrụ ga-adịrịrị.
  • Na-edobe ọsọ mmepe dị ugbu a. Nke ahụ bụ, mgbe ị na-arụ ọrụ na ebe nchekwa ọhụrụ, ọnụọgụ koodu kwesịrị ịdị ka otu ihe ahụ;
  • Ọsọ nke nchekwa ọhụrụ ahụ kwesịrị ịdị elu nke ukwuu, ma mgbe ị na-agụ data na mgbe ị na-ahazi azụmahịa, nke pụtara n'ụzọ dị irè na usoro mmụta siri ike, zuru ụwa ọnụ, mana ngwa ngwa ngwa ngwa, dịka ọmụmaatụ, adịghị adabara. abụọ-phase eme.
  • Ntụle akpaaka na-efe efe.
  • Iji sava dị ọnụ ala mgbe niile, na-enweghị mkpa ịzụta ngwaike dị egwu.
  • Enwere ike ịmepụta nchekwa nchekwa site n'aka ndị mmepe ụlọ ọrụ. N'ikwu ya n'ụzọ ọzọ, e nyere ụzọ nwe ya ma ọ bụ ihe ngwọta mepere emepe, ọkachamma na Java.

Mkpebi, mkpebi

N'ịtụle azịza nwere ike ime, anyị bịara na nhọrọ abụọ enwere ike ime:

Nke mbụ bụ iwere ihe nkesa SQL ọ bụla wee mejuputa nnabata mmejọ achọrọ, usoro nchacha, ụyọkọ ọdịda, mkpebi esemokwu na kesaa, azụmahịa ACID ntụkwasị obi na ngwa ngwa. Anyị gosiri nhọrọ a dị ka ihe na-adịghị mkpa ma na-arụsi ọrụ ike.

Nhọrọ nke abụọ bụ iji nchekwa NoSQL emebere emebere ya na nhazi arụ ọrụ, ụyọkọ ọdịda, mkpebi esemokwu, wee mejuputa azụmahịa na SQL n'onwe gị. N'ileghachi anya na mbụ, ọbụna ọrụ nke imejuputa SQL, ọ bụghị ịkọ azụmahịa ACID, dị ka ọrụ ga-ewe ọtụtụ afọ. Mana anyị chọpụtara na njirimara SQL anyị na-eji eme ihe dị anya site na ANSI SQL ka Ọnụ ego nke Cassandra CQL tere aka na ANSI SQL. N'ileba anya na CQL, anyị chọpụtara na ọ dị nso na ihe anyị chọrọ.

Cassandra na CQL

Yabụ, kedu ihe na-adọrọ mmasị banyere Cassandra, kedu ike ọ nwere?

Nke mbụ, ebe a ị nwere ike ịmepụta tebụl na-akwado ụdị data dị iche iche, ị nwere ike ime SELECT ma ọ bụ kwalite na isi igodo.

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

Iji hụ na ndakọrịta data oyiri, Cassandra na-eji nso kworum. N'okwu kachasị mfe, nke a pụtara na mgbe a na-edobe ihe odide atọ nke otu ahịrị ahụ n'ọnụ ọnụ dị iche iche nke ụyọkọ ahụ, a na-ewere ihe odide ahụ na-aga nke ọma ma ọ bụrụ na ọtụtụ ọnụ (ya bụ, abụọ n'ime atọ) kwadoro ọganihu nke ọrụ ide a. . A na-atụle data ahịrị ahụ ka ọ na-agbanwe agbanwe ma ọ bụrụ na, mgbe ị na-agụ, a na-enyocha ọtụtụ ọnụ ọnụ wee kwado ha. Ya mere, site na iji nsụgharị atọ, a na-ekwe nkwa ngbanwe data zuru oke na ozugbo ma ọ bụrụ na otu ọnụ ada ada. Ụzọ a mere ka anyị mejuputa atụmatụ a pụrụ ịdabere na ya: mgbe niile na-ezigara arịrịọ atọ niile, na-echere nzaghachi site n'aka ndị abụọ kachasị ngwa ngwa. A na-atụfu nzaghachi mbubreyo nke oyiri nke atọ na nke a. Ọnụ nke na-azaghachi azụ nwere ike inwe nnukwu nsogbu - breeki, mkpofu mkpofu na JVM, nwetaghachi ebe nchekwa ozugbo na Linux kernel, ọdịda ngwaike, nkwụsị na netwọk. Agbanyeghị, nke a anaghị emetụta ọrụ ma ọ bụ data onye ahịa n'ụzọ ọ bụla.

A na-akpọ ụzọ mgbe anyị kpọtụrụ ọnụ atọ wee nweta nzaghachi site na abụọ ntule: A na-ezigara arịrịọ maka mbipụta ọzọ ọbụna tupu ọ "dapụ".

Uru ọzọ nke Cassandra bụ Batchlog, usoro na-eme ka o doo anya na a na-etinye ọtụtụ mgbanwe ị na-eme ma ọ bụ tinyeghị ya ma ọlị. Nke a na-enye anyị ohere idozi A na ACID - atomity si igbe.

Ihe kacha nso maka azụmahịa na Cassandra bụ ihe a na-akpọ "azụmahịa dị arọ". Ma ha dị anya site na "ezigbo" azụmahịa ACID: n'ezie, nke a bụ ohere ime CAS na data sitere na naanị otu ndekọ, na-eji nkwenye na-eji usoro Paxos dị arọ. Ya mere, ọsọ nke azụmahịa ndị dị otú ahụ dị ala.

Ihe na-efunahụ anyị na Cassandra

Yabụ, anyị ga-emejuputa ezigbo azụmahịa ACID na Cassandra. Iji nke anyị nwere ike mejuputa atụmatụ abụọ ndị ọzọ dị mma nke DBMS kpochapụwo ngwa ngwa: ndenye ngwa ngwa na-agbanwe agbanwe, nke ga-enye anyị ohere ịme nhọrọ data ọ bụghị naanị site na isi igodo, yana onye na-emepụta ihe na-emepụta ID nke monotonic auto-creamenting mgbe niile.

C * Otu

Ya mere a mụrụ DBMS ọhụrụ C * Otu, nwere ụdị nkesa ọnụ atọ:

  • Nchekwa – (ihe fọrọ nke nta ka ọ bụrụ) ọkọlọtọ Cassandra nke na-ahụ maka ịchekwa data na diski mpaghara. Ka ibu na olu data na-eto, ọnụ ọgụgụ ha nwere ike ịgbatị ngwa ngwa ruo iri iri na narị otu narị.
  • Ndị nhazi azụmahịa - hụ na mmezu nke azụmahịa.
  • Ndị ahịa bụ sava ngwa na-emejuputa atumatu azụmahịa ma malite azụmahịa. Enwere ike inwe puku kwuru puku ndị ahịa dị otú ahụ.

NewSQL = NoSQL+ACID

Sava nke ụdị ọ bụla bụ akụkụ nke ụyọkọ nkịtị, jiri usoro ozi Cassandra dị n'ime na-akparịta ụka na ibe ya. asịrị maka igbanwe ozi ụyọkọ. Site na Heartbeat, sava na-amụta maka ọdịda nke otu, na-edobe otu atụmatụ data - tebụl, nhazi ha na mmegharị ya; atụmatụ nkewa, ụyọkọ topology, wdg.

Ndị ahịa

NewSQL = NoSQL+ACID

Kama ndị ọkwọ ụgbọ ala ọkọlọtọ, a na-eji ọnọdụ Client Fat. Ọnụ ụzọ dị otú ahụ anaghị echekwa data, mana ọ nwere ike rụọ ọrụ dị ka onye nhazi mmezu nke arịrịọ, ya bụ, onye ahịa n'onwe ya na-eme dị ka onye nhazi nke arịrịọ ya: ọ na-ajụ ajụjụ nchekwa ma dozie esemokwu. Nke a abụghị naanị ntụkwasị obi na ngwa ngwa karịa onye ọkwọ ụgbọ ala, nke chọrọ nkwurịta okwu na onye nhazi dịpụrụ adịpụ, ma na-enye gị ohere ijikwa nnyefe nke arịrịọ. N'èzí azụmahịa mepere emepe na onye ahịa, a na-eziga arịrịọ na ebe nchekwa. Ọ bụrụ na onye ahịa ahụ emepela azụmahịa, mgbe ahụ, a na-eziga arịrịọ niile dị n'ime azụmahịa ahụ na onye nhazi azụmahịa.
NewSQL = NoSQL+ACID

C * Otu onye nhazi azụmahịa

Onye nhazi bụ ihe anyị mebere maka C * Otu site na ọkọ. Ọ bụ ya na-ahụ maka ijikwa azụmahịa, mkpọchi, na usoro nke etinyere azụmahịa.

Maka azụmahịa ọ bụla a na-arụ ọrụ, onye nhazi na-ewepụta akara ngosi timestamp: azụmahịa ọ bụla na-esote dị ukwuu karịa azụmahịa gara aga. Ebe ọ bụ na usoro nhazi esemokwu nke Cassandra dabere na akara oge (nke ndekọ abụọ na-emegiderịta onwe ha, nke nwere akara timestamp kacha ọhụrụ ka a na-ewere dị ugbu a), a ga-edozi esemokwu ahụ mgbe niile maka azụmahịa na-esote. Ya mere, anyị mejuputa elekere Lamport - ụzọ dị ọnụ ala iji dozie esemokwu na usoro nkesa.

Mkpọchi

Iji hụ na iche, anyị kpebiri iji usoro kachasị mfe - mkpọchi enweghị nchekwube dabere na isi igodo nke ndekọ ahụ. N'ikwu ya n'ụzọ ọzọ, na azụmahịa, a ga-ebu ụzọ kpọchie ndekọ, naanị gụọ, gbanwee ma chekwaa ya. Naanị mgbe ịmechara nke ọma ka enwere ike ịmeghe ndekọ ka azụmahịa na-asọmpi nwee ike iji ya.

Ịmejuputa mkpọchi dị otú ahụ dị mfe na ebe a na-ekesaghị. Na usoro ekesa, enwere nhọrọ abụọ bụ isi: ma mejuputa mkpọchi kesara na ụyọkọ, ma ọ bụ kesaa azụmahịa ka azụmahịa ndị metụtara otu ndekọ na-arụ ọrụ mgbe niile site na otu onye nhazi.

Ebe ọ bụ na n'ọnọdụ anyị, a na-ekesa data n'etiti ìgwè nke azụmahịa mpaghara na SQL, e kpebiri inye ndị ọrụ nhazi mpaghara: otu onye nhazi na-eme azụmahịa niile na tokens site na 0 ruo 9, nke abụọ - na tokens site na 10 ruo 19. were gabazie. N'ihi ya, onye ọ bụla n'ime ndị nhazi ihe atụ na-aghọ nna ukwu nke azụmahịa otu.

Mgbe ahụ enwere ike itinye mkpọchi n'ụdị banal HashMap na ebe nchekwa nke onye nhazi.

Ọdịda onye nhazi

Ebe ọ bụ na otu onye nhazi na-eje ozi naanị otu azụmahịa, ọ dị ezigbo mkpa iji ngwa ngwa chọpụta eziokwu nke ọdịda ya ka mgbalị nke abụọ iji mebie azụmahịa ahụ ga-agwụ. Iji mee nke a ngwa ngwa na ntụkwasị obi, anyị jiri usoro quorum hearbeat jikọtara nke ọma:

Ebe data ọ bụla na-akwado opekata mpe abụọ nhazi ọnụ. Oge ụfọdụ, onye nhazi ọ bụla na-ezigara ndị nhazi ndị ọzọ ozi nkụta obi ma gwa ha gbasara ọrụ ya, yana ozi nkụja obi ọ nwetara site na ndị nhazi na ụyọkọ oge ikpeazụ.

NewSQL = NoSQL+ACID

N'ịnata ozi yiri nke ahụ site n'aka ndị ọzọ dịka akụkụ nke ozi obi obi ha, onye nhazi ọ bụla na-ekpebi n'onwe ya nke ụyọkọ ọnụ na-arụ ọrụ na nke na-adịghị, nke ụkpụrụ quorum na-eduzi: ọ bụrụ na ọnụ X enwetala ozi n'aka ọtụtụ ọnụ na ụyọkọ ahụ gbasara nkịtị. nnata ozi sitere na ọnụ Y, wee , Y na-arụ ọrụ. N'aka nke ọzọ, ozugbo ihe ka n'ọnụ ọgụgụ na-akọ ozi efu site na ọnụ Y, mgbe ahụ Y ajụla. Ọ na-achọsi ike na ọ bụrụ na quorum na-agwa ọnụ X na ọ naghị enweta ozi site na ya, mgbe ahụ node X n'onwe ya ga-ewere onwe ya na ọ dara.

A na-eziga ozi obi mgbawa n'ogo dị elu, ihe dị ka ugboro 20 kwa nkeji, yana oge 50 ms. Na Java, ọ na-esiri ike ikwenye nzaghachi ngwa n'ime 50 ms n'ihi ogologo nkwụsịtụ yiri nke onye mkpofu ihe kpatara. Anyị nwere ike nweta oge nzaghachi a site na iji G1 mkpofu mkpofu, nke na-enye anyị ohere ịkọwapụta ebumnuche maka ogologo oge GC kwụsịrị. Agbanyeghị, mgbe ụfọdụ, ọ na-adịkarị obere, onye nnakọta ahụ na-akwụsịtụ karịa 50 ms, nke nwere ike ibute nchọta mmejọ ụgha. Iji gbochie nke a ime, onye nhazi anaghị ekwupụta ọdịda nke oghere dịpụrụ adịpụ mgbe ozi obi mgbawa mbụ sitere na ya na-apụ n'anya, naanị ma ọ bụrụ na ọtụtụ furu efu n'ahịrị n'otu oge ms.

Ma ozughị ngwa ngwa ịghọta ọnụ ọnụ nke kwụsịrị ịrụ ọrụ. Anyị kwesịrị ime ihe banyere nke a.

Ndokwa

The kpochapụwo atụmatụ na-agụnye, na omume nke a nna ukwu ọdịda, malite ọhụrụ ntuli aka site na iji otu n'ime ejiji eluigwe na ala algọridim. Otú ọ dị, algọridim ndị dị otú ahụ nwere nsogbu ndị a maara nke ọma na nchịkọta oge na ogologo oge nke usoro ntuli aka n'onwe ya. Anyị nwere ike zere igbu oge ndị ọzọ site na iji atụmatụ nnọchi onye nhazi na netwọk ejikọrọ zuru oke:

NewSQL = NoSQL+ACID

Ka anyị kwuo na anyị chọrọ ime azụmahịa n'ime otu 50. Ka anyị buru ụzọ kpebie atụmatụ ngbanwe, ya bụ, nke ọnụ ga-eme azụmahịa na otu 50 ma ọ bụrụ na ọdịda nke onye nhazi isi. Ebumnuche anyị bụ ịnọgide na-arụ ọrụ sistemụ ma ọ bụrụ na ọdịda etiti data dara. Ka anyị chọpụta na ebe nchekwa nke mbụ ga-abụ ọnụ site na ebe data ọzọ, ebe nchekwa nke abụọ ga-abụ ọnụ site na nke atọ. A na-ahọrọ atụmatụ a otu ugboro ma ọ dịghị agbanwe ruo mgbe topology nke ụyọkọ ahụ gbanwere, ya bụ, ruo mgbe oghere ọhụrụ na-abanye na ya (nke na-eme adịkarịghị). Usoro maka ịhọrọ nna ukwu na-arụ ọrụ ọhụrụ ma ọ bụrụ na nke ochie daa ga-adị ka ndị a: nchekwa nke mbụ ga-abụ nna ukwu na-arụ ọrụ, ma ọ bụrụ na ọ kwụsịrị ịrụ ọrụ, nchekwa nke abụọ ga-abụ onye ọrụ na-arụ ọrụ.

Atụmatụ a nwere ntụkwasị obi karịa algọridim nke ụwa, ebe ọ bụ na iji rụọ ọrụ nna ukwu ọhụrụ ọ ga-ezuru iji chọpụta ọdịda nke ochie.

Mana kedu ka ndị ahịa ga-esi ghọta onye nna ukwu na-arụ ọrụ ugbu a? Ọ gaghị ekwe omume izipu ozi na puku ndị ahịa na 50 ms. Ọnọdụ ga-ekwe omume mgbe onye ahịa na-eziga arịrịọ iji mepee azụmahịa, na-amaghị na nna ukwu a anaghịzi arụ ọrụ, arịrịọ ahụ ga-agwụkwa. Iji gbochie nke a ime, ndị ahịa speculatively na-eziga arịrịọ ka imepe azụmahịa na otu nna ukwu na ma nke ya idobere ozugbo, ma naanị onye na-arụsi ọrụ ike nna ukwu n'oge a ga-aza arịrịọ a. Onye ahịa ga-eme ka nkwurịta okwu niile na-esote n'ime azụmahịa ahụ naanị ya na nna ukwu nọ n'ọrụ.

Ndabere nna ukwu ebe natara arịrịọ maka azụmahịa na-abụghị nke ha n'ime kwụ n'ahịrị nke e bu n'afọ azụmahịa, ebe ha na-echekwara ruo oge ụfọdụ. Ọ bụrụ na nna ukwu nọ n'ọrụ anwụọ, usoro nna ukwu ọhụrụ ahụ na-arịọ ka imepe azụmahịa site na kwụ n'ahịrị ya wee zaghachi onye ahịa ya. Ọ bụrụ na onye ahịa ahụ emepelarị azụmahịa na nna ukwu ochie, mgbe ahụ, a na-eleghara nzaghachi nke abụọ anya (na, n'ụzọ doro anya, azụmahịa dị otú ahụ agaghị agwụ agwụ ma onye ahịa ga-emeghachi ya).

Ka azụmahịa ahụ si arụ ọrụ

Ka anyị kwuo na onye ahịa zigara onye nhazi arịrịọ ka ọ mepee azụmahịa maka ụlọ ọrụ dị otú ahụ na igodo isi dị otú ahụ. Onye nhazi ahụ kpochiri ihe a ma tinye ya na tebụl mkpọchi na ebe nchekwa. Ọ bụrụ na ọ dị mkpa, onye nhazi na-agụ ihe a site na nchekwa ma na-echekwa data arụpụta na ọnọdụ azụmahịa na ebe nchekwa onye nhazi.

NewSQL = NoSQL+ACID

Mgbe onye ahịa chọrọ ịgbanwe data na azụmahịa, ọ na-ezigara onye nhazi arịrịọ ka ọ gbanwee ihe ahụ, onye nhazi na-etinye data ọhụrụ na tebụl ọnọdụ azụmahịa na ebe nchekwa. Nke a na-emecha ndekọ - enweghị ndekọ ọ bụla emere na nchekwa.

NewSQL = NoSQL+ACID

Mgbe onye ahịa rịọrọ data gbanwere nke ya dị ka akụkụ nke azụmahịa na-arụ ọrụ, onye nhazi ahụ na-eme dị ka ndị a:

  • ọ bụrụ na ID ahụ adịlarị na azụmahịa ahụ, mgbe ahụ, a na-ewepụ data ahụ na ebe nchekwa;
  • ọ bụrụ na enweghị NJ na ebe nchekwa, mgbe ahụ, a na-agụ data na-efu efu site na oghere nchekwa, jikọtara ya na ndị nọbu na ebe nchekwa, a na-enye onye ahịa ya nsonazụ.

Ya mere, onye ahịa ahụ nwere ike ịgụ mgbanwe nke ya, ma ndị ahịa ndị ọzọ anaghị ahụ mgbanwe ndị a, n'ihi na a na-echekwa ha naanị na ebe nchekwa nke onye nhazi;

NewSQL = NoSQL+ACID

Mgbe onye ahịa na-ezigara nkwa, onye nhazi ahụ na-echekwa steeti ahụ dị na ebe nchekwa ọrụ na batch abanyela, ma ziga ya dị ka ihe ntinye na nchekwa Cassandra. Ụlọ ahịa na-eme ihe niile dị mkpa iji hụ na a na-etinye ngwugwu a n'ụzọ zuru ezu (n'ụzọ zuru ezu), ma weghachite nzaghachi nye onye nhazi ahụ, bụ onye na-ahapụ ihe mkpuchi ahụ ma na-akwado onye ahịa ahịa nke ọma.

NewSQL = NoSQL+ACID

Na iji laghachi azụ, onye nhazi naanị kwesịrị ịtọhapụ ebe nchekwa nke steeti azụmahịa nwere.

N'ihi nkwalite ndị a dị n'elu, anyị mejuputa ụkpụrụ ACID:

  • Atomity. Nke a bụ nkwa na ọ nweghị azụmahịa agaghị edekọ akụkụ ụfọdụ na sistemụ; Anyị na-agbaso ụkpụrụ a site na batch banye na Cassandra.
  • Nkwenye. Azụmahịa ọ bụla na-aga nke ọma, site na nkọwa, na-edekọ naanị nsonaazụ ziri ezi. Ọ bụrụ na, mgbe ịmepechara azụmahịa na ime akụkụ nke ọrụ ahụ, achọpụtara na nsonaazụ ya adịghị mma, a na-emeghachi azụ azụ.
  • Nnọpụ iche. Mgbe emechara azụmahịa, azụmahịa n'otu oge ekwesịghị imetụta nsonaazụ ya. Azụmahịa asọmpi dịpụrụ adịpụ site na iji mkpọchi enweghị nchekwube na onye nhazi. Maka ịgụ akwụkwọ na-abụghị azụmahịa, a na-ahụ ụkpụrụ nkewapụ n'ọkwa agụpụtara.
  • Nkwado. N'agbanyeghị nsogbu dị n'ọkwa dị ala - mwepu sistemu, ọdịda ngwaike-mgbanwe nke azụmahịa mezuru nke ọma ga-echekwa ya mgbe ọrụ maliteghachiri.

Na-agụ site na ndeksi

Ka anyị were tebụl dị mfe:

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

Ọ nwere NJ (isi igodo), onye nwe na ụbọchị mgbanwe. Ịkwesịrị ịrịọ arịrịọ dị mfe - họrọ data na onye nwe ya na ụbọchị mgbanwe "maka ụbọchị ikpeazụ".

SELECT *
WHERE owner=?
AND modified>?

Ka e wee hazie ajụjụ dị otú ahụ ngwa ngwa, na SQL DBMS kpochapụrụ, ịkwesịrị iji kọlụm wuo ndeksi (onye nwe, gbanwee). Anyị nwere ike ime nke a n'ụzọ dị mfe, ebe anyị nwere nkwa ACID ugbu a!

Index na C * Otu

Enwere okpokoro isi mmalite nwere foto nke ID ndekọ bụ isi igodo.

NewSQL = NoSQL+ACID

Maka ndeksi, C * Otu na-emepụta tebụl ọhụrụ bụ nnomi nke mbụ. Igodo ahụ dị ka okwu ndeksi, ọ gụnyekwara igodo isi nke ndekọ sitere na tebụl isi mmalite:

NewSQL = NoSQL+ACID

Ugbu a enwere ike idegharị ajụjụ maka “onye nwe ụbọchị ikpeazụ” dị ka nhọrọ sitere na tebụl ọzọ:

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

A na-edobe nkwekọ nke data dị na foto tebụl isi iyi na tebụl index i1 na-akpaghị aka site na onye nhazi. Dabere na atụmatụ data naanị, mgbe a natara mgbanwe, onye nhazi na-emepụta ma na-echekwa mgbanwe ọ bụghị naanị na tebụl isi, kamakwa na mbipụta. Ọ dịghị ihe ọzọ a na-eme na tebụl ndeksi, anaghị agụ akwụkwọ ndekọ, ọ dịghịkwa ihe mkpuchi. Ya bụ, ịgbakwụnye index na-eri ihe fọrọ nke nta ka ọ bụrụ ihe ọ bụla ma ọ nweghị mmetụta ọ bụla na ọsọ nke itinye mgbanwe.

Iji ACID, anyị nwere ike mejuputa SQL-dị ka index. Ha na-agbanwe agbanwe, nwere ike ịgbakọ, ngwa ngwa, enwere ike ịmekọrịta, ma wuo ya n'asụsụ ajụjụ CQL. Ọ nweghị mgbanwe na koodu ngwa a chọrọ iji kwado index. Ihe niile dị mfe dịka na SQL. Na nke kachasị mkpa, indexes adịghị emetụta ọsọ igbu nke mgbanwe na tebụl azụmahịa mbụ.

Kedu ihe mere

Anyị mepụtara C * Otu afọ atọ gara aga wee malite ya n'ọrụ azụmahịa.

Kedu ihe anyị nwetara na njedebe? Ka anyị tụlee nke a site na iji ihe atụ nke foto nhazi na nchekwa subsystem, otu n'ime ndị kasị mkpa ụdị nke data na a na-elekọta mmadụ netwọk. Anyị anaghị ekwu maka ozu nke foto n'onwe ha, kama banyere ụdị ozi meta-dị iche iche. Ugbu a Odnoklassniki nwere ihe dị ka ijeri 20 ijeri ndekọ ndị dị otú ahụ, usoro usoro 80 puku na-agụ arịrịọ kwa nkeji, ruo 8 puku ACID azụmahịa kwa nke abụọ jikọtara na data mgbanwe.

Mgbe anyị jiri SQL jiri ihe ngbanwe = 1 (mana na RAID 10), echekwara metainformation foto na ụyọkọ igwe 32 dị nke ukwuu na-agba Microsoft SQL Server (gbakwunyere nkwado ndabere 11). E kenyekwara sava 10 maka ịchekwa ndabere. Ngụkọta ụgbọ ala 50 dị oke ọnụ. N'otu oge ahụ, usoro ahụ na-arụ ọrụ na ibu nke egosipụtara, na-enweghị nchekwa.

Mgbe anyị kwagara na usoro ọhụrụ ahụ, anyị nwetara ihe ngbanwe = 3 - otu n'ime ebe data ọ bụla. Usoro ahụ nwere oghere nchekwa Cassandra 63 na igwe nhazi 6, maka ngụkọta nke sava 69. Mana igwe ndị a dị ọnụ ala karịa, ngụkọta ọnụ ahịa ha bụ ihe dịka 30% nke ọnụ ahịa sistemụ SQL. N'otu oge ahụ, a na-edobe ibu ahụ na 30%.

Site na iwebata C * Otu, latency belatara: na SQL, ọrụ ide were were ihe dịka 4,5 ms. Na C * Otu - ihe dịka 1,6 ms. Ogologo oge azụmahịa ahụ bụ ihe na-erughị 40 ms, emechara nkwa ahụ na 2 ms, oge ịgụ na ide bụ nkezi 2 ms. Pasent 99th - naanị 3-3,1 ms, ọnụ ọgụgụ nke oge agwụla agbadala ugboro 100 - niile n'ihi ntule zuru ebe niile.

Ka ọ dị ugbu a, ọtụtụ n'ime oghere SQL Server ewepụla; a na-emepụta ngwaahịa ọhụrụ naanị site na iji C * Otu. Anyị na-emegharị C * Otu ka ọ rụọ ọrụ na igwe ojii anyị otu igwe ojii, nke mere ka o kwe omume ngwa ngwa ntinye nke ụyọkọ ọhụrụ, mee ka nhazi dị mfe ma rụọ ọrụ na-akpaghị aka. Enweghị koodu isi mmalite, ime nke a ga-esikwu ike ma sie ike karị.

Ugbu a, anyị na-arụ ọrụ na ịnyefe ụlọ ọrụ nchekwa anyị ndị ọzọ na igwe ojii - mana nke ahụ bụ akụkọ dị iche kpamkpam.

isi: www.habr.com

Tinye a comment