NewSQL = NoSQL+ACID

NewSQL = NoSQL+ACID
Titi di aipẹ, Odnoklassniki ti fipamọ nipa TB 50 ti data ti a ṣe ni akoko gidi ni SQL Server. Fun iru iwọn didun bẹ, o fẹrẹ jẹ pe ko ṣee ṣe lati pese iyara ati igbẹkẹle, ati paapaa ikuna ile-iṣẹ data-iwọle ifarada nipa lilo SQL DBMS kan. Ni deede, ni iru awọn ọran, ọkan ninu awọn ibi ipamọ NoSQL ni a lo, ṣugbọn kii ṣe ohun gbogbo ni a le gbe lọ si NoSQL: diẹ ninu awọn nkan nilo awọn iṣeduro iṣowo ACID.

Eyi mu wa lọ si lilo ibi ipamọ NewSQL, iyẹn ni, DBMS ti o pese ifarada aṣiṣe, scalability ati iṣẹ ti awọn eto NoSQL, ṣugbọn ni akoko kanna mimu awọn iṣeduro ACID ti o mọmọ si awọn eto kilasika. Awọn ọna ṣiṣe ile-iṣẹ diẹ wa ti kilasi tuntun yii, nitorinaa a ṣe imuse iru eto funrararẹ ati fi sii si iṣẹ iṣowo.

Bii o ṣe n ṣiṣẹ ati ohun ti o ṣẹlẹ - ka labẹ gige.

Loni, olugbo oṣooṣu ti Odnoklassniki jẹ diẹ sii ju awọn alejo alailẹgbẹ 70 milionu. A A wa ni oke marun awọn nẹtiwọọki awujọ ti o tobi julọ ni agbaye, ati laarin awọn aaye ogun lori eyiti awọn olumulo lo akoko pupọ julọ. Awọn amayederun OK ṣe awọn ẹru ti o ga pupọ: diẹ sii ju awọn ibeere HTTP miliọnu kan / iṣẹju-aaya fun iwaju. Awọn apakan ti ọkọ oju-omi olupin ti o ju awọn ege 8000 wa ni isunmọ si ara wọn - ni awọn ile-iṣẹ data mẹrin ti Moscow, eyiti o jẹ ki o ṣee ṣe lati rii daju lairi nẹtiwọọki ti o kere ju 1 ms laarin wọn.

A ti nlo Cassandra lati ọdun 2010, bẹrẹ pẹlu ẹya 0.6. Loni ọpọlọpọ awọn iṣupọ mejila wa ni iṣẹ. Awọn ilana iṣupọ ti o yara ju diẹ sii ju awọn iṣẹ miliọnu 4 fun iṣẹju kan, ati awọn ile itaja ti o tobi julọ 260 TB.

Sibẹsibẹ, iwọnyi jẹ gbogbo awọn iṣupọ NoSQL lasan ti a lo fun ibi ipamọ ailera ipoidojuko data. A fẹ lati rọpo ibi ipamọ deede akọkọ, Microsoft SQL Server, eyiti o ti lo lati ipilẹṣẹ Odnoklassniki. Ibi ipamọ naa ni diẹ ẹ sii ju 300 SQL Server Standard Edition awọn ẹrọ, eyiti o ni 50 TB ti data - awọn ile-iṣẹ iṣowo. Yi data ti wa ni títúnṣe bi ara ti ACID lẹkọ ati ki o nbeere ga aitasera.

Lati kaakiri data kọja awọn apa SQL Server, a lo mejeeji inaro ati petele ipinpin (sharding). Itan-akọọlẹ, a lo ero pinpin data ti o rọrun: nkan kọọkan ni nkan ṣe pẹlu ami-ami - iṣẹ kan ti ID nkan. Awọn ile-iṣẹ pẹlu aami kanna ni a gbe sori olupin SQL kanna. A ṣe imuse ibatan-apejuwe titunto si ki awọn ami ti akọkọ ati awọn igbasilẹ ọmọde nigbagbogbo baamu ati pe o wa lori olupin kanna. Ninu nẹtiwọọki awujọ, o fẹrẹ jẹ pe gbogbo awọn igbasilẹ ti wa ni ipilẹṣẹ fun olumulo - eyiti o tumọ si pe gbogbo data olumulo laarin eto iṣẹ-ṣiṣe kan ti wa ni ipamọ sori olupin kan. Iyẹn ni, iṣowo iṣowo kan fẹrẹẹ jẹ awọn tabili nigbagbogbo lati ọdọ olupin SQL kan, eyiti o jẹ ki o ṣee ṣe lati rii daju iduroṣinṣin data nipa lilo awọn iṣowo ACID agbegbe, laisi iwulo lati lo. o lọra ati ki o unreliable pin ACID lẹkọ.

Ṣeun si sharding ati lati yara SQL:

  • A ko lo awọn ihamọ bọtini Ajeji, nitori nigbati o ba pin ID nkan le wa lori olupin miiran.
  • A ko lo awọn ilana ti o fipamọ ati awọn okunfa nitori ẹru afikun lori Sipiyu DBMS.
  • A ko lo awọn JOIN nitori gbogbo awọn ti o wa loke ati ọpọlọpọ awọn kika laileto lati disk.
  • Ni ita idunadura kan, a lo ipele ipinya ti a ko ni ifaramọ lati dinku awọn titiipa.
  • A ṣe awọn iṣowo kukuru nikan (ni apapọ kuru ju 100 ms).
  • A ko lo imudojuiwọn ila-ọpọ ati PA nitori nọmba nla ti awọn titiipa - a ṣe imudojuiwọn igbasilẹ kan nikan ni akoko kan.
  • Nigbagbogbo a ṣe awọn ibeere nikan lori awọn atọka - ibeere kan pẹlu ero ibojuwo tabili ni kikun fun wa tumọ si ikojọpọ data data pupọ ati fa ki o kuna.

Awọn igbesẹ wọnyi gba wa laaye lati fa iṣẹ ṣiṣe ti o pọ julọ kuro ninu olupin SQL. Sibẹsibẹ, awọn iṣoro naa di pupọ ati siwaju sii. Jẹ ki a wo wọn.

Awọn iṣoro pẹlu SQL

  • Niwọn igba ti a ti lo sharding ti ara ẹni, fifi awọn shards tuntun kun ni a ṣe pẹlu ọwọ nipasẹ awọn alabojuto. Ni gbogbo akoko yii, awọn ẹda data ti iwọn kii ṣe awọn ibeere iṣẹ.
  • Bi nọmba awọn igbasilẹ ti o wa ninu tabili ti n dagba sii, iyara ti titẹ sii ati iyipada dinku;
  • Nini iye kekere ti Windows fun SQL Server ni iṣelọpọ jẹ ki iṣakoso amayederun nira

Ṣugbọn iṣoro akọkọ ni

ifarada ẹbi

Olupin SQL Ayebaye ko ni ifarada ẹbi ti ko dara. Jẹ ki a sọ pe o ni olupin data kan ṣoṣo, ati pe o kuna lẹẹkan ni gbogbo ọdun mẹta. Lakoko yii aaye naa wa ni isalẹ fun awọn iṣẹju 20, eyiti o jẹ itẹwọgba. Ti o ba ni awọn olupin 64, lẹhinna aaye naa wa ni isalẹ lẹẹkan ni gbogbo ọsẹ mẹta. Ati pe ti o ba ni awọn olupin 200, lẹhinna aaye naa ko ṣiṣẹ ni gbogbo ọsẹ. Eleyi jẹ isoro.

Kini o le ṣe lati mu ifarada aṣiṣe ti olupin SQL dara si? Wikipedia pe wa lati kọ gíga wa iṣupọ: nibiti o ba jẹ pe ikuna eyikeyi ninu awọn paati ti o wa ni afẹyinti.

Eyi nilo ọkọ oju-omi kekere ti ohun elo gbowolori: ọpọlọpọ awọn ẹda-iwe, okun opiti, ibi ipamọ pinpin, ati ifisi ti ipamọ ko ṣiṣẹ ni igbẹkẹle: nipa 10% ti awọn iyipada pari pẹlu ikuna ti ipade afẹyinti bi ọkọ oju-irin lẹhin ipade akọkọ.

Ṣugbọn aila-nfani akọkọ ti iru iṣupọ ti o wa ga julọ ni wiwa odo ti ile-iṣẹ data ti o wa ninu rẹ kuna. Odnoklassniki ni awọn ile-iṣẹ data mẹrin, ati pe a nilo lati rii daju iṣẹ ni iṣẹlẹ ti ikuna pipe ninu ọkan ninu wọn.

Fun eyi a le lo Olona-Titunto ẹda ti a ṣe sinu SQL Server. Ojutu yii jẹ gbowolori diẹ sii nitori idiyele sọfitiwia ati jiya lati awọn iṣoro ti a mọ daradara pẹlu isọdọtun - awọn idaduro idunadura airotẹlẹ pẹlu isọdọtun amuṣiṣẹpọ ati awọn idaduro ni lilo awọn atunṣe (ati, bi abajade, awọn iyipada ti o padanu) pẹlu ẹda asynchronous. Awọn mimọ Afowoyi rogbodiyan ipinnu mu ki aṣayan yi ko wulo fun wa patapata.

Gbogbo awọn iṣoro wọnyi nilo ojutu ti ipilẹṣẹ, ati pe a bẹrẹ lati ṣe itupalẹ wọn ni awọn alaye. Nibi a nilo lati mọ ohun ti SQL Server ṣe pataki - awọn iṣowo.

Iṣowo ti o rọrun

Jẹ ki a ro idunadura ti o rọrun julọ, lati oju wiwo ti oluṣeto SQL ti a lo: fifi fọto kun si awo-orin kan. Awọn awo-orin ati awọn aworan ti wa ni ipamọ ni oriṣiriṣi awọn awopọ. Awọn album ni o ni a àkọsílẹ Fọto counter. Lẹhinna iru iṣowo bẹ pin si awọn igbesẹ wọnyi:

  1. A tii awo-orin naa nipasẹ bọtini.
  2. Ṣẹda titẹ sii ninu tabili fọto.
  3. Ti fọto ba ni ipo ti gbogbo eniyan, lẹhinna ṣafikun counter fọto ti gbogbo eniyan si awo-orin naa, ṣe imudojuiwọn igbasilẹ naa ki o ṣe idunadura naa.

Tabi ni pseudocode:

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

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

TX.commit();

A rii pe oju iṣẹlẹ iṣowo iṣowo ti o wọpọ julọ ni lati ka data lati ibi ipamọ data sinu iranti olupin ohun elo, yi nkan pada ki o fipamọ awọn iye tuntun pada si ibi ipamọ data. Nigbagbogbo ni iru iṣowo bẹẹ a ṣe imudojuiwọn ọpọlọpọ awọn nkan, awọn tabili pupọ.

Nigbati o ba n ṣiṣẹ idunadura kan, iyipada nigbakanna ti data kanna lati eto miiran le waye. Fun apẹẹrẹ, Antispam le pinnu pe olumulo naa ni ifura bakan ati nitori naa gbogbo awọn fọto olumulo ko yẹ ki o jẹ gbangba mọ, wọn nilo lati firanṣẹ fun iwọntunwọnsi, eyiti o tumọ si yiyipada ipo fọto si iye miiran ati pipa awọn iṣiro to baamu. O han ni, ti iṣẹ yii ba waye laisi awọn iṣeduro ti atomity ti ohun elo ati ipinya ti awọn iyipada idije, bi ninu ACID, lẹhinna abajade kii yoo jẹ ohun ti o nilo - boya kọnputa fọto yoo ṣafihan iye ti ko tọ, tabi kii ṣe gbogbo awọn fọto ni yoo firanṣẹ fun iwọntunwọnsi.

Pupọ koodu ti o jọra, ṣiṣakoso ọpọlọpọ awọn ile-iṣẹ iṣowo laarin idunadura kan, ni a ti kọ jakejado gbogbo aye ti Odnoklassniki. Da lori iriri awọn ijira si NoSQL lati Iduroṣinṣin ti o kẹhin A mọ pe ipenija nla julọ (ati idoko-owo akoko) wa lati idagbasoke koodu lati ṣetọju aitasera data. Nitorinaa, a ṣe akiyesi ibeere akọkọ fun ibi ipamọ tuntun lati jẹ ipese fun awọn iṣowo ACID gidi fun ọgbọn ohun elo.

Omiiran, ko ṣe pataki, awọn ibeere ni:

  • Ti ile-iṣẹ data ba kuna, mejeeji kika ati kikọ si ibi ipamọ titun gbọdọ wa.
  • Mimu iyara idagbasoke lọwọlọwọ. Iyẹn ni, nigbati o ba n ṣiṣẹ pẹlu ibi ipamọ tuntun, iye koodu yẹ ki o jẹ isunmọ kanna;
  • Iyara ti ibi ipamọ tuntun gbọdọ jẹ giga pupọ, mejeeji nigba kika data ati nigba ṣiṣe awọn iṣowo, eyiti o tumọ si ni imunadoko pe lile ti ẹkọ, gbogbo agbaye, ṣugbọn awọn solusan lọra, gẹgẹbi, fun apẹẹrẹ, ko wulo. meji-alakoso ṣẹ.
  • Aifọwọyi lori-ni-fly igbelosoke.
  • Lilo awọn olupin olowo poku deede, laisi iwulo lati ra ohun elo nla.
  • O ṣeeṣe ti idagbasoke ibi ipamọ nipasẹ awọn olupilẹṣẹ ile-iṣẹ. Ni awọn ọrọ miiran, ni pataki ni a fun si ohun-ini tabi awọn solusan orisun ṣiṣi, ni pataki ni Java.

Awọn ipinnu, awọn ipinnu

Ṣiṣayẹwo awọn solusan ti o ṣeeṣe, a wa si awọn yiyan faaji meji ti o ṣeeṣe:

Ohun akọkọ ni lati mu eyikeyi olupin SQL ki o ṣe imuṣe ifarada aṣiṣe ti a beere, ẹrọ igbelewọn, iṣupọ ikuna, ipinnu rogbodiyan ati pinpin, igbẹkẹle ati awọn iṣowo ACID iyara. A ṣe iwọn aṣayan yii bi kii ṣe bintin pupọ ati aladanla.

Aṣayan keji ni lati mu ibi ipamọ NoSQL ti o ti ṣetan pẹlu iwọn imuse, iṣupọ ikuna, ipinnu rogbodiyan, ati imuse awọn iṣowo ati SQL funrararẹ. Ni wiwo akọkọ, paapaa iṣẹ-ṣiṣe ti imuse SQL, kii ṣe darukọ awọn iṣowo ACID, dabi iṣẹ-ṣiṣe ti yoo gba awọn ọdun. Ṣugbọn lẹhinna a rii pe eto ẹya SQL ti a lo ni iṣe ti jinna si ANSI SQL bii Cassandra CQL jina lati ANSI SQL. Ti o ba wo CQL paapaa diẹ sii, a rii pe o sunmọ ohun ti a nilo.

Cassandra ati CQL

Nitorinaa, kini iwunilori nipa Cassandra, awọn agbara wo ni o ni?

Ni akọkọ, nibi o le ṣẹda awọn tabili ti o ṣe atilẹyin awọn oriṣi data o le ṣe Yan tabi imudojuiwọn lori bọtini akọkọ.

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

Lati rii daju aitasera data ajọra, Cassandra nlo ona iyege. Ninu ọran ti o rọrun julọ, eyi tumọ si pe nigbati awọn ẹda mẹta ti ila kanna ba gbe sori awọn apa oriṣiriṣi ti iṣupọ, kikọ ni a gba pe o ṣaṣeyọri ti ọpọlọpọ awọn apa (iyẹn ni, meji ninu mẹta) jẹrisi aṣeyọri ti iṣẹ kikọ yii. . Awọn data kana ni a ka ni ibamu ti, nigba kika, pupọ julọ awọn apa ni a didi ati fi idi wọn mulẹ. Nitorinaa, pẹlu awọn ẹda mẹta, pipe ati aitasera data lẹsẹkẹsẹ jẹ iṣeduro ti ipade kan ba kuna. Ọna yii gba wa laaye lati ṣe imuse ero igbẹkẹle diẹ sii: nigbagbogbo firanṣẹ awọn ibeere si gbogbo awọn ẹda mẹta, nduro fun esi lati ọdọ awọn iyara meji. Idahun pẹ ti ẹda kẹta jẹ asonu ninu ọran yii. Ipade ti o pẹ ni idahun le ni awọn iṣoro to ṣe pataki - awọn idaduro, ikojọpọ idọti ni JVM, atunṣe iranti taara ni ekuro Linux, ikuna ohun elo, gige asopọ lati nẹtiwọọki. Sibẹsibẹ, eyi ko ni ipa lori awọn iṣẹ alabara tabi data ni eyikeyi ọna.

Ọna ti a ba kan si awọn apa mẹta ati gba esi lati meji ni a pe akiyesi: ibeere fun awọn ẹda afikun ni a firanṣẹ paapaa ṣaaju ki o “ṣubu ni pipa”.

Anfaani miiran ti Cassandra ni Batchlog, ẹrọ ti o ni idaniloju pe ipele ti awọn ayipada ti o ṣe jẹ boya lilo ni kikun tabi ko lo rara. Eyi n gba wa laaye lati yanju A ni ACID - atomity jade kuro ninu apoti.

Ohun ti o sunmọ julọ si awọn iṣowo ni Cassandra jẹ eyiti a pe ni “lightweight lẹkọ". Ṣugbọn wọn jina si awọn iṣowo ACID "gidi": ni otitọ, eyi jẹ anfani lati ṣe CAS lori data lati igbasilẹ kan nikan, ni lilo isokan nipa lilo ilana Paxos iwuwo iwuwo. Nitorina, iyara ti iru awọn iṣowo jẹ kekere.

Ohun ti a nsọnu ni Cassandra

Nitorinaa, a ni lati ṣe awọn iṣowo ACID gidi ni Cassandra. Lilo eyiti a le ni irọrun ṣe awọn ẹya irọrun meji miiran ti DBMS Ayebaye: awọn atọka iyara deede, eyiti yoo gba wa laaye lati ṣe awọn yiyan data kii ṣe nipasẹ bọtini akọkọ nikan, ati olupilẹṣẹ deede ti awọn ID imudara adaṣe monotonic.

C * Ọkan

Bayi ni a bi DBMS tuntun kan C * Ọkan, ti o ni awọn oriṣi mẹta ti awọn apa olupin:

  • Ibi ipamọ – (fere) awọn olupin Cassandra boṣewa ti o ni iduro fun titoju data lori awọn disiki agbegbe. Bi ẹru ati iwọn didun data ṣe n dagba, iye wọn le ni irọrun ni iwọn si awọn mewa ati awọn ọgọọgọrun.
  • Awọn alakoso iṣowo - ṣe idaniloju ipaniyan ti awọn iṣowo.
  • Awọn alabara jẹ awọn olupin ohun elo ti o ṣe awọn iṣẹ iṣowo ati pilẹṣẹ awọn iṣowo. Ẹgbẹẹgbẹrun iru awọn alabara bẹẹ le wa.

NewSQL = NoSQL+ACID

Awọn olupin ti gbogbo awọn oriṣi jẹ apakan ti iṣupọ ti o wọpọ, lo ilana ifiranṣẹ Cassandra ti inu lati ṣe ibasọrọ pẹlu ara wọn ati olofofo fun paarọ awọn alaye iṣupọ. Pẹlu Heartbeat, awọn olupin kọ ẹkọ nipa awọn ikuna ifọwọsowọpọ, ṣetọju eto data kan - awọn tabili, eto wọn ati ẹda; Eto ipin, iṣupọ topology, ati bẹbẹ lọ.

Awọn onibara

NewSQL = NoSQL+ACID

Dipo awọn awakọ boṣewa, Ipo Onibara Ọra ti lo. Iru ipade bẹ ko tọju data, ṣugbọn o le ṣe bi oluṣeto fun ipaniyan ibeere, iyẹn ni, Onibara funrararẹ n ṣe bi oluṣeto awọn ibeere rẹ: o beere awọn ẹda ibi ipamọ ati yanju awọn ija. Eyi kii ṣe igbẹkẹle diẹ sii ati yiyara ju awakọ boṣewa lọ, eyiti o nilo ibaraẹnisọrọ pẹlu olutọju isakoṣo latọna jijin, ṣugbọn tun gba ọ laaye lati ṣakoso gbigbe awọn ibeere. Ni ita iṣowo ti o ṣii lori alabara, awọn ibeere ni a firanṣẹ si awọn ibi ipamọ. Ti alabara ba ti ṣii idunadura kan, lẹhinna gbogbo awọn ibeere laarin idunadura naa ni a firanṣẹ si olutọju iṣowo naa.
NewSQL = NoSQL+ACID

C * Ọkan Idunadura Alakoso

Alakoso jẹ ohun ti a muse fun C * Ọkan lati ibere. O jẹ iduro fun iṣakoso awọn iṣowo, awọn titiipa, ati aṣẹ ninu eyiti awọn iṣowo ti lo.

Fun idunadura iṣẹ kọọkan, oluṣeto n ṣe agbejade timestamp kan: idunadura kọọkan ti o tẹle jẹ tobi ju idunadura iṣaaju lọ. Niwọn igba ti eto ipinnu rogbodiyan Cassandra ti da lori awọn iwe akoko (ti awọn igbasilẹ ikọlura meji, ọkan ti o ni timestamp tuntun ni a ka lọwọlọwọ), ija naa yoo yanju nigbagbogbo ni ojurere ti idunadura atẹle. Bayi ni a muse Lamport aago - ọna olowo poku lati yanju awọn ija ni eto pinpin.

Awọn titiipa

Lati rii daju ipinya, a pinnu lati lo ọna ti o rọrun julọ - awọn titiipa ireti ti o da lori bọtini akọkọ ti igbasilẹ naa. Ni awọn ọrọ miiran, ni idunadura kan, igbasilẹ gbọdọ kọkọ wa ni titiipa, nikan lẹhinna ka, tunṣe, ati fipamọ. Nikan lẹhin igbimọ aṣeyọri le ṣe igbasilẹ igbasilẹ kan ki awọn iṣowo idije le lo.

Ṣiṣe iru titiipa bẹ rọrun ni agbegbe ti kii pin kaakiri. Ninu eto ti a pin kaakiri, awọn aṣayan akọkọ meji wa: boya ṣe imuse titiipa pinpin lori iṣupọ, tabi pinpin awọn iṣowo ki awọn iṣowo ti o kan igbasilẹ kanna jẹ iṣẹ nigbagbogbo nipasẹ olutọju kanna.

Niwọn bi o ti jẹ pe ninu ọran wa data ti pin tẹlẹ laarin awọn ẹgbẹ ti awọn iṣowo agbegbe ni SQL, o pinnu lati fi awọn ẹgbẹ iṣowo agbegbe si awọn alakoso: olutọju kan ṣe gbogbo awọn iṣowo pẹlu awọn ami-ami lati 0 si 9, keji - pẹlu awọn ami-ami lati 10 si 19. ati bẹbẹ lọ. Bi abajade, ọkọọkan awọn iṣẹlẹ alakoso di oluwa ti ẹgbẹ idunadura naa.

Lẹhinna awọn titiipa le ṣe imuse ni irisi HashMap banal ni iranti oluṣakoso.

Awọn ikuna Alakoso

Niwọn igba ti olutọju kan ti n ṣiṣẹ ni iyasọtọ ti ẹgbẹ kan ti awọn iṣowo, o ṣe pataki pupọ lati yara pinnu otitọ ikuna rẹ ki igbiyanju keji lati ṣiṣẹ idunadura naa yoo pẹ. Lati jẹ ki o yara ati igbẹkẹle yii, a lo ilana ilana igbọkanle ti iye-iye ti o ni asopọ ni kikun:

Ile-iṣẹ data kọọkan n gbalejo o kere ju awọn apa alakoso meji. Lẹẹkọọkan, oluṣeto kọọkan nfi ifiranṣẹ ikọlu ọkan ranṣẹ si awọn oluṣeto miiran ati sọfun wọn nipa iṣẹ ṣiṣe rẹ, bakanna bi iru awọn ifiranṣẹ ikọlu ọkan ti o gba lati ọdọ awọn alabojuto ninu iṣupọ ni akoko to kẹhin.

NewSQL = NoSQL+ACID

Gbigba alaye ti o jọra lati ọdọ awọn miiran gẹgẹbi apakan ti awọn ifiranṣẹ lilu ọkan wọn, olutọju kọọkan pinnu fun ara rẹ iru awọn apa iṣupọ n ṣiṣẹ ati eyiti kii ṣe, ni itọsọna nipasẹ ilana opo: ti node X ba ti gba alaye lati ọpọlọpọ awọn apa inu iṣupọ nipa deede gbigba awọn ifiranṣẹ lati oju ipade Y, lẹhinna , Y ṣiṣẹ. Ati ni idakeji, ni kete ti ọpọlọpọ awọn ijabọ ti o padanu awọn ifiranṣẹ lati oju ipade Y, lẹhinna Y ti kọ. O jẹ iyanilenu pe ti iyewo ba sọ fun ipade X pe ko gba awọn ifiranṣẹ lati ọdọ rẹ mọ, lẹhinna node X funrararẹ yoo ro ararẹ pe o kuna.

Awọn ifiranṣẹ lilu ọkan ni a firanṣẹ pẹlu igbohunsafẹfẹ giga, bii awọn akoko 20 fun iṣẹju kan, pẹlu akoko 50 ms. Ni Java, o ṣoro lati ṣe iṣeduro esi ohun elo laarin 50 ms nitori ipari afiwera ti awọn idaduro ti o ṣẹlẹ nipasẹ olugba idoti. A ni anfani lati ṣaṣeyọri akoko idahun yii nipa lilo agbo-idọti G1, eyiti o fun wa laaye lati ṣalaye ibi-afẹde kan fun iye akoko awọn idaduro GC. Bibẹẹkọ, nigbakan, o ṣọwọn pupọ, olugba da duro kọja 50 ms, eyiti o le ja si wiwa aṣiṣe eke. Lati yago fun eyi lati ṣẹlẹ, oluṣakoso ko ṣe ijabọ ikuna ti ipade jijin nigbati ifiranṣẹ ikọlu ọkan akọkọ lati ọdọ rẹ ba sọnu, nikan ti ọpọlọpọ ba ti sọnu ni ọna kan ms.

Ṣugbọn ko to lati ni oye ni kiakia iru ipade ti duro iṣẹ. A nilo lati ṣe nkankan nipa eyi.

Ifiṣura

Eto Ayebaye jẹ, ni iṣẹlẹ ti ikuna titunto si, bẹrẹ idibo tuntun ni lilo ọkan ninu asiko gbogbo agbaye algoridimu. Sibẹsibẹ, iru awọn algoridimu bẹ ni awọn iṣoro ti o mọye daradara pẹlu sisọpọ akoko ati ipari ti ilana idibo funrararẹ. A ni anfani lati yago fun iru awọn idaduro afikun ni lilo ero rirọpo oluṣeto ni nẹtiwọọki ti a ti sopọ ni kikun:

NewSQL = NoSQL+ACID

Jẹ ki a sọ pe a fẹ lati ṣe iṣowo kan ni ẹgbẹ 50. Jẹ ki a pinnu ni ilosiwaju ti eto iyipada, eyini ni, awọn apa wo yoo ṣe awọn iṣowo ni ẹgbẹ 50 ni iṣẹlẹ ti ikuna ti olutọju akọkọ. Ibi-afẹde wa ni lati ṣetọju iṣẹ ṣiṣe eto ni iṣẹlẹ ti ikuna aarin data. Jẹ ki a pinnu pe ifiṣura akọkọ yoo jẹ oju ipade lati ile-iṣẹ data miiran, ati ibi ipamọ keji yoo jẹ ipade lati ẹgbẹ kẹta. A yan ero yii ni ẹẹkan ati pe ko yipada titi ti topology ti iṣupọ yoo yipada, iyẹn ni, titi awọn apa tuntun yoo fi wọ inu rẹ (eyiti o ṣẹlẹ ni ṣọwọn pupọ). Ilana fun yiyan oluwa ti nṣiṣe lọwọ titun ti atijọ ba kuna yoo ma jẹ bi atẹle: ifipamọ akọkọ yoo di oga ti nṣiṣe lọwọ, ati pe ti o ba ti dẹkun iṣẹ, ifipamọ keji yoo di oga ti nṣiṣe lọwọ.

Eto yii jẹ igbẹkẹle diẹ sii ju algorithm agbaye lọ, nitori lati mu oluwa tuntun ṣiṣẹ o to lati pinnu ikuna ti atijọ.

Ṣugbọn bawo ni awọn alabara yoo ṣe loye iru oluwa ti n ṣiṣẹ ni bayi? Ko ṣee ṣe lati fi alaye ranṣẹ si ẹgbẹẹgbẹrun awọn alabara ni 50 ms. Ipo kan ṣee ṣe nigbati alabara ba firanṣẹ ibeere kan lati ṣii idunadura kan, lai mọ pe oluwa yii ko ṣiṣẹ mọ, ati pe ibeere naa yoo pari. Lati ṣe idiwọ eyi lati ṣẹlẹ, awọn alabara ni akiyesi firanṣẹ ibeere kan lati ṣii idunadura kan si oluwa ẹgbẹ ati awọn ẹtọ mejeeji ni ẹẹkan, ṣugbọn ẹni ti o jẹ oluwa ti nṣiṣe lọwọ ni akoko yoo dahun si ibeere yii. Onibara yoo ṣe gbogbo ibaraẹnisọrọ atẹle laarin idunadura nikan pẹlu oluwa ti nṣiṣe lọwọ.

Awọn oluwa afẹyinti gbe awọn ibeere fun awọn iṣowo ti kii ṣe tiwọn sinu isinyi ti awọn iṣowo ti a ko bi, nibiti wọn ti wa ni ipamọ fun igba diẹ. Ti oluwa ti nṣiṣe lọwọ ba ku, awọn ilana ilana titun titun beere lati ṣii awọn iṣowo lati isinyi rẹ ati dahun si alabara. Ti alabara ba ti ṣii idunadura kan pẹlu oluwa atijọ, lẹhinna a kọju esi keji (ati, o han gedegbe, iru idunadura kan kii yoo pari ati pe alabara yoo tun ṣe).

Bawo ni idunadura n ṣiṣẹ

Jẹ ki a sọ pe alabara kan firanṣẹ ibeere kan si olutọju lati ṣii idunadura kan fun iru ati iru nkan kan pẹlu iru ati iru bọtini akọkọ kan. Alakoso tilekun nkan yii ati gbe e sinu tabili titiipa ni iranti. Ti o ba jẹ dandan, oluṣakoso naa ka nkan yii lati ibi ipamọ ati tọju data abajade ni ipo iṣowo ni iranti oluṣeto.

NewSQL = NoSQL+ACID

Nigba ti alabara kan ba fẹ yi data pada ni idunadura kan, o fi ibeere ranṣẹ si oluṣakoso lati yipada nkan naa, ati pe oluṣeto gbe data tuntun sinu tabili ipo idunadura ni iranti. Eyi pari gbigbasilẹ - ko ṣe igbasilẹ si ibi ipamọ.

NewSQL = NoSQL+ACID

Nigbati alabara kan ba beere fun data iyipada tirẹ gẹgẹbi apakan ti iṣowo ti nṣiṣe lọwọ, oluṣeto n ṣe bii atẹle:

  • ti ID naa ba wa tẹlẹ ninu idunadura naa, lẹhinna a gba data lati iranti;
  • ti ko ba si ID ni iranti, lẹhinna data ti o padanu ni a ka lati awọn apa ibi ipamọ, ni idapo pẹlu awọn ti o wa ni iranti tẹlẹ, ati pe abajade ni a fun alabara.

Nitorinaa, alabara le ka awọn ayipada tirẹ, ṣugbọn awọn alabara miiran ko rii awọn ayipada wọnyi, nitori wọn wa ni ipamọ nikan ni iranti ti oluṣakoso;

NewSQL = NoSQL+ACID

Nigbati alabara ba firanṣẹ adehun, ipo ti o wa ninu iranti iṣẹ naa ni fipamọ nipasẹ oluṣakoso ni ipele ti o wọle, ati pe o firanṣẹ bi ipele ti o wọle si ibi ipamọ Cassandra. Awọn ile itaja ṣe ohun gbogbo ti o ṣe pataki lati rii daju pe package yii jẹ atomically (patapata) ti a lo, ati da esi pada si olutọju, ti o tu awọn titiipa silẹ ati jẹrisi aṣeyọri ti idunadura naa si alabara.

NewSQL = NoSQL+ACID

Ati lati yi pada, oluṣeto nikan nilo lati ṣe iranti iranti ti o gba laaye nipasẹ ipo idunadura naa.

Bi abajade awọn ilọsiwaju ti o wa loke, a ṣe imuse awọn ipilẹ ACID:

  • Atomiki. Eyi jẹ iṣeduro pe ko si idunadura kan ti yoo gba silẹ ni apakan ninu eto; A faramọ ilana yii nipasẹ ipele ti o wọle ni Cassandra.
  • Iduroṣinṣin. Iṣowo aṣeyọri kọọkan, nipasẹ asọye, ṣe igbasilẹ awọn abajade to wulo nikan. Ti, lẹhin ṣiṣi idunadura kan ati ṣiṣe apakan ti awọn iṣẹ ṣiṣe, o ṣe awari pe abajade ko wulo, a ti ṣe yiyi pada.
  • Ìyàraẹniṣọ́tọ̀. Nigbati idunadura kan ba ṣiṣẹ, awọn iṣowo nigbakan ko yẹ ki o ni ipa lori abajade rẹ. Awọn iṣowo idije ti ya sọtọ nipa lilo awọn titiipa aipe lori oluṣeto. Fun awọn kika ni ita idunadura kan, ipilẹ ipinya ni a ṣe akiyesi ni ipele Kawewe.
  • Iduroṣinṣin. Laibikita awọn iṣoro ni awọn ipele kekere — didaku eto, ikuna ohun elo — awọn iyipada ti o ṣe nipasẹ iṣowo ti o pari ni aṣeyọri yẹ ki o wa ni ipamọ nigbati awọn iṣẹ bẹrẹ.

Kika nipasẹ awọn atọka

Jẹ ki a mu tabili ti o rọrun:

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

O ni ID (bọtini akọkọ), oniwun ati ọjọ iyipada. O nilo lati ṣe ibeere ti o rọrun pupọ - yan data lori oniwun pẹlu ọjọ iyipada “fun ọjọ ikẹhin”.

SELECT *
WHERE owner=?
AND modified>?

Ni ibere fun iru ibeere bẹ lati ni ilọsiwaju ni kiakia, ni SQL DBMS Ayebaye o nilo lati kọ atọka nipasẹ awọn ọwọn (olunini, títúnṣe). A le ṣe eyi ni irọrun, nitori a ni awọn iṣeduro ACID bayi!

Awọn atọka ni C * Ọkan

Tabili orisun kan wa pẹlu awọn fọto ninu eyiti ID igbasilẹ jẹ bọtini akọkọ.

NewSQL = NoSQL+ACID

Fun atọka, C * Ọkan ṣẹda tabili tuntun ti o jẹ ẹda atilẹba. Bọtini naa jẹ kanna bi ikosile atọka, ati pe o tun pẹlu bọtini akọkọ ti igbasilẹ lati tabili orisun:

NewSQL = NoSQL+ACID

Bayi ibeere fun “onini fun ọjọ ikẹhin” ni a le tun kọ bi yiyan lati tabili miiran:

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

Iduroṣinṣin ti data ninu awọn fọto tabili orisun ati tabili atọka i1 ti wa ni itọju laifọwọyi nipasẹ olutọju. Da lori ero data nikan, nigbati iyipada ba gba, oluṣeto n ṣe ipilẹṣẹ ati tọju iyipada kii ṣe ni tabili akọkọ nikan, ṣugbọn tun ni awọn adakọ. Ko si awọn iṣe afikun ti a ṣe lori tabili atọka, a ko ka awọn akọọlẹ, ko si si awọn titiipa ti a lo. Iyẹn ni, fifi awọn atọka kun ko fẹrẹ gba awọn orisun ati pe ko ni ipa lori iyara ti lilo awọn iyipada.

Lilo ACID, a ni anfani lati ṣe awọn atọka SQL-bi. Wọn ṣe deede, iwọn, yara, akojọpọ, ati ti a ṣe sinu ede ibeere CQL. Ko si iyipada si koodu ohun elo lati ṣe atilẹyin awọn atọka. Ohun gbogbo rọrun bi ni SQL. Ati ni pataki julọ, awọn atọka ko ni ipa ni iyara ipaniyan ti awọn iyipada si tabili idunadura atilẹba.

Kini o ti ṣẹlẹ

A ṣe idagbasoke C * Ọkan ọdun mẹta sẹhin ati ṣe ifilọlẹ sinu iṣẹ iṣowo.

Kini a gba ni ipari? Jẹ ki a ṣe iṣiro eyi nipa lilo apẹẹrẹ ti sisẹ fọto ati eto ibi ipamọ, ọkan ninu awọn iru data pataki julọ ni nẹtiwọọki awujọ. A ko sọrọ nipa awọn ara ti awọn fọto funrararẹ, ṣugbọn nipa gbogbo iru alaye-meta. Bayi Odnoklassniki ni o ni nipa 20 bilionu iru awọn igbasilẹ, awọn ilana eto 80 ẹgbẹrun ka ibeere fun keji, to 8 ẹgbẹrun ACID lẹkọ fun keji ni nkan ṣe pẹlu data iyipada.

Nigba ti a ba lo SQL pẹlu ifosiwewe isọdọtun = 1 (ṣugbọn ni RAID 10), iwifun fọto ti wa ni ipamọ sori iṣupọ ti o wa pupọ ti awọn ẹrọ 32 ti nṣiṣẹ Microsoft SQL Server (pẹlu awọn afẹyinti 11). Awọn olupin 10 tun pin fun titoju awọn afẹyinti. Apapọ awọn ọkọ ayọkẹlẹ ti o gbowolori 50. Ni akoko kanna, eto naa ṣiṣẹ ni fifuye ti o ni iwọn, laisi ipamọ.

Lẹhin gbigbe lọ si eto tuntun, a gba ifosiwewe ẹda = 3 - ẹda kan ni ile-iṣẹ data kọọkan. Eto naa ni awọn apa ibi ipamọ Cassandra 63 ati awọn ẹrọ oluṣakoso 6, fun apapọ awọn olupin 69. Ṣugbọn awọn ẹrọ wọnyi din owo pupọ, iye owo lapapọ wọn jẹ nipa 30% ti idiyele ti eto SQL kan. Ni akoko kanna, fifuye naa wa ni 30%.

Pẹlu ifihan ti C * Ọkan, lairi tun dinku: ni SQL, iṣẹ kikọ kan gba nipa 4,5 ms. Ni C * Ọkan - nipa 1,6 ms. Iye akoko idunadura jẹ ni apapọ kere ju 40 ms, ifaramo naa ti pari ni 2 ms, iye akoko kika ati kikọ jẹ ni apapọ 2 ms. 99th ogorun - nikan 3-3,1 ms, nọmba awọn akoko ipari ti dinku nipasẹ awọn akoko 100 - gbogbo rẹ nitori lilo ibigbogbo ti akiyesi.

Ni bayi, ọpọlọpọ awọn apa SQL Server ti wa ni idasilẹ; A ṣe atunṣe C * Ọkan lati ṣiṣẹ ninu awọsanma wa ọkan-awọsanma, eyi ti o jẹ ki o ṣee ṣe lati mu iyara ti awọn iṣupọ titun ṣiṣẹ, simplify iṣeto ni ati adaṣe adaṣe. Laisi koodu orisun, ṣiṣe eyi yoo nira pupọ ati irẹwẹsi.

Bayi a n ṣiṣẹ lori gbigbe awọn ohun elo ipamọ miiran si awọsanma - ṣugbọn iyẹn jẹ itan ti o yatọ patapata.

orisun: www.habr.com

Fi ọrọìwòye kun