Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Beşdariya Yandex ji databasên jêrîn re dê were lêkolîn kirin.

  • clickhouse
  • odyssey
  • Vejandin heya xalek demê (WAL-G)
  • PostgreSQL (tevî logerrors, Amcheck, heapcheck)
  • Greenplum

Video:

Silav dinya! Navê min Andrey Borodin e. Tiştê ku ez li Yandex.Cloud dikim ev e ku di berjewendîyên xerîdarên Yandex.Cloud û Yandex.Cloud de databasên peywendîdar ên vekirî pêşve bibin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Di vê axaftinê de, em ê li ser kêşeyên ku bi pîvanên vekirî re rû bi rû ne biaxivin. Çima girîng e? Ji ber ku pirsgirêkên piçûk, piçûk ên ku mîna mêş, paşê dibin fîl. Gava ku we gelek kom hene ew mezin dibin.

Lê ev ne ya sereke ye. Tiştên nebawer diqewimin. Tiştên ku di yek mîlyon bûyeran de diqewimin. Û di hawîrdorek ewr de, divê hûn ji bo wê amade bin, ji ber ku tiştên nebawer gava ku tiştek di pîvanê de hebe pir muhtemel dibin.

Lebê! Feydeya databasên vekirî çi ye? Rastî ev e ku hûn derfetek teorîkî heye ku hûn bi her pirsgirêkê re mijûl bibin. Koda çavkaniyê we heye, zanîna we ya bernamekirinê heye. Em wê tevlihev dikin û ew dixebite.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Di xebata li ser nermalava çavkaniya vekirî de çi nêzîkatî hene?

  • Nêzîkatiya herî rast karanîna nermalavê ye. Ger hûn protokolan bikar bînin, ger hûn standardan bikar bînin, ger hûn formatan bikar bînin, ger hûn di nermalava çavkaniya vekirî de pirsan binivîsin, wê hingê hûn berê wê piştgirî dikin.
  • Hûn ekosîstema wê mezintir dikin. Hûn îhtîmala tespîtkirina zû ya xeletiyek mezin dikin. Hûn pêbaweriya vê pergalê zêde dikin. Hûn hebûna pêşdebiran li sûkê zêde dikin. Hûn vê nermalavê çêtir bikin. Ger we tenê şêwazê xwe bi dest xistibe û li wir tiştek biqedîne hûn jixwe beşdar in.
  • Nêzîkatiyek din a têgihîştî piştgirîkirina nermalava çavkaniya vekirî ye. Mînakî, bernameya naskirî ya Havîna Kodê ya Google, dema ku Google ji hejmareke mezin ji xwendekaran ji çar aliyên cîhanê pereyên têgihîştî dide da ku ew projeyên nermalava vekirî yên ku hin hewcedariyên lîsansê bicîh tînin pêşve bibin.
  • Ev nêzîkatiyek pir balkêş e ji ber ku ew dihêle ku nermalavê bêyî ku bala xwe ji civatê dûr bixe pêşde bibe. Google, wekî dêwek teknolojiyê, nabêje ku em vê taybetmendiyê dixwazin, em dixwazin vê xeletiyê rast bikin û li vir hewce ye ku em bikolin. Google dibêje: "Tiştê ku hûn dikin bikin. Tenê bi awayê ku hûn dixebitin berdewam bikin û her tişt dê baş be."
  • Nêzîkatiya din a beşdarbûna çavkaniya vekirî beşdarbûn e. Gava ku di nermalava çavkaniya vekirî de pirsgirêkek we hebe û pêşdebiran hebin, pêşdebirên we dest bi çareserkirina pirsgirêkan dikin. Ew dest pê dikin ku binesaziya we bikêrtir, bernameyên we zûtir û pêbawertir bikin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Yek ji projeyên herî navdar ên Yandex di warê nermalava çavkaniya vekirî de ClickHouse ye. Ev databasek e ku wekî bersivek ji kêşeyên ku bi Yandex.Metrica re rû bi rû mane çêbûye.

Û wekî databas, ew di çavkaniyek vekirî de hate çêkirin da ku ekosîstemek biafirîne û bi pêşdebirên din re (ne tenê di hundurê Yandex) de pêş bixe. Û niha ev projeyek mezin e ku tê de gelek pargîdaniyên cihêreng beşdar dibin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Di Yandex.Cloud-ê de, me ClickHouse li jora Yandex Object Storage, ango li ser depoya ewr çêkir.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Çima ev di ewr de girîng e? Ji ber ku her databas di vê sêgoşeyê de, di vê pîramîdê de, di vê hiyerarşiya celebên bîranînê de dixebite. We qeydên bilez lê piçûk û SSD-yên erzan ên mezin lê hêdî, ajokarên hişk û hin amûrên blokê yên din hene. Û heke hûn li serê pîramîdê bikêr bin, wê hingê we databasek bilez heye. heke hûn di binê vê pîramîdê de bikêr bin, wê hingê we databasek pîvandî heye. Û di vî warî de, lê zêdekirina qatek din ji jêr ve nêzîkatiyek mentiqî ye ji bo zêdekirina pîvana databasê.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Çawa dikare were kirin? Ev di vê raporê de xaleke girîng e.

  • Em dikarin ClickHouse li ser MDS bicîh bikin. MDS navgînek hilanîna cloudê ya Yandex ya navxweyî ye. Ew ji protokola hevpar a S3 tevlihevtir e, lê ji bo amûrek blokê maqûltir e. Ji bo tomarkirina daneyan çêtir e. Ew bêtir bernamekirinê hewce dike. Bernamesaz dê bername bidin, ew jî baş e, balkêş e.
  • S3 nêzîkatiyek gelemperî ye ku pêwendiyê bi lêçûna kêm adaptasyona hin cûreyên barkêşan re hêsantir dike.

Bi xwezayî, ku em dixwazin fonksiyonê ji tevahiya ekosîstema ClickHouse re peyda bikin û peywira ku di hundurê Yandex.Cloud de hewce dike bikin, me biryar da ku em pê ewle bin ku dê tevahiya civaka ClickHouse jê sûd werbigire. Me ClickHouse li ser S3 bicîh kir, ne ClickHouse li ser MDS. Û ev gelek kar e.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

References:

https://github.com/ClickHouse/ClickHouse/pull/7946 "Pêla abstractionê ya pergala pelan"
https://github.com/ClickHouse/ClickHouse/pull/8011 "Yekhevkirina AWS SDK S3"
https://github.com/ClickHouse/ClickHouse/pull/8649 "Pêkanîna bingehîn a pêwendiya IDisk ji bo S3"
https://github.com/ClickHouse/ClickHouse/pull/8356 "Yekhevkirina motorên hilanîna têketinê bi navbeynkariya IDisk"
https://github.com/ClickHouse/ClickHouse/pull/8862 "Piştgiriya motora têketinê ji bo S3 û SeekableReadBuffer"
https://github.com/ClickHouse/ClickHouse/pull/9128 "Piştgiriya Storage Stripe Log S3"
https://github.com/ClickHouse/ClickHouse/pull/9415 "Piştgiriya destpêkê ya MergeTree ji bo S3 hilanînê"
https://github.com/ClickHouse/ClickHouse/pull/9646 "Piştgiriya tevahî MergeTree ji bo S3"
https://github.com/ClickHouse/ClickHouse/pull/10126 "Piştgiriya ReplicatedMergeTree li ser S3"
https://github.com/ClickHouse/ClickHouse/pull/11134 "Ji bo hilanîna s3 pêbaweriyên xwerû û sernavên xwerû zêde bikin"
https://github.com/ClickHouse/ClickHouse/pull/10576 "S3 bi veavakirina proxy dînamîk"
https://github.com/ClickHouse/ClickHouse/pull/10744 "S3 bi çareserkerê proxy"

Ev navnîşek daxwaza kişandinê ye ji bo bicîhkirina pergala pelê virtual li ClickHouse. Ev hejmareke mezin ji daxwazên vekişînê ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

References:

https://github.com/ClickHouse/ClickHouse/pull/9760 "DiskS3 hardlinks pêkanîna çêtirîn"
https://github.com/ClickHouse/ClickHouse/pull/11522 "Muwekîlê S3 HTTP - Ji kopîkirina herika bersivê di nav bîranînê de dûr bixin"
https://github.com/ClickHouse/ClickHouse/pull/11561 "Ji kopîkirina tevahiya stûna bersivê di bîranînê de di S3 HTTP de dûr bisekinin
kirrîxwaz"
https://github.com/ClickHouse/ClickHouse/pull/13076 "Qanûna nîşankirina cache û pelan ji bo dîska S3"
https://github.com/ClickHouse/ClickHouse/pull/13459 "Parçeyan ji DiskLocal berbi DiskS3 bi paralel biguhezînin"

Lê kar bi dawî nebû. Piştî ku taybetmendî hate çêkirin, ji bo xweşkirina vê fonksiyonê hin xebatek din hewce bû.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

References:

https://github.com/ClickHouse/ClickHouse/pull/12638 "Bûyerên SelectedRows û SelectedBytes zêde bikin"
https://github.com/ClickHouse/ClickHouse/pull/12464 "Bûyerên profîlkirinê ji daxwaza S3 li system.events zêde bikin"
https://github.com/ClickHouse/ClickHouse/pull/13028 "QueryTimeMicroseconds, SelectQueryTimeMicroseconds û InsertQueryTimeMicroseconds zêde bikin"

Û paşê hewce bû ku ew were teşhîskirin, çavdêrîkirin û rêvebirin.

Û ev hemû kirin da ku tevahiya civakê, tevahiya ekosîstema ClickHouse, encama vî karî werbigire.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Werin em biçin ser databasên danûstendinê, databasên OLTP, yên ku bi kesane nêzî min in.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Ev beşa pêşkeftina DBMS-ya çavkaniya vekirî ye. Van xortan sêrbaziya kolanan dikin da ku databasên vekirî yên danûstendinê baştir bikin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Yek ji wan projeyan, ku mînakek bikar tîne ku em dikarin li ser çawa û çi dikin biaxivin, Connection Pooler li Postgres e.

Postgres databasek pêvajoyê ye. Ev tê vê wateyê ku databas pêdivî ye ku bi qasî ku mimkun be girêdanên torê hebe ku danûstendinan birêve bibe.

Ji hêla din ve, di hawîrdorek ewr de, rewşek tîpîk ev e ku gava hezar girêdan bi yekcarî têne yek komê. Û peywira poolerê girêdanê ev e ku hezar girêdan di hejmarek piçûk a girêdanên serverê de pak bike.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em dikarin bibêjin ku hewza pêwendiyê operatorê têlefonê ye ku bytes ji nû ve saz dike da ku ew bi bandor bigihîjin databasê.

Mixabin, peyva rûsî ya baş ji bo pooler girêdanê tune. Carinan jê re girêdanên multiplexer tê gotin. Ger hûn dizanin ku hûn jê re dibêjin pooler girêdanê, wê hingê bê guman ji min re bêjin, ez ê pir kêfxweş bibim ku bi zimanê teknîkî yê rûsî rast biaxivim.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/2017/92899

Me hewzên pêwendiyê yên ku ji bo komek postgres-ya rêveberî maqûl bûn lêkolîn kirin. Û PgBouncer ji bo me bijareya çêtirîn bû. Lê em bi PgBouncer re rastî gelek pirsgirêkan hatin. Gelek sal berê, Volodya Borodin rapor dan ku em PgBouncer bikar tînin, em ji her tiştî hez dikin, lê nuwaze hene, tiştek heye ku meriv li ser bixebite.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/media/2017/04/03/20170316H1_V.Borodin.pdf

Û em xebitîn. Me pirsgirêkên ku em pê re rû bi rû ne rast kirin, me Bouncer patch kir, û me hewl da ku daxwazên kêşanê li jor bişopînin. Lê karkirina bi yek-threading bingehîn dijwar bû.

Em neçar bûn ku kaskadan ji Bouncersên paçkirî berhev bikin. Dema ku me gelek Bouncerên yek-têlan hene, girêdanên li ser qata jorîn têne veguheztin qata hundurîn a Bouncers. Ev pergalek kêm-rêvebir e ku avakirina wê û mezinkirina paş û paş zehmet e.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em gihîştin wê encamê ku me hewza pêwendiya xwe, ku jê re Odyssey tê gotin, çêkir. Me ew ji nû ve nivîsand.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.pgcon.org/2019/schedule/events/1312.en.html

Di sala 2019-an de, di konferansa PgCon de, min ev pooler pêşkêşî civata pêşdebiran kir. Naha li ser GitHub ji 2 stêrkên me hinekî kêmtir in, ango proje zindî ye, proje populer e.

Û heke hûn di Yandex.Cloud de komek Postgres biafirînin, wê hingê ew ê bibe komek bi Odyssey-ya çêkirî, ya ku dema ku komê bi paş an paş ve were pîvandin ji nû ve tê mîheng kirin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em ji vê projeyê çi fêr bûn? Destpêkirina projeyek hevrikî her gav gavek êrîşkar e, tedbîrek tund e dema ku em dibêjin pirsgirêk hene ku bi lez û bez nayên çareser kirin, di navberên dema ku li gorî me de têne çareser kirin. Lê ev tedbîrek bandor e.

PgBouncer dest bi pêşkeftina zûtir kir.

Û niha projeyên din xuya bûn. Mînakî, pgagroal, ku ji hêla pêşdebirên Red Hat ve hatî pêşve xistin. Ew armancên wekhev dişopînin û ramanên wekhev pêk tînin, lê, bê guman, bi taybetmendiyên xwe, yên ku ji pêşdebirên pgagroal re nêzîk in.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Bûyerek din a xebata bi civata postgres re vedigere xalek dem. Ev başbûnek piştî têkçûnekê ye, ev vegerandina ji hilanînê ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Gelek paşkêş hene û ew hemî cûda ne. Hema hema her firoşkarê Postgres çareseriya xweya hilanînê heye.

Ger hûn hemî pergalên hilanînê bigirin, matrixek taybetmendiyê biafirînin û bi henekî diyarkerê di vê matrixê de hesab bikin, ew ê bibe sifir. Ev tê çi wateyê? Heke hûn pelek hilanînê ya taybetî bistînin, wê hingê ew nikare ji perçeyên hemî yên din were civandin. Di tetbîqkirina xwe de yekta ye, di armanca xwe de yekta ye, bi ramanên ku di nav de cih girtine yekta ye. Û ew hemî taybetî ne.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.citusdata.com/blog/2017/08/18/introducing-wal-g-faster-restores-for-postgres/

Dema ku em li ser vê pirsgirêkê dixebitin, CitusData projeya WAL-G dest pê kir. Ev pergalek hilanînê ye ku bi çavek li hawîrdora ewr hatî çêkirin. Naha CitusData jixwe beşek Microsoft-ê ye. Û di wê gavê de, me bi rastî ji ramanên ku di weşanên destpêkê yên WAL-G de hatine danîn hez kir. Û me dest bi beşdarbûna vê projeyê kir.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/wal-g/wal-g/graphs/contributors

Naha di vê projeyê de bi dehan pêşdebir hene, lê di nav 10 beşdarên herî baş ên WAL-G de 6 Yandexoid hene. Me gelek fikrên xwe anîn wir. Û, bê guman, me wan bi xwe bicîh kir, wan bi xwe ceriband, wan bi xwe vexist nav hilberînê, em bi xwe wan bikar tînin, em bi xwe fêhm dikin ku em li ku derê bigerin, dema ku bi civata mezin a WAL-G re têkilî daynin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Û ji nihêrîna me, naha ev pergala paşvekêşanê, tevî girtina hewildanên me, ji bo jîngehek ewr bûye çêtirîn. Ev mesrefa çêtirîn e ku pişta xwe bidin Postgres di ewr de.

Poldayî? Me ramanek pir mezin pêşve dixist: divê paşvekişandin ewledar be, xebitandin erzan be û bi lez û bez were sererast kirin.

Çima divê erzan be xebitandin? Dema ku tiştek şikestî nebe, divê hûn zanibin ku we paşvekêşan hene. Her tişt baş dixebite, hûn bi qasî ku pêkan CPU-ya hindik winda dikin, hûn bi qasî ku pêkan hindik çavkaniyên dîskê bikar tînin, û hûn bi qasî ku pêkan hindik beyt ji torê re dişînin da ku hûn destwerdanê nedin barkirina karûbarên xweyên hêja.

Û gava ku her tişt dişkê, mînakî, rêveberê daneyê avêtin, tiştek xelet derket, û hûn bi lezgîn hewce ne ku vegerin paşerojê, hûn bi hemî drav re vedigerin, ji ber ku hûn dixwazin daneyên xwe zû û bêkêmasî paşde vegerînin.

Û me ev fikra sade pêş xist. Û, ji me re xuya dike, me bi cih anî.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Lê ev ne hemû ye. Me tiştek piçûktir dixwest. Me gelek databasên cihê dixwest. Ne hemî xerîdarên me Postgres bikar tînin. Hin kes MySQL, MongoDB bikar tînin. Di civakê de, pêşdebirên din piştgirî dane FoundationDB. Û ev navnîş bi berdewamî berfireh dibe.

Civat ji ramana databasê ku li hawîrdorek rêvebirî ya di ewr de tê meşandin hez dike. Û pêşdebiran databasên xwe diparêzin, ku bi pergala meya hilanînê re bi Postgres re bi yekrengî têne piştgirî kirin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em ji vê çîrokê çi fêr bûne? Berhema me, wekî dabeşek pêşkeftinê, ne rêzikên kodê ne, ne daxuyanî ne, ne pel in. Hilbera me ne daxwazên kişandinê ye. Ev fikrên ku em digihînin civakê ne. Ev pisporiya teknolojî û tevgera teknolojiyê ber bi jîngehek ewr ve ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Databasek wekî Postgres heye. Ez herî zêde ji bingeha Postgres hez dikim. Ez gelek wext derbas dikim ku bingeha Postgres bi civatê re pêşve bixim.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Lê li vir divê were gotin ku Yandex.Cloud xwedan sazkirinek navxweyî ya databasên birêvebirî ye. Û ev demeke dirêj berê li Yandex.Mail dest pê kir. Pisporiya ku naha rê li ber rêvebirina Postgres girt, dema ku nameyê dixwest derbasî Postgres bibe hate berhev kirin.

Mail daxwazên pir dişibihe ewr. Pêdivî ye ku hûn di her xala daneyên xwe de bigihîjin mezinbûna berbiçav a nediyar. Û nameyê jixwe barek bi sed mîlyonan qutiyên posteyê yên hejmareke mezin a bikarhêneran hebû ku bi berdewamî gelek daxwazan dikin.

Û ev ji bo tîmê ku Postgres pêşve diçû dijwariyek pir cidî bû. Wê demê, her pirsgirêkek ku em pê re rû bi rû mabûn, ji civakê re dihatin ragihandin. Û ev pirsgirêk hatin rastkirin, û ji aliyê civakê ve li hinek cihan jî di asta piştevaniya bi pere de ji bo hinek databasên din û hîn baştir hatin rastkirin. Ango hûn dikarin nameyekê ji PgSQL hacker re bişînin û di nav 40 hûrdeman de bersivek bistînin. Piştgiriya drav di hin databasan de dibe ku bifikire ku ji xeletiya we tiştên pêşîntir hene.

Naha sazkirina navxweyî ya Postgres hin petabytes daneyan e. Vana bi mîlyonan daxwaz di çirkeyê de ne. Ev bi hezaran kom in. Ew pir mezin e.

Lê nuansek heye. Ew ne li ser ajokarên torê yên xweşik, lê li ser hardware pir hêsan dijî. Û bi taybetî ji bo tiştên nû yên balkêş hawîrdorek ceribandinê heye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Û di demek diyarkirî de di hawîrdora ceribandinê de me peyamek wergirt ku destnîşan dike ku guhezbarên hundurîn ên navnîşên databasê hatine binpêkirin.

Têkiliyek guhêrbar celebek têkiliyek e ku em li bendê ne ku her gav bigire.

Ji bo me rewşek pir krîtîk. Ew destnîşan dike ku dibe ku hin dane winda bûne. Û windabûna daneyê tiştek tam felaket e.

Fikra giştî ya ku em di databasên birêvebirî de dişopînin ev e ku tevî hewildanê jî, windakirina daneyan dê dijwar be. Her çend hûn bi qestî wan rakin jî, hûn ê dîsa jî hewce bikin ku nebûna wan ji bo demek dirêj paşguh bikin. Ewlehiya daneyê olek e ku em bi xîret dişopînin.

Û li vir rewşek derdikeve holê ku destnîşan dike ku dibe ku rewşek hebe ku em jê re ne amade bin. Û me dest bi amadekariya vê rewşê kir.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://commitfest.postgresql.org/23/2171/

Yekem tiştê ku me kir ev bû ku têlên van bi hezaran koman binax bikin. Me dît ku kîjan ji koman li ser dîskên xwedan firmware-ya problematîk ên ku nûvekirinên rûpela daneyê winda dikin bicîh bûne. Hemî koda daneya Postgres nîşan kirin. Û me ew peyamên ku binpêkirinên guhêrbarên navxweyî destnîşan dikin bi koda ku ji bo tespîtkirina gendeliya daneyan hatî çêkirin nîşan kirin.

Ev patch di pratîkê de ji hêla civakê ve bêyî nîqaşek zêde hate pejirandin, ji ber ku di her rewşek taybetî de eşkere bû ku tiştek xirab qewimî û hewce bû ku ji qeydê re were ragihandin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Piştî vê yekê, em gihîştin nuqteyê ku çavdêriya me heye ku têketin dişoxilîne. Û di egera peyamên gumanbar de, ew karmend ji xew radike, û karmend wê tamîr dike.

Lebê! Lêgerîna têketin li ser yek komê operasyonek erzan e û ji bo hezar koman bi felaket biha ye.

Me pêvekek bi navê nivîsand Logerrors. Ew dîmenek databasê diafirîne ku tê de hûn dikarin bi erzanî û zû statîstîkên xeletiyên berê hilbijêrin. Û heke hewce bike ku em efserê peywirê hişyar bikin, wê hingê em ê vê yekê bêyî ku pelên gigabyte bişopînin, lê bi derxistina çend baytan ji tabloya hash fêr bibin.

Ev dirêjkirin, wek nimûne, di depoya ji bo de hate pejirandin Red. Heke hûn dixwazin wê bikar bînin, hûn dikarin xwe saz bikin. Bê guman ew çavkaniya vekirî ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[email parastî]

Lê ev ne hemû ye. Me dest bi karanîna Amcheck, pêvekek çêkirî ya civakê kir, da ku di navnîşan de binpêkirinên neguhêrbar bibînin.

Û me fêhm kir ku heke hûn wê bi pîvanê bixebitin, xeletî hene. Me dest bi sererastkirina wan kir. Serrastkirinên me hatin qebûlkirin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[email parastî]

Me kifş kir ku ev pêvek nikare navnîşên GiST & GIT analîz bike. Me piştgirî da wan. Lê ev piştgirî hîn jî ji hêla civakê ve tê nîqaş kirin, ji ber ku ev fonksiyonek nû ye û li wir gelek hûrgulî hene.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://commitfest.postgresql.org/29/2667/

Û me her weha kifş kir ku dema kontrolkirina îndeksan ji bo binpêkirinên li ser serokê repplication, li ser master, her tişt baş dixebite, lê li ser kopiyan, li ser şopînerê, lêgerîna gendeliyê ne ew qas bandorker e. Hemî guhêrbar nayên kontrol kirin. Û yek guhêrbar me pir aciz kir. Û me sal û nîvek bi civakê re danûstendinê derbas kir da ku em vê kontrolê li ser replikayan çalak bikin.

Me kodek nivîsand ku divê hemî protokolan bişopîne. Me ji bo demek dirêj bi Peter Gaghan re ji Crunchy Data re li ser vê patchê nîqaş kir. Ew neçar bû ku dara B-ya heyî ya li Postgres hinekî biguhezîne da ku vê paçê qebûl bike. Ew hat qebûlkirin. Û naha kontrolkirina îndeksên li ser kopiyan jî têra xwe bi bandor bûye ku binpêkirinên ku em pê re rû bi rû mane bibînin. Ango, ev binpêkirinên ku dikarin ji ber xeletiyên di firmware dîskê, xeletiyên Postgres, xeletiyên di kernel Linux, û pirsgirêkên hardware de bibin sedema wan in. Navnîşek pir berfireh a çavkaniyên pirsgirêkên ku me ji bo wan amade dikir.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/38AF687F-8F6B-48B4-AB9E-A60CFD6CC261%40enterprisedb.com#0e86a12c01d967bac04a9bf83cd337cb

Lê ji xeynî indexan, parçeyek wekî heap, ango cîhê ku dane lê têne hilanîn heye. Û ne gelek guherbarên ku bêne kontrol kirin hene.

Me dirêjkirinek bi navê Heapcheck heye. Me dest bi pêşxistina wê kir. Û di heman demê de, bi me re, pargîdaniya EnterpriseDB jî dest bi nivîsandina modulek kir, ku wan bi heman rengî jê re digotin Heapcheck. Tenê me jê re digot PgHeapcheck, û wan tenê jê re digot Heapcheck. Ew bi fonksiyonên wekhev, îmzeyek hinekî cûda, lê bi heman ramanan heye. Li hinek cihan wan hinekî baştir bi cih anîn. Û wan ew berê di çavkaniya vekirî de şandin.

Û niha em berfirehbûna wan pêş dixin, ji ber ku ew êdî ne berfirehbûna wan e, lê berfirehkirina civakê ye. Û di pêşerojê de, ev beşek ji kernelê ye ku dê ji her kesî re were peyda kirin da ku ew di pêş de pirsgirêkên pêşerojê bizanibin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

Li hin cihan jî em gihîştin wê encamê ku di pergalên me yên çavdêriyê de pozîtîfên derewîn hene. Mînakî, pergala 1C. Dema ku databasek bikar tîne, Postgres carinan daneyan dinivîse ku ew dikare bixwîne, lê pg_dump nikare bixwîne.

Ev rewş ji pergala me ya tespîtkirina pirsgirêkan re mîna gendeliyê xuya dikir. Karmendê peywirê şiyar bû. Karmendê peywirê mêze kir ku çi diqewime. Piştî demekê, mişterek hat û got ku pirsgirêkên min hene. Karmend diyar kir ku pirsgirêk çi ye. Lê pirsgirêk di bingeha Postgres de ye.

Min nîqaşek li ser vê taybetmendiyê dît. Û wî nivîsî ku em rastî vê taybetmendiyê hatin û ew ne xweş bû, kesek bi şev şiyar bû ji bo ku bizanibe ew çi ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/fe9b3722df94f7bdb08768f50ee8fe59%40postgrespro.ru

Civatê bersiv da, "Oh, em bi rastî hewce ne ku wê rast bikin."

Analojiyek min a hêsan heye. Ger hûn di pêlavek ku di nav wê de gewrikek qûmê heye dimeşin, wê hingê, di prensîbê de, hûn dikarin bimeşin - pirsgirêk nîne. Ger hûn çîçikan difiroşin bi hezaran kesî, wê demê werin em qet pêlavan bê qûm çêkin. Û heke yek ji bikarhênerên pêlavên we dê maratonek bimeşîne, wê hingê hûn dixwazin pêlavên pir baş çêkin, û dûv re wan ji hemî bikarhênerên xwe re pîvan bikin. Û bikarhênerên weha yên nediyar her gav di hawîrdora ewr de ne. Her gav bikarhêner hene ku komê bi rengek orîjînal bikar tînin. Divê hûn her dem ji bo vê yekê amade bikin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em li vir çi fêr bûne? Em hînî tiştek hêsan bûn: Ya herî girîng ew e ku em ji civakê re rave bikin ku pirsgirêkek heye. Ger civakê pirsgirêk nas kiribe, ji bo çareserkirina pirsgirêkê pêşbaziya xwezayî derdikeve holê. Ji ber ku her kes dixwaze pirsgirêkek girîng çareser bike. Hemî firoşkar, hemî hacker fêm dikin ku ew bi xwe dikarin li ser vê rahêjê gav bavêjin, ji ber vê yekê ew dixwazin wan ji holê rakin.

Ger hûn li ser pirsgirêkek dixebitin, lê ew ji we pê ve tu kesî aciz nake, lê hûn bi rêkûpêk li ser wê dixebitin û di dawiyê de ew pirsgirêk tê hesibandin, wê hingê daxwaza weya kişandinê bê guman dê were pejirandin. Patchê we dê were pejirandin, çêtirkirinên we an tewra daxwazên çêtirkirinan dê ji hêla civakê ve werin vekolandin. Di dawiya rojê de, em databasê ji hev re çêtir dikin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Databasek balkêş Greenplum e. Ew databasek pir paralel e ku li ser bingeha koda Postgres-ê ye, ku ez pê pir nas dikim.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://greenplum.org/greenplum-database-tables-compression/

Û Greenplum xwedan fonksiyonek balkêş e - tabloyên xweşbînkirî zêde bikin. Ev tabloyên ku hûn dikarin zû lê zêde bikin in. Ew dikarin stûnek an rêzek bin.

Lê kombûn tune bû, ango fonksiyonek tune bû ku hûn daneyên ku di tabloyê de cih digirin li gorî rêza ku di yek ji navnîşan de ye rêz bikin.

Xortên taksiyê hatin ba min û gotin: “Andrey, tu Postgres nas dikî. Û li vir hema hema heman e. 20 hûrdeman veguherînin. Hûn wê bigirin û bikin." Min fikir kir ku erê, ez Postgres nas dikim, 20 hûrdeman diguherim - pêdivî ye ku ez wiya bikim.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/commit/179feb77a034c2547021d675082aae0911be40f7

Lê na, ne 20 deqe bû, min bi mehan nivîsand. Di konferansa PgConf.Russia de, min ji Pivotal nêzîkî Heikki Linakangas kir û jê pirsî: "Gelo di vê yekê de pirsgirêk hene? Çima komkirina tabloya xweşbînkirî ya pêvekirî tune? Dibêje: “Hûn daneyan digirin. Hûn rêz dikin, hûn ji nû ve saz dikin. Ew tenê karek e." Ez: "Oh, erê, hûn tenê hewce ne ku wê bigirin û bikin." Ew dibêje: "Erê, ji bo vê yekê em destên azad hewce ne." Min fikirîn ku ez bê guman hewce dikim ku vê yekê bikim.

Û çend meh şûnda min daxwaznameyek kişandinê pêşkêş kir ku vê fonksiyonê bicîh anî. Ev daxwaza kişandinê ji hêla Pivotal ve bi civakê re hate vekolîn. Bê guman, xeletî hebûn.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/issues/10150

Lê ya herî balkêş ev e ku dema ku ev daxwaza kişandinê hate yek kirin, di Greenplum bixwe de xeletî hatin dîtin. Me dît ku tabloyên hep carinan dema ku kom dibin danûstendinê dişkînin. Û ev tiştek e ku divê were rast kirin. Û ew li cihê ku min tenê dest pê kir. Û reaksiyona min a xwezayî bû - baş e, bila ez jî vê yekê bikim.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10290

Min ev xeletî rast kir. Daxwazek vekişînê ji rastkeran re şand. Ew hat kuştin.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb-postgres-merge/pull/53

Piştî wê derket holê ku divê ev fonksiyon di guhertoya Greenplum ya PostgreSQL 12 de were bidestxistin. Ango serpêhatiya 20 hûrdemî bi serpêhatiyên balkêş ên nû berdewam dike. Balkêş bû ku meriv pêşkeftina heyî, ku civat taybetmendiyên nû û herî girîng jê dike, bi dest bixe. cemidî ye.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

https://github.com/greenplum-db/gpdb/pull/10565

Lê bi dawî nebû. Piştî her tiştî, derket holê ku em hewce ne ku ji bo van hemî belgeyan binivîsin.

Min dest bi nivîsandina belgeyan kir. Xwezî, belgefîlmên Pivotal hatin. Îngilîzî zimanê wan ê zikmakî ye. Di belgekirinê de alîkariya min kirin. Bi rastî, wan bi xwe tiştê ku min pêşniyar kir bi Englishngilîzî ya rastîn ji nû ve nivîsandin.

Û li vir, wusa dixuye ku serpêhatî qediya. Û hûn dizanin paşê çi bû? Xortên taksiyê hatin ba min û gotin: “Hê jî du serpêhatî hene, her yek ji bo 10 deqeyan.” Û ez ji wan re çi bibêjim? Min got ku niha ez ê li ser pîvanê raporek bidim, paşê em ê serpêhatiyên we bibînin, ji ber ku ev karekî balkêş e.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Em ji vê dozê çi fêr bûn? Ji ber ku xebata bi çavkaniya vekirî her gav bi kesek taybetî re dixebite, ew her gav bi civakê re dixebite. Ji ber ku di her qonaxê de min bi hin pêşdebiran, hin ceribandinan, hin hackeran, hin belgefîlman, hin mîmaran re xebitî. Min bi Greenplum re nexebitî, min bi mirovên li derdora Greenplum re xebitî.

Lebê! Xalek din a girîng heye - ew tenê kar e. Yanî tu were, qehweyê vexwe, kodê binivîse. Hemî celebên guhêrbar ên hêsan dixebitin. Bi gelemperî bikin - ew ê baş be! Û ew karekî pir balkêş e. Daxwaza vê xebatê ji xerîdarên Yandex.Cloud, bikarhênerên komên me yên li hundur û derveyî Yandex heye. Û ez difikirim ku dê hejmara projeyên ku em tê de beşdar dibin zêde bibin û kûrahiya tevlêbûna me jî dê zêde bibe.

Navê pêger. Em herin ser pirsan.

Çi û çima em di databasên Çavkaniya Vekirî de dikin. Andrey Borodin (Yandex.Cloud)

Rûniştina pirsan

Slav! Civînek din a pirs û bersivê me heye. Û di studyoyê de Andrei Borodin. Ev kesê ku tenê ji we re li ser beşdariya Yandex.Cloud û Yandex ji çavkaniya vekirî re got. Rapora me naha bi tevahî ne li ser Cloud-ê ye, lê di heman demê de em li ser teknolojiyên weha bingeh in. Bêyî tiştê ku we di hundurê Yandex-ê de kir, dê di Yandex.Cloud de karûbar tune be, ji ber vê yekê ez bixwe ji min re spas dikim. Û pirsa yekem ji weşanê: "Her yek ji projeyên ku we behs kir li ser çi hatine nivîsandin?"

Pergala hilanînê ya di WAL-G de di Go de hatî nivîsandin. Ev yek ji projeyên nûtir e ku me li ser kar kiriye. Ew bi rastî tenê 3 salî ye. Û databasek pir caran li ser pêbaweriyê ye. Û ev tê wê wateyê ku databases pir kevn in û ew bi gelemperî bi C têne nivîsandin. Projeya Postgres bi qasî 30 sal berê dest pê kir. Hingê C89 bijartina rast bû. Û Postgres li ser hatiye nivîsandin. Daneyên nûjen ên wekî ClickHouse bi gelemperî di C ++ de têne nivîsandin. Hemî pêşveçûna pergalê li dora C û C ++-ê ye.

Pirsek ji birêvebirê darayî yê me, yê ku ji lêçûnên li Cloud berpirsiyar e: "Çima Cloud ji bo piştgirîkirina çavkaniya vekirî drav xerc dike?"

Li vir ji bo rêveberê darayî bersivek hêsan heye. Em vê yekê dikin ku karûbarên xwe baştir bikin. Bi kîjan awayan em dikarin çêtir bikin? Em dikarin tiştan bikêrtir, bileztir bikin û tiştan berbelavtir bikin. Lê ji bo me, ev çîrok di serî de li ser pêbaweriyê ye. Mînakî, di pergalek paşvekêşanê de em 100% ji paçên ku li ser wê têne sepandin dinirxînin. Em dizanin ku kod çi ye. Û em rehettir in ku guhertoyên nû ji hilberînê re derxînin. Ango, berî her tiştî, ew li ser pêbaweriyê, li ser amadebûna ji bo pêşkeftinê û li ser pêbaweriyê ye

Pirsek din: "Gelo hewcedariyên bikarhênerên derveyî yên ku li Yandex.Cloud dijîn ji bikarhênerên navxweyî yên ku di Cloud-a hundurîn de dijîn cûda ne?"

Profîla barkirinê, bê guman, cûda ye. Lê ji hêla beşa min ve, hemî dozên taybetî û balkêş li ser barek ne-standard têne afirandin. Pêşdebirên bi xeyal, pêşdebirên ku tiştên nediyar dikin, bi qasî ku di hundur û derve de têne dîtin. Di vî warî de em hemû bi qasî hev in. Û, belkî, yekane taybetmendiya girîng a di hundurê operasyona databasên Yandex de dê ev be ku di hundurê Yandex de me hînkirinek heye. Di deverek de, hin devera peydabûnê bi tevahî dikeve siyê, û hemî karûbarên Yandex divê bi rengekî tevî vê yekê bidomînin. Ev cûdahiyek piçûk e. Lê ew di navbeyna databas û stoka torê de gelek pêşkeftina lêkolînê diafirîne. Wekî din, sazûmanên derveyî û hundurîn ji bo baştirkirina pêbawerî û performansê heman daxwazên taybetmendî û daxwazên wekhev diafirînin.

Pirsa paşerojê: "Hûn bi xwe çawa ji vê yekê hîs dikin ku piraniya tiştên ku hûn dikin ji hêla Ewrên din ve têne bikar anîn?" Em ê navên taybetî nebêjin, lê gelek projeyên ku di Yandex.Cloud de hatine kirin di ewrên kesên din de têne bikar anîn.

Ev xweş e. Ya yekem, ew nîşanek e ku me tiştek rast kiriye. Û ew egoyê dişewitîne. Û em bêtir bawer in ku me biryara rast daye. Ji hêla din ve, ev hêvî ye ku di pêşerojê de ev dê ji me re ramanên nû, daxwazên nû ji bikarhênerên sêyemîn re bîne. Piraniya pirsgirêkên li ser GitHub ji hêla rêveberên pergalê, DBA-yên ferdî, mîmarên takekesî, endezyarên kesane ve têne afirandin, lê carinan mirovên xwedî ezmûna sîstematîk têne û dibêjin ku di 30% ji hin rewşan de ev pirsgirêk heye û em bifikirin ka meriv wê çawa çareser bike. Ya ku em herî zêde li bendê ne ev e. Em li bendê ne ku ezmûnan bi platformên ewr ên din re parve bikin.

Te gelek qala maratonê kir. Ez dizanim ku te li Moskowê maratonek bezî. Di encamê da? Pêşî xortên PostgreSQL girt?

Na, Oleg Bartunov pir zû direve. Wî saetek beriya min qedand. Bi tevayî, ez kêfxweş im ku ez çiqas dûr ketim. Ji bo min, tenê qedandin serkeftinek bû. Bi tevayî, ecêb e ku di civata postgres de ew qas bazdan hene. Ji min re xuya dike ku di navbera werzîşên aerobîk û xwesteka bernameya pergalê de cûreyek têkiliyek heye.

Ma hûn dibêjin li ClickHouse bazdan tune?

Ez teqez dizanim ku ew li wir in. ClickHouse jî databasek e. Bi awayê, Oleg naha ji min re dinivîse: "Em ê piştî raporê birevin?" Ev fikreke mezin e.

Pirsek din ji weşana Nikita: "Çima we xeletiya Greenplum bi xwe rast kir û neda xortan?" Rast e, ne pir zelal e ku xeletî çi ye û di kîjan karûbar de ye, lê dibe ku ev tê wateya ya ku we behs kir.

Erê, di prensîbê de, dikaribû ji kesekî re bihata dayîn. Ew tenê koda ku min tenê guherand bû. Û xwezayî bû ku meriv wê di cih de bidomîne. Di prensîbê de, ramana parvekirina pisporiyê bi tîmê re ramanek baş e. Em ê bê guman karên Greenplum di nav hemî endamên beşa xwe de parve bikin.

Ji ber ku em behsa ciwanan dikin, li vir pirsek heye. Kesê biryar da ku komîteya yekem li Postgres biafirîne. Ma ew hewce dike ku çi bike da ku pêşî li peywirê bigire?

Ev pirsek balkêş e: "Ji ku derê dest pê bike?" Bi gelemperî pir dijwar e ku meriv bi tiştek di kernelê de dest pê bike. Mînakî, di Postgres de, navnîşek kirinek heye. Lê di eslê xwe de ev pelek e ya ku wan hewl da bikin, lê bi ser neketin. Ev tiştên tevlihev in. Û bi gelemperî hûn dikarin di ekosîstemê de hin karûbaran bibînin, hin pêvekên ku dikarin werin çêtir kirin, ku ji pêşdebirên kernelê kêmtir bala xwe dikişînin. Û, li gorî vê, li wir ji bo mezinbûnê bêtir xal hene. Di bernameya koda Havîna Google de, her sal civata postgres gelek mijarên cihêreng ên ku dikarin werin çareser kirin derdixe pêş. Li gorî min, îsal sê xwendekarên me hebûn. Yek jî di WAL-G de li ser mijarên ku ji bo Yandex girîng in nivîsand. Di Greenplum de, her tişt ji civata Postgres hêsantir e, ji ber ku hackerên Greenplum daxwazên kişandinê pir baş digirin û di cih de dest bi vekolînê dikin. Şandina patchek ji Postgres re meseleyek mehan e, lê Greenplum dê di rojekê de were û bibîne ka we çi kiriye. Tiştek din ev e ku Greenplum hewce dike ku pirsgirêkên heyî çareser bike. Greenplum bi berfirehî nayê bikar anîn, ji ber vê yekê dîtina pirsgirêka we pir dijwar e. Û berî her tiştî, divê em pirsgirêkan çareser bikin, bê guman.

Source: www.habr.com