Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Yo pral revize kontribisyon Yandex nan baz done sa yo.

  • Klike sou Kay
  • Odyssey
  • Rekiperasyon nan yon pwen nan tan (WAL-G)
  • PostgreSQL (ki gen ladan erè log, Amcheck, heapcheck)
  • Greenplum

Videyo:

Bonjou mond! Non mwen se Andrey Borodin. Ak sa mwen fè nan Yandex.Cloud se devlope baz done relasyon louvri nan enterè yo nan kliyan Yandex.Cloud ak Yandex.Cloud.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Nan diskou sa a, nou pral pale sou defi yo fè fas a baz done louvri nan echèl. Poukisa li enpòtan? Paske ti kras, ti pwoblèm ki, tankou moustik, Lè sa a, vin elefan. Yo vin gwo lè ou gen anpil grap.

Men, se pa bagay prensipal la. Bagay enkwayab rive. Bagay ki rive nan youn nan yon milyon ka. Ak nan yon anviwònman nwaj, ou dwe prepare pou sa, paske bagay enkwayab vin trè pwobab lè yon bagay egziste nan echèl.

Men! Ki avantaj ki genyen nan baz done louvri? Reyalite a se ke ou gen yon opòtinite teyorik fè fas ak nenpòt pwoblèm. Ou gen kòd sous la, ou gen konesans pwogramasyon. Nou konbine li epi li travay.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Ki apwòch ki genyen nan travay sou lojisyèl sous louvri?

  • Apwòch ki pi senp la se sèvi ak lojisyèl. Si w itilize pwotokòl, si w sèvi ak estanda, si w sèvi ak fòma, si w ekri demann nan lojisyèl sous louvri, Lè sa a, ou deja sipòte li.
  • Ou ap fè ekosistèm li yo pi gwo. Ou fè pi gwo chans pou deteksyon bonè yon ensèk. Ou ogmante fyab nan sistèm sa a. Ou ogmante disponiblite devlopè nan mache a. Ou amelyore lojisyèl sa a. Ou se deja yon kontribitè si ou jis te moute jwenn style ak tinkered ak yon bagay la.
  • Yon lòt apwòch konprann se patwone lojisyèl sous louvri. Pou egzanp, byen li te ye Google Summer of Code pwogram lan, lè Google peye yon gwo kantite elèv ki soti nan tout mond lan konprann lajan pou yo devlope pwojè lojisyèl louvri ki satisfè sèten kondisyon lisans.
  • Sa a se yon apwòch trè enteresan paske li pèmèt lojisyèl an evolye san yo pa deplase konsantre nan lwen kominote a. Google, kòm yon jeyan teknoloji, pa di ke nou vle karakteristik sa a, nou vle ranje ensèk sa a ak sa a se kote nou bezwen fouye. Google di: "Fè sa ou fè. Jis kontinye travay jan ou te travay la epi tout bagay pral anfòm."
  • Pwochen apwòch pou patisipe nan sous louvri se patisipasyon. Lè ou gen yon pwoblèm nan lojisyèl sous louvri epi gen devlopè, devlopè ou kòmanse rezoud pwoblèm yo. Yo kòmanse fè enfrastrikti ou pi efikas, pwogram ou yo pi vit ak pi serye.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Youn nan pwojè Yandex ki pi popilè nan domèn lojisyèl sous louvri se ClickHouse. Sa a se yon baz done ki te fèt kòm yon repons a defi yo fè fas a Yandex.Metrica.

Ak kòm yon baz done, li te fè nan sous louvri yo nan lòd yo kreye yon ekosistèm epi devlope li ansanm ak lòt devlopè (pa sèlman nan Yandex). Epi kounye a sa a se yon gwo pwojè nan ki anpil konpayi diferan yo patisipe.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Nan Yandex.Cloud, nou te kreye ClickHouse sou tèt depo objè Yandex, sa vle di sou tèt depo nwaj.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Poukisa sa enpòtan nan nwaj la? Paske nenpòt baz done travay nan triyang sa a, nan piramid sa a, nan yerachi sa a nan kalite memwa. Ou gen enskri rapid men ti ak bon mache SSD gwo men dousman, dis ak kèk lòt aparèy blòk. Men, si ou efikas nan tèt piramid la, Lè sa a, ou gen yon baz done vit. si ou efikas nan pati anba a nan piramid sa a, Lè sa a, ou gen yon baz done echèl. Ak nan sans sa a, ajoute yon lòt kouch anba a se yon apwòch ki lojik pou ogmante évolutivité nan baz done a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Ki jan li ta ka fè? Sa a se yon pwen enpòtan nan rapò sa a.

  • Nou ta ka aplike ClickHouse sou MDS. MDS se yon koòdone entèn Yandex depo nwaj. Li pi konplèks pase pwotokòl S3 komen an, men li pi apwopriye pou yon aparèy blòk. Li pi bon pou anrejistreman done. Li mande plis pwogramasyon. Pwogramasyon yo pral pwograme, li menm bon, li enteresan.
  • S3 se yon apwòch ki pi komen ki fè koòdone a pi senp nan pri a nan mwens adaptasyon nan sèten kalite chaj travay.

Natirèlman, nou vle bay fonksyonalite nan tout ekosistèm ClickHouse la epi fè travay ki nesesè andedan Yandex.Cloud, nou deside asire w ke tout kominote ClickHouse la ta benefisye de li. Nou te aplike ClickHouse sou S3, pa ClickHouse sou MDS. Ak sa a se yon anpil nan travay.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Lyen:

https://github.com/ClickHouse/ClickHouse/pull/7946 "Kouch abstrè sistèm fichye"
https://github.com/ClickHouse/ClickHouse/pull/8011 "AWS SDK S3 entegrasyon"
https://github.com/ClickHouse/ClickHouse/pull/8649 "Enplemantasyon debaz nan entèaksyon IDisk pou S3"
https://github.com/ClickHouse/ClickHouse/pull/8356 "Entegrasyon motè depo boutèy demi lit ak koòdone IDisk"
https://github.com/ClickHouse/ClickHouse/pull/8862 "Log motè sipò pou S3 ak SeekableReadBuffer"
https://github.com/ClickHouse/ClickHouse/pull/9128 "Sipò pou Depo Stripe Log S3"
https://github.com/ClickHouse/ClickHouse/pull/9415 "Depo MergeTree premye sipò pou S3"
https://github.com/ClickHouse/ClickHouse/pull/9646 "MergeTree plen sipò pou S3"
https://github.com/ClickHouse/ClickHouse/pull/10126 "Sipòte ReplicatedMergeTree sou S3"
https://github.com/ClickHouse/ClickHouse/pull/11134 "Ajoute kalifikasyon default ak tèt koutim pou depo s3"
https://github.com/ClickHouse/ClickHouse/pull/10576 "S3 ak konfigirasyon prokurasyon dinamik"
https://github.com/ClickHouse/ClickHouse/pull/10744 "S3 ak rezolisyon prokurasyon"

Sa a se yon lis demann rale pou mete ann aplikasyon yon sistèm dosye vityèl nan ClickHouse. Sa a se yon gwo kantite demann rale.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Lyen:

https://github.com/ClickHouse/ClickHouse/pull/9760 "DiskS3 hardlinks aplikasyon optimal"
https://github.com/ClickHouse/ClickHouse/pull/11522 "S3 HTTP kliyan - Evite kopye kouran repons nan memwa"
https://github.com/ClickHouse/ClickHouse/pull/11561 "Evite kopye tout kouran repons nan memwa nan S3 HTTP
kliyan"
https://github.com/ClickHouse/ClickHouse/pull/13076 "Kapasite nan kachèt make ak endèks dosye pou S3 disk"
https://github.com/ClickHouse/ClickHouse/pull/13459 "Deplase pati nan DiskLocal pou DiskS3 an paralèl"

Men travay la pa t fini la. Apre karakteristik nan te fè, kèk travay plis te mande yo nan lòd yo optimize fonksyonalite sa a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Lyen:

https://github.com/ClickHouse/ClickHouse/pull/12638 "Ajoute evènman SelectedRows ak SelectedBytes"
https://github.com/ClickHouse/ClickHouse/pull/12464 "Ajoute evènman pwofil soti nan demann S3 nan system.events"
https://github.com/ClickHouse/ClickHouse/pull/13028 "Ajoute QueryTimeMicroseconds, SelectQueryTimeMicroseconds ak InsertQueryTimeMicroseconds"

Lè sa a, li te nesesè yo fè li dyagnostike, mete siveyans ak fè li jere.

E tout bagay sa yo te fèt pou tout kominote a, tout ekosistèm ClickHouse, te resevwa rezilta travay sa a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Ann ale nan baz done tranzaksyon, nan baz done OLTP, ki pi pre mwen pèsonèlman.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Sa a se divizyon devlopman DBMS sous louvri. Mesye sa yo ap fè maji nan lari pou amelyore baz done louvri tranzaksyon yo.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Youn nan pwojè yo, lè l sèvi avèk yon egzanp kote nou ka pale sou ki jan ak sa nou fè, se Pooler la Koneksyon nan Postgres.

Postgres se yon baz done pwosesis. Sa vle di ke baz done a ta dwe gen kòm kèk koneksyon rezo ke posib ki okipe tranzaksyon yo.

Nan lòt men an, nan yon anviwònman nwaj, yon sitiyasyon tipik se lè mil koneksyon vini nan yon gwoup nan yon fwa. Ak travay pooler koneksyon an se pake mil koneksyon nan yon ti kantite koneksyon sèvè.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Nou ka di ke pooler koneksyon an se operatè telefòn ki reyranje bytes yo pou yo rive jwenn baz done a avèk efikasite.

Malerezman, pa gen okenn bon mo Ris pou pooler koneksyon. Pafwa yo rele yo koneksyon multiplexeur. Si ou konnen ki sa yo rele pooler koneksyon an, Lè sa a, asire w ke ou di m ', mwen pral trè kontan pale kòrèk lang teknik Ris la.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

https://pgconf.ru/2017/92899

Nou te envestige poolers koneksyon ki te apwopriye pou yon gwoup postgres jere. Ak PgBouncer te pi bon chwa pou nou. Men, nou te rankontre yon kantite pwoblèm ak PgBouncer. Anpil ane de sa, Vladimir Borodin te bay rapò ke nou itilize PgBouncer, nou renmen tout bagay, men gen nuans, gen yon bagay yo travay sou.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

E nou te travay. Nou te ranje pwoblèm nou te rankontre yo, nou te korije Bouncer, epi nou te eseye pouse demann rale en. Men, fondamantal sèl-threading te difisil pou travay avèk yo.

Nou te oblije kolekte kaskad soti nan Bouncers patched. Lè nou gen anpil Bouncers sèl-threaded, koneksyon yo sou kouch nan tèt yo transfere nan kouch enteryè a nan Bouncers. Sa a se yon sistèm mal jere ki difisil yo bati ak echèl ale ak soti.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Nou te rive nan konklizyon an ke nou te kreye pooler pwòp koneksyon nou an, ki rele Odyssey. Nou te ekri li nan grafouyen.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

An 2019, nan konferans PgCon an, mwen te prezante pooler sa a bay kominote devlopè a. Kounye a nou gen yon ti kras mwens pase 2 zetwal sou GitHub, sa vle di pwojè a vivan, pwojè a popilè.

Men, si ou kreye yon gwoup Postgres nan Yandex.Cloud, Lè sa a, li pral yon grap ak bati-an Odyssey, ki se rkonfigire lè dekale gwoup la tounen oswa soti.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Kisa nou aprann nan pwojè sa a? Lanse yon pwojè konpetisyon se toujou yon etap agresif, se yon mezi ekstrèm lè nou di ke gen pwoblèm ki pa rezoud ase vit, yo pa rezoud nan entèval tan ki ta apwopriye pou nou. Men, sa a se yon mezi efikas.

PgBouncer te kòmanse devlope pi vit.

Epi, koulye a lòt pwojè yo te parèt. Pou egzanp, pgagroal, ki devlope pa devlopè Red Hat. Yo pouswiv objektif ki sanble ak aplike lide menm jan an, men, nan kou, ak spesifik pwòp yo, ki se pi pre devlopè pgagroal.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Yon lòt ka travay ak kominote postgres la se restore nan yon pwen nan tan. Sa a se rekiperasyon apre yon echèk, sa a se rekiperasyon soti nan yon backup.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Gen anpil sovgad epi yo tout diferan. Prèske chak machann Postgres gen pwòp solisyon backup li yo.

Si ou pran tout sistèm backup yo, kreye yon matris karakteristik ak jwen kalkile detèminan nan matris sa a, li pral zewo. Ki sa sa a vle di? E si ou pran yon dosye backup espesifik, Lè sa a, li pa ka reyini soti nan moso nan tout lòt yo. Li inik nan aplikasyon li, li inik nan objektif li, li inik nan lide yo ki entegre nan li. Epi yo tout espesifik.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Pandan nou t ap travay sou pwoblèm sa a, CitusData te lanse pwojè WAL-G la. Sa a se yon sistèm backup ki te fèt ak yon je nan anviwònman an nwaj. Koulye a, CitusData deja fè pati Microsoft. Ak nan moman sa a, nou reyèlman te renmen lide yo ki te mete desann nan degaje inisyal yo nan WAL-G. Epi nou te kòmanse kontribye nan pwojè sa a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Koulye a, gen plizyè douzèn devlopè nan pwojè sa a, men 10 pi gwo kontribitè yo nan WAL-G gen ladan 6 Yandexoids. Nou pote anpil nan lide nou la. Epi, nan kou, nou aplike yo tèt nou, teste yo tèt nou, woule yo soti nan pwodiksyon tèt nou, nou sèvi ak yo tèt nou, nou tèt nou konnen ki kote yo deplase pwochen, pandan y ap kominike avèk gwo kominote WAL-G la.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Ak nan pwen de vi nou an, kounye a sistèm backup sa a, ki gen ladan pran an kont efò nou yo, te vin pi bon pou yon anviwònman nwaj. Sa a se pi bon pri pou fè bak Postgres nan nwaj la.

Sa sa vle di? Nou t ap fè pwomosyon yon gwo lide: backup yo ta dwe an sekirite, bon mache pou opere ak pi vit ke posib pou retabli.

Poukisa li ta dwe bon mache pou opere? Lè pa gen anyen ki kase, ou pa ta dwe konnen ou gen sovgad. Tout bagay ap mache byen, ou gaspiye CPU piti ke posib, ou sèvi ak ti resous disk ou ke posib, epi ou voye kòm kèk byte nan rezo a ke posib pou pa entèfere ak chaj la nan sèvis ki gen anpil valè ou yo.

Men, lè tout bagay kraze, pou egzanp, admin la tonbe done yo, yon bagay ale mal, epi ou ijan bezwen tounen nan tan lontan an, ou refè ak tout lajan an, paske ou vle done ou tounen byen vit ak entak.

Epi nou ankouraje lide senp sa a. Epi, sanble nou, nou jere aplike li.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Men, sa a se pa tout. Nou te vle yon lòt ti bagay ankò. Nou te vle anpil baz done diferan. Se pa tout kliyan nou yo itilize Postgres. Gen kèk moun ki sèvi ak MySQL, MongoDB. Nan kominote a, lòt devlopè te sipòte FoundationDB. Ak lis sa a toujou ap agrandi.

Kominote a renmen lide pou baz done a ap kouri nan yon anviwònman jere nan nwaj la. Ak devlopè yo kenbe baz done yo, ki ka fè bak inifòm ansanm ak Postgres ak sistèm backup nou an.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Kisa nou aprann nan istwa sa a? Pwodwi nou an, kòm yon divizyon devlopman, se pa liy kòd, se pa deklarasyon, li pa dosye. Pwodwi nou an se pa rale demann. Sa yo se lide ke nou transmèt nan kominote a. Sa a se ekspètiz teknolojik ak mouvman an nan teknoloji nan direksyon pou yon anviwònman nwaj.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Gen yon baz done tankou Postgres. Mwen renmen nwayo Postgres la pi plis. Mwen pase anpil tan devlope nwayo Postgres ak kominote a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Men, isit la li dwe di ke Yandex.Cloud gen yon enstalasyon entèn nan baz done jere. Epi li te kòmanse yon bon bout tan de sa nan Yandex.Mail. Ekspètiz la ki kounye a te mennen nan jere Postgres te akimile lè lapòs la te vle deplase nan Postgres.

Mail gen kondisyon ki sanble anpil ak nwaj la. Li bezwen ou pou kapab echèl nan kwasans eksponansyèl inatandi nan nenpòt ki pwen nan done ou yo. Ak lapòs la te deja gen yon chaj ak kèk santèn de milyon bwat lèt nan yon gwo kantite itilizatè ki toujou ap fè anpil demann.

Ak sa a te byen yon defi grav pou ekip la ki te devlope Postgres. Lè sa a, nenpòt pwoblèm nou te rankontre yo te rapòte bay kominote a. Ak pwoblèm sa yo te korije, ak korije pa kominote a nan kèk kote menm nan nivo sipò peye pou kèk lòt baz done e menm pi bon. Sa vle di, ou ka voye yon lèt bay pirate PgSQL epi resevwa yon repons nan lespas 40 minit. Peye sipò nan kèk baz done ka panse ke gen plis bagay priyorite pase ensèk ou a.

Koulye a, enstalasyon an entèn nan Postgres se kèk petabyte nan done. Sa yo se kèk milyon demann pou chak segonn. Sa yo se dè milye de grap. Li trè gwo-echèl.

Men, gen yon nuans. Li viv pa sou kondui rezo anpenpan, men sou pyès ki nan konpitè san patipri senp. Epi gen yon anviwònman tès espesyalman pou nouvo bagay ki enteresan.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Ak nan yon sèten moman nan anviwònman an tès nou te resevwa yon mesaj ki endike ke entèn yo invariants nan endèks yo baz done yo te vyole.

Yon invariant se yon kalite relasyon ke nou espere toujou kenbe.

Yon sitiyasyon trè kritik pou nou. Li endike ke kèk done ka yo te pèdi. Ak done pèt se yon bagay kareman katastwofik.

Lide jeneral ke nou swiv nan baz done jere se ke menm ak efò, li pral difisil pèdi done. Menm si ou fè espre retire yo, w ap toujou bezwen inyore absans yo pou yon peryòd tan ki long. Sekirite done se yon relijyon ke nou swiv byen dilijans.

E la i arive en sityasyon ki montre ki i kapab annan en sitiasyon ki nou petet pa pare. Epi nou te kòmanse prepare pou sitiyasyon sa a.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Premye bagay nou te fè se te antere mòso bwa ki soti nan plizyè milye grap sa yo. Nou te jwenn kiyès nan grap yo ki te chita sou disk ki gen pwoblèm firmwèr ki te pèdi mizajou paj done yo. Make tout kòd done Postgres. Epi nou make mesaj sa yo ki endike vyolasyon invariants entèn yo ak kòd ki fèt pou detekte koripsyon done yo.

Kominote a te pratikman aksepte patch sa a san yo pa gen anpil diskisyon, paske nan chak ka espesifik li te evidan ke yon move bagay te rive epi yo te bezwen rapòte nan boutèy la.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Apre sa, nou rive nan pwen ke nou gen siveyans ki analize mòso bwa. Ak nan ka mesaj sispèk, li reveye ofisye devwa a, epi ofisye devwa a repare li.

Men! Analyse mòso bwa se yon operasyon bon mache sou yon sèl grap ak katastwofik chè pou mil grap.

Nou te ekri yon ekstansyon ki rele Logerrors. Li kreye yon gade nan baz done a kote ou ka chèr epi byen vit chwazi estatistik sou erè sot pase yo. Men, si nou bezwen reveye ofisye devwa a, Lè sa a, nou pral jwenn enfòmasyon sou sa a san yo pa analize dosye gigabyte, men pa èkstraksyon kèk byte nan tab la hash.

Ekstansyon sa a te adopte, pou egzanp, nan repozitwa a pou CentOS. Si ou vle sèvi ak li, ou ka enstale li tèt ou. Natirèlman li nan sous louvri.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[imèl pwoteje]

Men, sa a se pa tout. Nou te kòmanse sèvi ak Amcheck, yon ekstansyon kominote-bati, pou jwenn vyolasyon invariant nan endèks.

Epi nou te jwenn ke si ou opere li nan echèl, gen pinèz. Nou te kòmanse repare yo. Yo aksepte koreksyon nou yo.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

https://www.postgresql.org/message-id/flat/[imèl pwoteje]

Nou dekouvri ke ekstansyon sa a pa ka analize endis GiST ak GIT. Nou fè yo sipòte. Men, sipò sa a toujou ap diskite pa kominote a, paske sa a se yon fonksyonalite relativman nouvo e gen anpil detay la.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Epi nou te dekouvri tou ke lè tcheke endèks pou vyolasyon sou lidè replikasyon an, sou mèt la, tout bagay mache byen, men sou kopi yo, sou disip la, rechèch la pou koripsyon pa tèlman efikas. Se pa tout envaryan yo tcheke. Ak yon sèl invariant deranje nou anpil. Epi nou te pase yon ane edmi pou kominike ak kominote a pou pèmèt chèk sa a sou kopi yo.

Nou te ekri kòd ki ta dwe swiv tout ka... pwotokòl. Nou te diskite patch sa a pou kèk tan ak Peter Gaghan ki soti nan Crunchy Data. Li te oblije yon ti kras modifye B-pyebwa ki deja egziste nan Postgres yo nan lòd yo aksepte patch sa a. Li te aksepte. Epi kounye a tcheke endèks sou kopi yo te vin ase efikas tou pou detekte vyolasyon nou te rankontre yo. Sa vle di, sa yo se vyolasyon ki ka koze pa erè nan firmwèr disk, pinèz nan Postgres, pinèz nan nwayo Linux la, ak pwoblèm pyès ki nan konpitè. Byen yon lis vaste de sous pwoblèm pou ki nou t ap prepare.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Men, san konte endèks, gen yon pati tankou pil, sa vle di plas kote done yo estoke. Epi pa gen anpil invariants ki ta ka tcheke.

Nou gen yon ekstansyon ki rele Heapcheck. Nou te kòmanse devlope li. Ak nan paralèl, ansanm ak nou, konpayi EnterpriseDB la tou te kòmanse ekri yon modil, ke yo te rele Heapcheck nan menm fason an. Se sèlman nou te rele li PgHeapcheck, epi yo jis rele li Heapcheck. Yo genyen li ak fonksyon menm jan an, yon siyati yon ti kras diferan, men ak menm lide yo. Yo aplike yo yon ti kras pi byen nan kèk kote. Apre sa, yo afiche li nan sous louvri anvan.

Epi kounye a nou ap devlope ekspansyon yo, paske se pa ekspansyon yo ankò, men ekspansyon kominote a. Ak nan tan kap vini an, sa a se yon pati nan nwayo a ki pral bay tout moun pou yo ka konnen sou pwoblèm nan lavni davans.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Nan kèk kote, nou menm rive nan konklizyon ke nou gen fo pozitif nan sistèm siveyans nou yo. Pou egzanp, sistèm nan 1C. Lè w ap itilize yon baz done, Postgres pafwa ekri done ladan l ke li ka li, men pg_dump pa ka li.

Sitiyasyon sa a te sanble ak koripsyon nan sistèm deteksyon pwoblèm nou an. Ofisye devwa a te reveye. Ofisye devwa a gade sa k ap pase. Apre kèk tan, yon kliyan te vin di ke mwen te gen pwoblèm. Asistan an te eksplike ki pwoblèm nan. Men, pwoblèm nan se nan nwayo Postgres la.

Mwen jwenn yon diskisyon sou karakteristik sa a. Apre sa, li te ekri ke nou te rankontre karakteristik sa a epi li te dezagreyab, yon moun leve nan mitan lannwit yo nan lòd yo konnen ki sa li te.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Kominote a reponn, "Oh, nou reyèlman bezwen ranje li."

Mwen gen yon senp analoji. Si w ap mache nan yon soulye ki gen yon grenn sab nan li, Lè sa a, nan prensip, ou ka deplase sou - pa gen okenn pwoblèm. Si ou vann bòt ak dè milye de moun, ann fè bòt san sab ditou. Men, si youn nan itilizatè soulye ou yo pral kouri yon maraton, Lè sa a, ou vle fè soulye trè bon, ak Lè sa a, echèl yo nan tout itilizatè ou yo. Ak sa yo itilizatè inatandi yo toujou nan anviwònman an nwaj. Gen toujou itilizatè ki eksplwate gwoup la nan kèk fason orijinal yo. Ou dwe toujou prepare pou sa.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Kisa nou aprann isit la? Nou te aprann yon bagay ki senp: sa ki pi enpòtan se eksplike kominote a ke gen yon pwoblèm. Si kominote a te rekonèt pwoblèm nan, lè sa a konpetisyon natirèl rive pou rezoud pwoblèm nan. Paske tout moun vle rezoud yon pwoblèm enpòtan. Tout machann, tout entru konprann ke yo menm yo ka mache sou rato sa a, kidonk yo vle elimine yo.

Si w ap travay sou yon pwoblèm, men li pa deranje pèsonn men ou, men ou travay sou li sistematik epi finalman konsidere kòm yon pwoblèm, Lè sa a, demann rale ou pral definitivman aksepte. Yo pral aksepte patch ou a, amelyorasyon ou yo oswa menm demann pou amelyorasyon yo pral revize pa kominote a. Nan fen jounen an, nou fè baz done a pi bon youn pou lòt.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Yon baz done enteresan se Greenplum. Li se yon baz done ki trè paralèl ki baze sou baz kod Postgres, ke mwen trè abitye avèk yo.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Ak Greenplum gen fonctionnalités enteresan - ajoute tab optimize. Sa yo se tab ke ou ka byen vit ajoute nan. Yo ka swa kolon oswa ranje.

Men, pa te gen okenn gwoupman, sa vle di pa te gen okenn fonksyonalite kote ou ka fè aranjman pou done ki sitiye nan tablo a an akò ak lòd ki nan youn nan endèks yo.

Mesye taksi yo te vin jwenn mwen epi yo di: “Andrey, ou konnen Postgres. Ak isit la se prèske menm bagay la. Chanje a 20 minit. Ou pran li epi fè li." Mwen te panse ke wi, mwen konnen Postgres, chanje pou 20 minit - mwen bezwen fè sa.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Men, non, li pa t '20 minit, mwen te ekri li sou mwa. Nan konferans PgConf.Russia, mwen te pwoche bò kote Heikki Linakangas nan Pivotal epi mwen te mande: “Èske gen pwoblèm ak sa a? Poukisa pa gen okenn regroupement tab optimize pou ajoute? Li di: "Ou pran done yo. Ou triye, ou rearanje. Se jis yon travay." Mwen: "O, wi, ou jis bezwen pran li epi fè li." Li di: “Wi, nou bezwen men lib pou nou fè sa.” Mwen te panse ke mwen definitivman bezwen fè sa.

Ak kèk mwa apre mwen te soumèt yon demann rale ki aplike fonksyonalite sa a. Pivotal te revize demann pou rale sa a ansanm ak kominote a. Natirèlman, te gen pinèz.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Men, bagay ki pi enteresan an se ke lè demann rale sa a te fizyone, pinèz yo te jwenn nan Greenplum tèt li. Nou te jwenn ke tab pil pil pafwa kraze tranzaksyon lè yo gwoupe. Epi sa a se yon bagay ki bezwen ranje. Epi li nan plas mwen jis manyen la. Ak reyaksyon natirèl mwen an te - oke, kite m 'fè sa a tou.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Mwen ranje ensèk sa a. Voye yon demann rale bay fixers yo. Li te touye.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Apre sa, li te tounen soti ke fonksyonalite sa a bezwen jwenn nan vèsyon an Greenplum pou PostgreSQL 12. Sa vle di, avanti 20 minit kontinye ak nouvo avantur enteresan. Li te enteresan touche devlopman aktyèl la, kote kominote a ap koupe karakteristik nouvo ak pi enpòtan. Li nan frizè.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

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

Men, li pa t 'fini la. Apre tout bagay, li te tounen soti ke nou te bezwen ekri dokiman pou tout bagay sa yo.

Mwen te kòmanse ekri dokiman. Erezman, dokimantè yo soti nan Pivotal te vini ansanm. Angle se lang natif natal yo. Yo te ede m 'ak dokiman an. An reyalite, yo menm yo te reekri sa mwen te pwopoze a nan reyèl angle.

Ak isit la, li ta sanble, avanti a te fini. Epi èske w konnen sa ki te pase lè sa a? Mesye taksi yo te vin jwenn mwen epi yo di: "Gen de avanti, chak pou 10 minit." E kisa mwen ta dwe di yo? Mwen te di ke kounye a mwen pral bay yon rapò sou echèl, Lè sa a, nou pral wè avantur ou yo, paske sa a se yon travay enteresan.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Kisa nou aprann nan ka sa a? Paske travay ak sous louvri se toujou travay ak yon moun espesifik, li toujou ap travay ak kominote a. Paske nan chak etap mwen te travay ak kèk pwomotè, kèk tèsteur, kèk pirate, kèk dokimantè, kèk achitèk. Mwen pa t travay ak Greenplum, mwen te travay ak moun ki alantou Greenplum.

Men! Gen yon lòt pwen enpòtan - se jis travay. Sa vle di, ou vini, bwè kafe, ekri kòd. Tout kalite invariants senp travay. Fè li nòmalman - li pral bon! Epi li se yon travay byen enteresan. Gen yon demann pou travay sa a soti nan kliyan Yandex.Cloud, itilizatè nan grap nou yo tou de andedan Yandex ak deyò. E mon panse ki lakantite proze ki nou partisipe pou ogmante e osi profonder nou partisipasyon pou ogmante.

Se tout. Ann ale nan kesyon yo.

Kisa ak poukisa nou fè nan baz done Open Source. Andrey Borodin (Yandex.Cloud)

Sesyon kesyon

Bonjou! Nou gen yon lòt sesyon kesyon ak repons. Ak nan estidyo Andrei Borodin la. Sa a se moun ki jis di ou sou kontribisyon Yandex.Cloud ak Yandex nan sous louvri. Rapò nou an kounye a se pa totalman sou Cloud la, men an menm tan nou baze sou teknoloji sa yo. San sa ou te fè andedan Yandex, pa ta gen okenn sèvis nan Yandex.Cloud, kidonk mèsi nan men mwen pèsonèlman. Ak premye kesyon ki soti nan emisyon an: "Ki sa ki ekri chak nan pwojè ou mansyone yo?"

Sistèm backup nan WAL-G ekri nan Go. Sa a se youn nan nouvo pwojè nou te travay sou yo. Li se literalman sèlman 3 zan. Ak yon baz done se souvan sou fyab. Ak sa vle di ke baz done yo byen fin vye granmoun epi yo anjeneral yo ekri nan C. Pwojè Postgres la te kòmanse apeprè 30 ane de sa. Lè sa a, C89 la te bon chwa. Epi Postgres ekri sou li. Plis baz done modèn tankou ClickHouse yo anjeneral ekri nan C++. Tout devlopman sistèm baze sou C ak C++.

Yon kesyon ki soti nan manadjè finansye nou an, ki moun ki responsab pou depans nan Cloud: "Poukisa Cloud depanse lajan pou sipòte sous louvri?"

Gen yon repons senp pou manadjè finansye a isit la. Nou fè sa pou fè sèvis nou yo pi byen. Nan ki fason nou ka fè pi byen? Nou ka fè bagay sa yo pi efikas, pi vit, epi fè bagay yo pi évolutive. Men, pou nou, istwa sa a se sitou sou fyab. Pou egzanp, nan yon sistèm backup nou revize 100% nan plak ki aplike nan li. Nou konnen ki sa kòd la ye. Apre sa, nou pi alèz woule soti nouvo vèsyon nan pwodiksyon an. Sa se, anvan tout bagay, li se sou konfyans, sou preparasyon pou devlopman ak sou fyab

Yon lòt kesyon: "Èske kondisyon itilizatè ekstèn k ap viv nan Yandex.Cloud diferan de itilizatè entèn ki abite nan Cloud entèn la?"

Pwofil chaj la se, nan kou, diferan. Men, nan pwen de vi depatman mwen an, tout ka espesyal ak enteresan yo kreye sou yon chaj ki pa estanda. Devlopè ki gen imajinasyon, devlopè ki fè inatandi a, gen plis chans pou yo jwenn tou de anndan ak deyò. Nan sans sa a, nou tout se apeprè menm. Epi, pwobableman, sèlman karakteristik enpòtan andedan operasyon an Yandex nan baz done yo pral ke andedan Yandex nou gen yon ansèyman. Nan kèk pwen, kèk zòn disponiblite konplètman ale nan lonbraj, ak tout sèvis Yandex dwe yon jan kanmenm kontinye fonksyone malgre sa. Sa a se yon ti diferans. Men, li kreye yon anpil nan devlopman rechèch nan koòdone nan baz done a ak chemine rezo a. Sinon, enstalasyon ekstèn ak entèn jenere menm demann pou karakteristik ak demann menm jan an pou amelyore fyab ak pèfòmans.

Pwochen kesyon: "Ki jan ou santi pèsonèlman sou lefèt ke anpil nan sa ou fè yo itilize pa lòt Clouds?" Nou pa pral nonmen espesifik, men anpil pwojè ki te fè nan Yandex.Cloud yo itilize nan nwaj lòt moun.

Sa a se fre. Premyèman, li se yon siy ke nou te fè yon bagay byen. Epi li grate ego a. Epi nou gen plis konfyans ke nou te pran bon desizyon an. Nan lòt men an, sa a se espwa ke nan lavni an sa a pral pote nou nouvo lide, nouvo demann soti nan itilizatè twazyèm pati. Pifò pwoblèm sou GitHub yo kreye pa administratè sistèm endividyèl, DBA endividyèl, achitèk endividyèl, enjenyè endividyèl, men pafwa moun ki gen eksperyans sistematik vin di ke nan 30% nan sèten ka nou gen pwoblèm sa a epi ann reflechi sou ki jan yo rezoud li. Sa a se sa nou ap chèche pou pi devan. Nou espere pataje eksperyans ak lòt platfòm nwaj yo.

Ou te pale anpil sou maraton an. Mwen konnen ou te kouri yon maraton nan Moskou. Kòm yon rezilta? Rpase mesye yo soti nan PostgreSQL?

Non, Oleg Bartunov kouri trè vit. Li te fini yon èdtan devan m '. An jeneral, mwen kontan ak ki jan lwen mwen te rive. Pou mwen, jis fini se te yon reyalizasyon. An jeneral, li etone ke gen anpil kourè nan kominote postgres la. Li sanble m 'ke gen yon kalite relasyon ant espò aerobic ak dezi a pou pwogramasyon sistèm.

Èske w ap di pa gen kourè nan ClickHouse?

Mwen konnen pou asire ke yo la. ClickHouse se yon baz done tou. By wout la, Oleg ap ekri m 'kounye a: "Èske nou ale pou yon kouri apre rapò a?" Sa a se yon gwo lide.

Yon lòt kesyon ki soti nan emisyon Nikita a: "Poukisa ou te ranje ensèk la nan Greenplum tèt ou epi ou pa bay li bay jinyò?" Se vre, li pa trè klè ki sa ensèk la se ak nan ki sèvis, men li pwobableman vle di youn nan ou te pale sou.

Wi, nan prensip, li te kapab bay yon moun. Li te jis kòd la ke mwen jis chanje. Epi li te natirèl kontinye fè li touswit. An prensip, lide pataje ekspètiz ak ekip la se yon bon lide. Nou pral definitivman pataje travay Greenplum pami tout manm divizyon nou an.

Depi nap pale de juniors, men yon kesyon. Moun nan deside kreye premye komite nan Postgres. Ki sa li bezwen fè pou fè premye komèt la?

Sa a se yon kesyon enteresan: "Ki kote yo kòmanse?" Anjeneral li difisil pou kòmanse ak yon bagay nan nwayo a. Nan Postgres, pou egzanp, gen yon lis fè. Men, an reyalite, sa a se yon fèy nan sa yo te eseye fè, men yo pa t reyisi. Sa yo se bagay konplike. Epi anjeneral ou ka jwenn kèk sèvis piblik nan ekosistèm nan, kèk ekstansyon ki ka amelyore, ki atire mwens atansyon nan men devlopè nwayo. Epi, kòmsadwa, gen plis pwen pou kwasans la. Nan pwogram Google Summer of Code, chak ane kominote postgres la prezante anpil sijè diferan ki ka adrese. Ane sa a nou te gen, mwen panse, twa elèv. Youn menm te ekri nan WAL-G sou sijè ki enpòtan pou Yandex. Nan Greenplum, tout bagay se pi senp pase nan kominote Postgres la, paske entru Greenplum trete demann rale trè byen epi yo kòmanse revize touswit. Voye yon patch bay Postgres se yon kesyon de mwa, men Greenplum ap vini nan yon jou epi wè sa ou te fè. Yon lòt bagay se ke Greenplum bezwen rezoud pwoblèm aktyèl yo. Greenplum pa lajman itilize, kidonk jwenn pwoblèm ou a se byen difisil. E premyerman, nou bezwen rezourd problenm, byensir.

Sous: www.habr.com