Madivelopa ambiri ayenera kudziwa izi za database

Zindikirani. transl.: Jaana Dogan ndi injiniya wodziwa zambiri ku Google yemwe pakali pano akugwira ntchito yoyang'anira ntchito zopanga kampani zolembedwa mu Go. M'nkhaniyi, yomwe idatchuka kwambiri pakati pa olankhula Chingerezi, adasonkhanitsa mfundo za 17 zofunikira zaukadaulo zokhudzana ndi ma DBMS (ndipo nthawi zina amagawira machitidwe onse) zomwe ndizofunikira kuziganizira kwa opanga mapulogalamu akuluakulu / ofunikira.

Madivelopa ambiri ayenera kudziwa izi za database

Makina ambiri apakompyuta amatsata zomwe zikuchitika ndipo, motero, amafunikira njira yosungiramo deta. Ndinapeza chidziwitso chokhudza nkhokwe kwa nthawi yayitali, ndikupanga zolakwika zomwe zidapangitsa kuti deta iwonongeke komanso kuzimitsa. M'makina omwe amagwiritsa ntchito zidziwitso zambiri, ma database ali pakatikati pa kamangidwe kadongosolo ndipo amakhala ngati chinthu chofunikira pakusankha njira yabwino kwambiri. Ngakhale kuti chidwi chimaperekedwa ku ntchito ya nkhokwe, mavuto omwe opanga mapulogalamu amayesa kuyembekezera nthawi zambiri amakhala nsonga chabe. M'nkhani zotsatizanazi, ndikugawana malingaliro omwe angakhale othandiza kwa omanga omwe sali apadera pa ntchitoyi.

  1. Ndinu mwayi ngati 99,999% ya nthawi yomwe maukonde sakuyambitsa mavuto.
  2. ACID imatanthauza zinthu zosiyanasiyana.
  3. Dongosolo lililonse lili ndi njira zake zowonetsetsa kusasinthika komanso kudzipatula.
  4. Kutsekereza kwachiyembekezo kumabwera kudzapulumutsa pamene kuli kovuta kusunga momwe mwachizolowezi.
  5. Palinso zolakwika zina kupatula zowerengera zonyansa komanso kutayika kwa data.
  6. Ma database ndi wogwiritsa ntchito samagwirizana nthawi zonse pazochitika.
  7. Sharding-level-level sharding ikhoza kusunthidwa kunja kwa pulogalamuyo.
  8. Autoincrementing kungakhale koopsa.
  9. Deta yakale ikhoza kukhala yothandiza komanso yosafunikira kutsekedwa.
  10. Zosokoneza ndizofanana ndi magwero a nthawi iliyonse.
  11. Kuchedwa kuli ndi matanthauzo ambiri.
  12. Zofunikira zogwirira ntchito ziyenera kuwunikidwa pazochitika zinazake.
  13. Zogulitsa zomwe zili mu zisa zitha kukhala zowopsa.
  14. Zochita siziyenera kumangirizidwa kudziko lofunsira.
  15. Okonza mafunso angakuuzeni zambiri za database.
  16. Kusamuka pa intaneti ndikovuta, koma kotheka.
  17. Kuwonjezeka kwakukulu kwa database kumaphatikizapo kuwonjezeka kwa kusadziŵika bwino.

Ndikufuna kuthokoza Emmanuel Odeke, Rein Henrichs ndi ena chifukwa cha ndemanga zawo pa mtundu wakale wa nkhaniyi.

Ndinu mwayi ngati 99,999% ya nthawi yomwe maukonde sakuyambitsa mavuto.

Funso limakhalabe la momwe matekinoloje amakono odalirika alili komanso kangati machitidwe amatsika chifukwa cha kulephera kwa maukonde. Zambiri pankhaniyi ndizosowa ndipo kafukufuku nthawi zambiri amayendetsedwa ndi mabungwe akuluakulu omwe ali ndi maukonde apadera, zida ndi ogwira ntchito.

Ndi kuchuluka kwa kupezeka kwa 99,999% kwa Spanner (database ya Google padziko lonse lapansi), Google imanena kuti 7,6% mavuto okhudzana ndi netiweki. Nthawi yomweyo, kampaniyo imatcha maukonde ake apadera "mzati waukulu" wopezeka kwambiri. Phunzirani Bailis ndi Kingsbury, yomwe idachitika mu 2014, ikutsutsa imodzi mwa "malingaliro olakwika okhudza kugawa makompyuta", yomwe Peter Deutsch adapanga mu 1994. Kodi maukondewa ndi odalirika?

Kafukufuku wokwanira kunja kwa makampani akuluakulu, opangidwa pa intaneti ambiri, kulibe. Palibenso deta yokwanira kuchokera kwa osewera akuluakulu ponena za kuchuluka kwa mavuto amakasitomala awo okhudzana ndi netiweki. Tikudziwa bwino za kuzimitsidwa kwapaintaneti ya opereka mtambo akuluakulu omwe amatha kutsitsa gawo lonse la intaneti kwa maola angapo chifukwa ndizochitika zapamwamba zomwe zimakhudza anthu ambiri ndi makampani. Kuzimitsa kwa ma netiweki kumatha kuyambitsa mavuto nthawi zambiri, ngakhale sizinthu zonsezo zomwe zili pachiwonetsero. Makasitomala a mautumiki amtambo nawonso sakudziwa chilichonse chokhudza zomwe zimayambitsa mavuto. Ngati pali kulephera, ndikosatheka kunena kuti chifukwa cha vuto la netiweki kumbali ya wothandizira. Kwa iwo, mautumiki a chipani chachitatu ndi mabokosi akuda. Sizingatheke kuwunika momwe zingakhudzire popanda kukhala wothandizira wamkulu.

Poganizira zomwe osewera akuluakulu amafotokoza za machitidwe awo, ndibwino kunena kuti muli ndi mwayi ngati zovuta zapaintaneti zimangotengera zochepa chabe zazovuta zomwe zingachitike. Kuyankhulana kwa ma netiweki kumavutitsidwabe ndi zinthu wamba monga kulephera kwa ma hardware, kusintha kwa topology, kusintha kwa kachitidwe ka kayendetsedwe ka kayendetsedwe ka kayendetsedwe ka kayendetsedwe ka kayendetsedwe kake, ndi kuzimitsa kwa magetsi. Posachedwapa, ndinadabwa kumva kuti mndandanda wa zovuta zomwe zingatheke zinawonjezeredwa kuluma shark (inde, mwamva bwino).

ACID imatanthauza zinthu zosiyanasiyana

ACID imayimira Atomicity, Consistency, Isolation, Reliability. Zochita izi zimapangidwira kuti zitsimikizire kutsimikizika kwawo pakagwa zolephera, zolakwika, kulephera kwa hardware, ndi zina zotero. Popanda ACID kapena njira zofananira, zingakhale zovuta kwa opanga mapulogalamu kuti asiyanitse zomwe ali ndi udindo ndi zomwe database imayang'anira. Ma database ambiri ogwirizana amayesa kukhala ogwirizana ndi ACID, koma njira zatsopano monga NoSQL zapangitsa kuti pakhale ma database ambiri opanda ACID chifukwa ndi okwera mtengo kukhazikitsa.

Nditangolowa mumakampani, mtsogoleri wathu waukadaulo adalankhula za momwe lingaliro la ACID linalili lofunikira. Kunena zowona, ACID imawonedwa ngati kufotokozera movutikira m'malo motsatira muyezo wokhazikika. Masiku ano ndimawona kuti ndizothandiza kwambiri chifukwa zimadzutsa gulu linalake lazovuta (ndipo limapereka mayankho angapo zotheka).

Osati DBMS iliyonse yomwe imagwirizana ndi ACID; Nthawi yomweyo, kukhazikitsa kwa database komwe kumathandizira ACID kumamvetsetsa zofunikira mosiyanasiyana. Chimodzi mwazifukwa zomwe kukhazikitsidwa kwa ACID kumakhala kocheperako ndi chifukwa cha malonda ambiri omwe amayenera kupangidwa kuti akwaniritse zofunikira za ACID. Opanga amatha kuwonetsa nkhokwe zawo ngati zovomerezeka ndi ACID, koma kutanthauzira kwamilandu yam'mphepete kumatha kusiyanasiyana, monga momwe angachitire ndi zochitika "zosatheka". Pang'ono ndi pang'ono, omanga atha kumvetsetsa bwino kwambiri zovuta za kukhazikitsa koyambira kuti amvetsetse bwino zamakhalidwe awo apadera komanso kupanga malonda.

Mtsutso woti MongoDB ikugwirizana ndi zofunikira za ACID ukupitilirabe ngakhale mtundu wa 4 utatulutsidwa. MongoDB sinathandizidwe kwa nthawi yayitali kudula mitengo, ngakhale kuti mwachisawawa deta idaperekedwa ku disk osapitilira kamodzi pamasekondi 60 aliwonse. Tangoganizirani izi: zolemba zolembera zolemba ziwiri (w1 ndi w2). MongoDB imasunga bwino w1, koma w2 imatayika chifukwa chakulephera kwa hardware.

Madivelopa ambiri ayenera kudziwa izi za database
Chithunzi chosonyeza zochitikazo. MongoDB imawonongeka isanalembe deta ku disk

Kutumiza ku disk ndi njira yokwera mtengo. Popewa kuchita pafupipafupi, opanga amawongolera magwiridwe antchito potengera kudalirika. MongoDB pakadali pano imathandizira kudula mitengo, koma zolemba zonyansa zimathabe kukhudza kukhulupirika kwa data popeza mitengo imatengedwa 100ms iliyonse mwachisawawa. Ndiko kuti, zochitika zofananira zikadali zotheka kwa zipika ndi zosintha zomwe zimaperekedwa mwa iwo, ngakhale kuti chiopsezo ndi chochepa kwambiri.

Dongosolo lililonse lili ndi njira zake zokhazikika komanso zodzipatula

Pazofunikira za ACID, kusasinthika ndi kudzipatula kumadzitamandira kuchuluka kwakukulu kwa machitidwe osiyanasiyana chifukwa kuchuluka kwa malonda ndikokulirakulira. Ziyenera kunenedwa kuti kusasinthasintha ndi kudzipatula ndi ntchito zodula kwambiri. Amafuna kugwirizanitsa ndi kuonjezera mpikisano wa kusasinthasintha kwa deta. Kuvuta kwa vutoli kumawonjezeka kwambiri pamene kuli kofunikira kukweza deta mozungulira m'malo osiyanasiyana a deta (makamaka ngati ali m'madera osiyanasiyana). Kukwaniritsa kukhazikika kwapamwamba kumakhala kovuta kwambiri, chifukwa kumachepetsanso kupezeka ndikuwonjezera magawo a maukonde. Kuti mumve zambiri za izi, ndikukulangizani kuti muloze Chithunzi cha CAP. Ndikoyeneranso kudziwa kuti mapulogalamu amatha kuthana ndi kusagwirizana pang'ono, ndipo opanga mapulogalamu amatha kumvetsetsa zovuta za vutoli mokwanira kuti agwiritse ntchito malingaliro owonjezera pakugwiritsa ntchito kuthana ndi kusagwirizana popanda kudalira kwambiri nkhokwe kuti athane nalo.

Ma DBMS nthawi zambiri amapereka magawo osiyanasiyana odzipatula. Opanga mapulogalamu amatha kusankha yothandiza kwambiri potengera zomwe amakonda. Kudzipatula kwapang'onopang'ono kumapangitsa kuti liwiro liwonjezeke, komanso kumawonjezera chiopsezo cha liwiro la data. Kusungunula kwakukulu kumachepetsa izi, koma kumachepetsa ntchito ndipo kungayambitse mpikisano, zomwe zingayambitse mabuleki oterowo m'munsi kuti zolephera zimayamba.

Madivelopa ambiri ayenera kudziwa izi za database
Onaninso zamitundu yomwe ilipo komanso maubwenzi pakati pawo

Muyezo wa SQL umatanthauzira magawo anayi okha odzipatula, ngakhale mumalingaliro ndi machitidwe pali ena ambiri. Jepson.io imapereka chithunzithunzi chabwino kwambiri chamitundu yomwe ilipo kale. Mwachitsanzo, Google Spanner imatsimikizira kusanja kwakunja ndi kuyanjanitsa koloko, ndipo ngakhale iyi ndi gawo lodzipatula lokhazikika, silimatanthauziridwa m'magawo odzipatula.

Muyezo wa SQL umatchula magawo awa odzipatula:

  • Zosasinthika (zolimba kwambiri komanso zodula): Kuchita kosalekeza kumakhala ndi zotsatira zofanana ndi zochitika zina zotsatizana. Kuchita motsatizana kumatanthauza kuti ntchito iliyonse yotsatira imayamba pokhapokha yapitayo ikamalizidwa. Kuyenera kudziŵika kuti mlingo Zosasinthika nthawi zambiri akugwiritsidwa ntchito monga otchedwa snapshot kudzipatula (mwachitsanzo, mu Oracle) chifukwa cha kusiyana kumasulira, ngakhale chithunzithunzi kudzipatula palokha sikuyimiridwa mu SQL muyezo.
  • Zowerengedwa mobwerezabwereza: Zolemba zosagwirizana ndi zomwe zikuchitika panopa zilipo, koma kusintha kopangidwa ndi zochitika zina (monga mizere yatsopano) zosawoneka.
  • Werengani modzipereka: Zosavomerezeka sizipezeka pazogulitsa. Pachifukwa ichi, zochitika zimatha kuwona deta yodzipereka, ndipo kuwerenga kwaphantom kumachitika. Ngati malonda ayika ndi kupanga mizere yatsopano, zomwe zikuchitikazi zitha kuziwona zikafunsidwa.
  • Werengani mosadzipereka (mulingo wocheperako komanso wokwera mtengo): Kuwerenga konyansa kumaloledwa, zochitika zimatha kuwona kusintha kosasinthika kopangidwa ndi zochitika zina. M'malo mwake, mulingo uwu utha kukhala wothandiza pazongoyerekeza, monga mafunso COUNT(*) patebulo.

mlingo Zosasinthika amachepetsa chiopsezo cha mitundu ya data, pomwe amakhala okwera mtengo kwambiri kukhazikitsa ndikupangitsa kuti pakhale mpikisano wokwera kwambiri pamakina. Miyezo ina yodzipatula ndiyosavuta kukhazikitsa, koma onjezerani mwayi wamitundu yama data. Ma DBMS ena amakulolani kuti muyike mulingo wodzipatula, ena amakhala ndi zokonda zamphamvu ndipo si magulu onse omwe amathandizidwa.

Thandizo la magawo odzipatula nthawi zambiri limalengezedwa mu DBMS yopatsidwa, koma kufufuza mosamala za khalidwe lake kungasonyeze zomwe zikuchitikadi.

Madivelopa ambiri ayenera kudziwa izi za database
Kuwunikidwanso kwa concurrency anomalies pamilingo yodzipatula yosiyana ya ma DBMS osiyanasiyana

Martin Kleppmann mu ntchito yake malimidwe Poyerekeza milingo yodzipatula yosiyana, imakamba za zosokoneza za concurrency, komanso ngati nkhokweyo imatha kumamatira pamlingo wina wodzipatula. Kafukufuku wa Kleppmann akuwonetsa momwe opanga ma database osiyanasiyana amaganizira za kudzipatula.

Kutsekereza kwachiyembekezo kumabwera kudzapulumutsa pamene kuli kovuta kusunga momwe mwachizolowezi.

Kuletsa kumatha kukhala okwera mtengo kwambiri, osati chifukwa kumawonjezera mpikisano mu database, komanso chifukwa kumafunika ma seva ogwiritsira ntchito kuti azilumikizana nthawi zonse ndi database. Kugawanika kwa ma netiweki kumatha kukulitsa zochitika zotsekera zokhazokha ndikupangitsa kuti pakhale zotsekeka zomwe zimakhala zovuta kuzizindikira ndikuzithetsa. Ngati kutseka kokha sikuli koyenera, kutseka mwachiyembekezo kumathandiza.

Kuyembekezera loko ndi njira yomwe powerenga chingwe, imaganizira mtundu wake, checksum, kapena nthawi yomaliza kusinthidwa. Izi zimakupatsani mwayi kuti muwonetsetse kuti palibe kusintha kwa atomiki musanasinthe cholowa:

UPDATE products
SET name = 'Telegraph receiver', version = 2
WHERE id = 1 AND version = 1

Pankhaniyi, kusintha tebulo products sichidzachitika ngati ntchito ina idasintha kale mzerewu. Ngati palibe ntchito zina zomwe zidachitika pamzerewu, kusintha kwa mzere umodzi kudzachitika ndipo titha kunena kuti zosinthazo zidapambana.

Palinso zolakwika zina kupatula zowerengera zonyansa komanso kutayika kwa data

Pankhani ya kusasinthika kwa data, kuyang'ana kwambiri ndi kuthekera kwa mikhalidwe yamtundu yomwe ingayambitse kuwerengera konyansa ndi kutayika kwa data. Komabe, zosokoneza za data sizimatha pamenepo.

Chitsanzo chimodzi cha zolakwika zotere ndi kujambula kupotoza (lembani skews). Zopotoka zimakhala zovuta kuzizindikira chifukwa nthawi zambiri sizimafufuzidwa mwachangu. Sali chifukwa cha kuwerenga konyansa kapena kutayika kwa data, koma kuphwanya zopinga zomveka zomwe zimayikidwa pa data.

Mwachitsanzo, tiyeni tilingalire ntchito yowunikira yomwe imafuna kuti wogwiritsa ntchito aziyimbira foni nthawi zonse:

BEGIN tx1;                      BEGIN tx2;
SELECT COUNT(*)
FROM operators
WHERE oncall = true;
0                               SELECT COUNT(*)
                                FROM operators
                                WHERE oncall = TRUE;
                                0
UPDATE operators                UPDATE operators
SET oncall = TRUE               SET oncall = TRUE
WHERE userId = 4;               WHERE userId = 2;
COMMIT tx1;                     COMMIT tx2;

M'mikhalidwe yomwe ili pamwambapa, chivundi chambiri chidzachitika ngati zonse ziwiri zachitika bwino. Ngakhale kuti panalibe zowerengera zonyansa kapena kutayika kwa deta, kukhulupirika kwa deta kunasokonekera: tsopano anthu awiri amaganiziridwa pa-call pa nthawi imodzi.

Kudzipatula kotsatizana, kapangidwe ka schema, kapena zopinga za database zitha kuthandizira kuthetsa ziphuphu. Madivelopa akuyenera kuzindikira zovuta zotere panthawi yachitukuko kuti apewe kupanga. Nthawi yomweyo, zosokoneza zojambulitsa zimakhala zovuta kwambiri kuziyang'ana mu code base. Makamaka m'machitidwe akuluakulu, pamene magulu osiyanasiyana a chitukuko ali ndi udindo wogwiritsa ntchito ntchito zochokera kumatebulo omwewo ndipo sagwirizana ndi zenizeni za kupeza deta.

Malo osungirako zinthu zakale ndi wogwiritsa ntchito samagwirizana nthawi zonse pazomwe angachite

Chimodzi mwazinthu zazikulu za database ndi chitsimikizo cha dongosolo la kuphedwa, koma dongosololi palokha silingakhale lowonekera kwa wopanga mapulogalamu. Madatabase amachita zinthu motsatira dongosolo lomwe alandilidwa, osati mu dongosolo lomwe olemba mapulogalamu akufuna. Dongosolo la zochitika ndizovuta kulosera, makamaka pamakina odzaza kwambiri.

Pachitukuko, makamaka pogwira ntchito ndi malaibulale osatsekereza, kalembedwe kocheperako komanso kuwerengeka kochepa kungapangitse ogwiritsa ntchito kukhulupirira kuti zochitika zimachitidwa motsatizana, pomwe atha kufika mumsungidwe mwanjira iliyonse.

Poyang'ana koyamba, mu pulogalamu yomwe ili pansipa, T1 ndi T2 zimatchedwa sequentially, koma ngati izi sizikulepheretsa ndipo nthawi yomweyo bweretsani zotsatira mu mawonekedwe. lonjezo, ndiye kuti kuyitanitsa kudzadziwika ndi nthawi yomwe adalowa mu database:

result1 = T1() // zotsatira zenizeni ndi malonjezo
zotsatira2 = T2()

Ngati atomicity ikufunika (ndiko kuti, ntchito zonse ziyenera kutsirizidwa kapena kuchotsedwa) ndi nkhani zotsatizana, ndiye kuti ntchito T1 ndi T2 iyenera kuchitidwa panthawi imodzi.

Sharding-level-level sharding ikhoza kusunthidwa kunja kwa pulogalamuyo

Sharding ndi njira yogawanitsa database mozungulira. Ma database ena amatha kugawanitsa deta mozungulira, pomwe ena sangathe, kapena samadziwa bwino. Pamene omanga deta/madivelopa amatha kulosera ndendende momwe deta idzafikire, amatha kupanga magawo opingasa m'malo ogwiritsira ntchito m'malo mopereka ntchitoyi ku database. Njirayi imatchedwa "application-level sharding" (Sharding-level application).

Tsoka ilo, dzinali nthawi zambiri limapanga malingaliro olakwika akuti sharding amakhala mu ntchito zofunsira. M'malo mwake, imatha kukhazikitsidwa ngati gawo losiyana kutsogolo kwa database. Kutengera kukula kwa data ndi kubwereza kwa schema, zofunikira za sharding zitha kukhala zovuta. Njira zina zitha kupindula ndikutha kubwereza popanda kuyikanso ma seva ogwiritsira ntchito.

Madivelopa ambiri ayenera kudziwa izi za database
Chitsanzo cha zomangamanga zomwe ma seva ogwiritsira ntchito amasiyanitsidwa ndi ntchito ya sharding

Kusuntha sharding mu ntchito yosiyana kumakulitsa luso logwiritsa ntchito njira zosiyanasiyana za sharding popanda kufunikira kuyikanso mapulogalamu. Vitess ndi chitsanzo cha sharding dongosolo chotero pa mlingo ntchito. Vitess imapereka sharding yopingasa ya MySQL ndipo imalola makasitomala kuti alumikizane nayo kudzera mu protocol ya MySQL. Dongosololi limagawaniza deta m'malo osiyanasiyana a MySQL omwe sadziwa chilichonse chokhudza wina ndi mnzake.

Autoincrementing kungakhale koopsa

AUTOINCREMENT ndi njira yodziwika bwino yopangira makiyi oyambira. Nthawi zambiri pamakhala zochitika pomwe ma database amagwiritsidwa ntchito ngati ma ID generator, ndipo nkhokweyo imakhala ndi matebulo opangidwa kuti apange zozindikiritsa. Pali zifukwa zingapo zomwe kupanga makiyi oyambira pogwiritsa ntchito auto-incrementing sikuli bwino:

  • Mu database yogawidwa, auto-incrementing ndi vuto lalikulu. Kuti mupange ID, loko yapadziko lonse ikufunika. M'malo mwake, mutha kupanga UUID: izi sizifunikira kuyanjana pakati pa ma node osiyanasiyana. Kuchulukitsa ndi zotsekera kungayambitse mikangano ndikuchepetsa kwambiri magwiridwe antchito pamikhalidwe yogawidwa. Ma DBMS ena (mwachitsanzo, MySQL) angafunike kusinthidwa mwapadera komanso kusamala kwambiri kuti mukonzekere bwino kubwereza kwa master-master. Ndipo ndizosavuta kulakwitsa pokonzekera, zomwe zingayambitse kulephera kujambula.
  • Ma database ena ali ndi ma algorithms ogawa kutengera makiyi oyambira. Ma ID otsatizana amatha kubweretsa malo otentha osayembekezereka ndikuwonjezera katundu pamagawo ena pomwe ena amakhala opanda ntchito.
  • Chinsinsi choyambirira ndi njira yachangu kwambiri yopezera mizere mu database. Ndi njira zabwino zodziwira ma rekodi, ma ID otsatizana amatha kusintha gawo lofunikira kwambiri m'matebulo kukhala gawo lopanda phindu lodzaza ndi zinthu zopanda tanthauzo. Chifukwa chake, ngati kuli kotheka, chonde sankhani kiyi yapadera yapadziko lonse komanso yachilengedwe (monga dzina lolowera).

Musanasankhe njira, ganizirani momwe ma ID odzipangira okha ndi ma UUID pa indexing, partitioning, and sharding.

Deta yakale ikhoza kukhala yothandiza komanso yosafuna kutseka

Multiversion Concurrency Control (MVCC) imagwiritsa ntchito zofunikira zambiri zomwe zidakambidwa mwachidule pamwambapa. Ma database ena (mwachitsanzo, Postgres, Spanner) amagwiritsa ntchito MVCC "kudyetsa" zochitika ndi zithunzithunzi-mitundu yakale ya nkhokwe. Zochita za Snapshot zitha kusinthidwanso kuti zitsimikizire kusasinthika. Mukamawerenga chithunzi chakale, deta yakale imawerengedwa.

Kuwerenga zachikale pang'ono kungakhale kothandiza, mwachitsanzo, popanga analytics kuchokera ku datayo kapena powerengera pafupifupi ma aggregate values.

Ubwino woyamba wogwirira ntchito ndi zomwe zasungidwa kale ndi latency yochepa (makamaka ngati nkhokwe ikugawidwa m'malo osiyanasiyana). Chachiwiri ndi chakuti zowerengera-zokha sizimatseka. Uwu ndi mwayi waukulu kwa mapulogalamu omwe amawerenga kwambiri, bola atha kuthana ndi data yakale.

Madivelopa ambiri ayenera kudziwa izi za database
Seva ya pulogalamuyo imawerenga zomwe zalembedwa m'deralo zomwe zatha masekondi 5, ngakhale mtundu waposachedwa ukupezeka kutsidya lina la Pacific Ocean.

Ma DBMS amachotsa matembenuzidwe akale ndipo, nthawi zina, amakulolani kuchita izi mukapempha. Mwachitsanzo, Postgres imalola ogwiritsa ntchito kuchita VACUUM pa pempho, komanso nthawi amachita ntchito imeneyi basi. Spanner amayendetsa zotaya zinyalala kuti achotse zithunzi zakale kuposa ola limodzi.

Nthawi iliyonse magwero amatha kupotozedwa

Chinsinsi chosungidwa bwino mu sayansi yamakompyuta ndikuti ma API onse anthawi amanama. Ndipotu makina athu sadziwa nthawi yeniyeni. Makompyuta amakhala ndi makristasi a quartz omwe amapanga ma vibrate omwe amagwiritsidwa ntchito kusunga nthawi. Komabe, sizolondola mokwanira ndipo zitha kukhala patsogolo / kutsalira nthawi yeniyeni. Kusintha kumatha kufika masekondi 20 patsiku. Chifukwa chake, nthawi pamakompyuta athu iyenera kulumikizidwa nthawi ndi nthawi ndi intaneti.

Ma seva a NTP amagwiritsidwa ntchito polumikizana, koma njira yolumikizira yokha imatha kuchedwa. Ngakhale kulunzanitsa ndi seva ya NTP pamalo amodzi a data kumatenga nthawi. Zikuwonekeratu kuti kugwira ntchito ndi seva yapagulu ya NTP kungayambitse kusokonekera kwakukulu.

Mawotchi a atomiki ndi GPS anzawo ndi abwino kudziwa nthawi yomwe ilipo, koma ndi okwera mtengo ndipo amafunikira kukhazikitsidwa kovutirapo, kotero sangathe kuyikika pagalimoto iliyonse. Pachifukwa ichi, malo opangira data amagwiritsa ntchito njira yamagulu. Mawotchi a atomiki ndi/kapena GPS amawonetsa nthawi yeniyeni, pambuyo pake amawulutsidwa kumakina ena kudzera pa maseva apachiwiri. Izi zikutanthauza kuti makina aliwonse amakumana ndi kuchotsera kwina kuchokera nthawi yeniyeni.

Zinthu zimakulitsidwa chifukwa chakuti mapulogalamu ndi nkhokwe nthawi zambiri zimakhala pamakina osiyanasiyana (ngati sizili m'malo osiyanasiyana). Chifukwa chake, nthawiyo idzasiyana osati pa ma DB okha omwe amagawidwa pamakina osiyanasiyana. Zidzakhalanso zosiyana pa seva yogwiritsira ntchito.

Google TrueTime imatenga njira yosiyana kwambiri. Anthu ambiri amakhulupirira kuti kupita patsogolo kwa Google kumbali iyi kumafotokozedwa ndi kusintha kwa banal ku mawotchi a atomiki ndi GPS, koma ichi ndi gawo limodzi la chithunzi chachikulu. Umu ndi momwe TrueTime imagwirira ntchito:

  • TrueTime imagwiritsa ntchito magwero awiri osiyana: GPS ndi mawotchi a atomiki. Mawotchiwa ali ndi mitundu yolephera yolumikizana. [Onani tsamba 5 kuti mumve zambiri apa - pafupifupi. transl.), kotero kugwiritsa ntchito kwawo pamodzi kumawonjezera kudalirika.
  • TrueTime ili ndi API yachilendo. Imabwezeretsa nthawi ngati nthawi yokhala ndi cholakwika chamiyeso ndi kusatsimikizika komwe kumapangidwira. Mphindi yeniyeni mu nthawi ili kwinakwake pakati pa malire apamwamba ndi apansi a nthawiyi. Spanner, nkhokwe ya Google yogawa, imangodikirira mpaka zili bwino kunena kuti nthawi yatha. Njirayi imayambitsa latency mu dongosolo, makamaka ngati kusatsimikizika kwa ambuye kuli kwakukulu, koma kumatsimikizira kulondola ngakhale kugawidwa padziko lonse lapansi.

Madivelopa ambiri ayenera kudziwa izi za database
Zigawo za Spanner zimagwiritsa ntchito TrueTime, kumene TT.now () imabweretsanso nthawi, kotero Spanner amangogona mpaka pamene angakhale otsimikiza kuti nthawi yamakono yadutsa mfundo inayake.

Kuchepetsa kulondola pakuzindikira nthawi yamakono kumatanthauza kuwonjezeka kwa nthawi ya Spanner ndi kuchepa kwa ntchito. Ichi ndichifukwa chake ndikofunikira kusunga zolondola kwambiri ngakhale ndizosatheka kupeza wotchi yolondola kwambiri.

Kuchedwa kuli ndi matanthauzo ambiri

Mukafunsa akatswiri khumi ndi awiri za kuchedwa, mwina mudzapeza mayankho osiyanasiyana. Mu DBMS latency nthawi zambiri imatchedwa "database latency" ndipo imakhala yosiyana ndi zomwe kasitomala amawona. Chowonadi ndi chakuti kasitomala amawona kuchuluka kwa kuchedwa kwa netiweki komanso kuchedwa kwa database. Kutha kudzipatula mtundu wa latency ndikofunikira pakuwongolera zovuta zomwe zikukula. Mukamasonkhanitsa ndi kuwonetsa ma metric, nthawi zonse yesetsani kuyang'ana mitundu yonse iwiri.

Zofunikira zogwirira ntchito ziyenera kuwunikidwa pazochitika zinazake

Nthawi zina machitidwe a DBMS ndi zolephera zake zimatchulidwa polemba / kuwerenga kuwerenga ndi latency. Izi zimapereka chithunzithunzi cha magawo ofunikira, koma powunika momwe DBMS yatsopano ikugwirira ntchito, njira yowonjezereka ndiyo kuyesa padera ntchito zovuta (pafunso lililonse ndi / kapena kugulitsa). Zitsanzo:

  • Lembani machulukitsidwe ndi kuchedwa pamene mukulowetsa mzere watsopano mu tebulo X (ndi mizere 50 miliyoni) ndi zolepheretsa zodziwika ndi zomangirira mizere mu matebulo ogwirizana.
  • Kuchedwerako kuwonetsa mabwenzi a mabwenzi a munthu wina wogwiritsa ntchito pomwe chiŵerengero cha mabwenzi chili 500.
  • Kuchedwa pakubweza zolemba zapamwamba 100 kuchokera m'mbiri ya wogwiritsa ntchito pomwe wogwiritsa ntchito atsatira ena 500 ogwiritsa ntchito X pa ola limodzi.

Kuwunika ndi kuyesa kungaphatikizepo milandu yovuta mpaka mutakhala ndi chidaliro kuti nkhokwe ikukwaniritsa zofunikira zantchito. Lamulo lofananira la chala chachikulu limaganiziranso kusokonekera kumeneku posonkhanitsa ma metric a latency ndikuzindikira ma SLO.

Chenjerani ndi makhadi okwera kwambiri potolera ma metric pa ntchito iliyonse. Gwiritsani ntchito zipika, zosonkhanitsira zochitika, kapena kutsatiridwa kogawa kuti mupeze data yothetsa vuto lamphamvu kwambiri. M'nkhani yakuti "Mukufuna Kuthetsa Latency?» Mutha kudziwa njira zochepetsera zolakwika.

Zogulitsa zomwe zili mu zisa zitha kukhala zowopsa

Sikuti DBMS iliyonse imathandizira zochitika zomwe zili m'chisa, koma zikatero, zochitika zoterezi zimatha kubweretsa zolakwika zosayembekezereka zomwe nthawi zonse zimakhala zosavuta kuzizindikira (ndiko kuti, ziyenera kuonekeratu kuti pali mtundu wina wa zolakwika).

Mutha kupewa kugwiritsa ntchito zomwe zasungidwa pogwiritsa ntchito malaibulale amakasitomala omwe amatha kuzindikira ndi kuwalambalala. Ngati ntchito zomwe zasungidwa sizingasiyidwe, samalani kwambiri pakukhazikitsa kwawo kuti mupewe zochitika zosayembekezereka pomwe ntchito zomwe zatsirizidwa zimathetsedwa mwangozi chifukwa cha zosungidwa.

Kuphatikizira zochitika m'magawo osiyanasiyana kumatha kubweretsa zochitika zosayembekezereka, ndipo kuchokera pamawonekedwe owerengera, zitha kukhala zovuta kumvetsetsa zolinga za wolemba. Onani pulogalamu iyi:

with newTransaction():
   Accounts.create("609-543-222")
   with newTransaction():
       Accounts.create("775-988-322")
       throw Rollback();

Kodi zomwe zili pamwambazi zikhala zotani? Kodi ibweza zonse ziwiri, kapena zamkati zokha? Kodi chimachitika ndi chiyani ngati tidalira magulu angapo a malaibulale omwe amaphatikiza kupanga zogulitsa kwa ife? Kodi titha kuzindikira ndikuwongolera milandu yotere?

Ingoganizirani zosanjikiza za data zomwe zimakhala ndi machitidwe angapo (mwachitsanzo. newAccount) yakhazikitsidwa kale muzochita zake. Kodi chimachitika ndi chiyani ngati muwayendetsa ngati gawo lamabizinesi apamwamba kwambiri omwe amayenda mkati mwazochita zake? Kodi kudzipatula ndi kusasinthasintha kukanakhala chiyani pankhaniyi?

function newAccount(id string) {
  with newTransaction():
      Accounts.create(id)
}

M'malo mofufuza mayankho a mafunso osatha oterowo, ndi bwino kupeŵa kugulitsana zisa. Kupatula apo, wosanjikiza wanu wa data amatha kuchita ntchito zapamwamba kwambiri popanda kupanga zake zokha. Kuphatikiza apo, lingaliro la bizinesi palokha limatha kuyambitsa bizinesi, kuchitapo kanthu, kuchita kapena kuletsa malondawo.

function newAccount(id string) {
   Accounts.create(id)
}
// In main application:
with newTransaction():
   // Read some data from database for configuration.
   // Generate an ID from the ID service.
   Accounts.create(id)
   Uploads.create(id) // create upload queue for the user.

Zochita siziyenera kumangirizidwa kudziko lofunsira

Nthawi zina zimakhala zokopa kugwiritsa ntchito mawonekedwe a ntchito posinthana kusintha zinthu zina kapena kusintha magawo amafunso. Chofunikira kwambiri chomwe chiyenera kuganiziridwa ndi kukula koyenera kwa ntchito. Makasitomala nthawi zambiri amayambitsanso mabizinesi pakakhala zovuta zamaukonde. Ngati kugulitsako kumatengera dziko lomwe likusinthidwa ndi njira ina, lingasankhe mtengo wolakwika malinga ndi kuthekera kwa mtundu wa data. Zochita ziyenera kuganizira za chiwopsezo cha mipikisano ya data mukugwiritsa ntchito.

var seq int64
with newTransaction():
    newSeq := atomic.Increment(&seq)
    Entries.query(newSeq)
    // Other operations...

Zomwe zili pamwambazi zidzawonjezera nambala yotsatizana nthawi iliyonse ikachitika, mosasamala kanthu za zotsatira zomaliza. Ngati kudziperekako sikulephera chifukwa cha zovuta za netiweki, pempholi lidzaperekedwa ndi nambala yotsatizana mukayesanso.

Okonza mafunso angakuuzeni zambiri za database

Okonza mafunso amawona momwe funso lidzayankhidwira mu database. Amasanthulanso zopempha ndikuzikonza asanazitumize. Okonza amatha kupereka zongoyerekeza zomwe zingatheke potengera zizindikiro zomwe ali nazo. Mwachitsanzo, njira yabwino kwambiri yofufuzira funso lotsatirali ndi iti?

SELECT * FROM articles where author = "rakyll" order by title;

Zotsatira zitha kubwezedwa m'njira ziwiri:

  • Full table scan: Mutha kuyang'ana chilichonse chomwe chili patebulo ndikubwezeretsanso zolemba zomwe zili ndi dzina lofananira la wolemba, kenako ndikuyitanitsa.
  • Index scan: Mutha kugwiritsa ntchito index kuti mupeze ma ID ofanana, pezani mizereyo, kenako ndikuyitanitsa.

Ntchito ya query planner ndiyo kudziwa njira yomwe ili yabwino kwambiri. Ndikoyenera kulingalira kuti okonza mafunso ali ndi mphamvu zochepa zolosera. Izi zingapangitse zosankha zoipa. Ma DBA kapena opanga atha kuzigwiritsa ntchito kuti azindikire ndikuwongolera mafunso omwe sakuyenda bwino. Mabaibulo atsopano a DBMS amatha kukonza okonza mafunso, ndipo kudzidziwitsa nokha kungathandize pokonzanso deta ngati mawonekedwe atsopano amabweretsa mavuto. Mafunso ochedwa, malipoti ochedwa, kapena ziwerengero za nthawi yogwira ntchito zingathandize kuzindikira mafunso omwe akufunika kukhathamiritsa.

Ma metrics ena operekedwa ndi query planner amatha kukhala ndi phokoso (makamaka poyerekezera kuchedwa kapena nthawi ya CPU). Zowonjezera zabwino kwa okonza mapulani ndi zida zotsatirira ndikutsata njira yochitira. Amakulolani kuti muzindikire zovuta zotere (tsoka, si ma DBMS onse omwe amapereka zida zotere).

Kusamuka pa intaneti ndikovuta koma kotheka

Kusamuka kwapaintaneti, kusamuka kwamoyo, kapena kusamuka kwanthawi yeniyeni kumatanthauza kusuntha kuchokera ku database imodzi kupita ku ina popanda kuwononga nthawi kapena kuwonongeka kwa data. Kusamuka kwamoyo ndikosavuta kuchita ngati kusinthaku kumachitika mkati mwa DBMS/injini yomweyo. Zinthu zimakhala zovuta kwambiri pakafunika kusamukira ku DBMS yatsopano yokhala ndi magwiridwe antchito osiyanasiyana komanso zofunikira za schema.

Pali mitundu yosiyanasiyana yosamukira pa intaneti. Nayi imodzi mwa izo:

  • Yambitsani kulowa kawiri muzosunga zonse ziwiri. Dongosolo latsopanoli pakadali pano lilibe deta yonse, koma amangovomereza zaposachedwa. Mukatsimikiza za izi, mutha kupita ku sitepe yotsatira.
  • Yambitsani kuti muwerenge kuchokera pazosungidwa zonse ziwiri.
  • Konzani dongosolo kuti kuwerenga ndi kulemba kumachitidwa makamaka pa database yatsopano.
  • Lekani kulembera ku database yakale pamene mukupitiriza kuwerenga deta kuchokera pamenepo. Pakadali pano, database yatsopanoyo ikadalibe deta. Ayenera kukopera kuchokera ku database yakale.
  • Dongosolo lakale la database ndi kuwerenga kokha. Koperani zomwe zikusowa kuchokera ku database yakale kupita ku yatsopano. Kusamuka kukatha, sinthani njira zopita ku database yatsopano, ndikuyimitsa yakale ndikuyichotsa padongosolo.

Kuti mudziwe zambiri, ndikupangira kulumikizana nkhani, yomwe imafotokoza za njira ya Stripe yosamukira kutengera chitsanzo ichi.

Kuwonjezeka kwakukulu kwa database kumaphatikizapo kuwonjezeka kwa kusadziŵika bwino

Kukula kwa database kumabweretsa mavuto osayembekezereka okhudzana ndi kukula kwake. Tikamadziwa zambiri za kapangidwe ka mkati mwa nkhokwe, m'pamenenso timadziwiratu momwe zidzakulire. Komabe, nthawi zina sizingatheke kudziwiratu.
Pamene maziko akukula, malingaliro am'mbuyomu ndi ziyembekezo zokhudzana ndi kuchuluka kwa deta ndi zofunikira za bandwidth ya netiweki zitha kukhala zachikale. Apa ndi pamene funso likubwera la kukonzanso kwakukulu kwa mapangidwe, kusintha kwakukulu kwa ntchito, kukonzanso kutumizidwa, kapena kusamukira ku ma DBMS ena kuti apewe mavuto omwe angakhalepo.

Koma musaganize kuti chidziwitso chabwino kwambiri chamkati mwa database yomwe ilipo ndiyo yokhayo yomwe ikufunika. Mamba atsopano adzabweretsa zosadziwika zatsopano. Mfundo zowawa zosayembekezereka, kugawa kwa data kosagwirizana, bandwidth yosayembekezereka ndi zovuta za hardware, kuchuluka kwa magalimoto ndi magawo atsopano a maukonde adzakukakamizani kuti muganizirenso njira yanu yachinsinsi, chitsanzo cha deta, chitsanzo chotumizira, ndi kukula kwa deta.

...

Panthawi yomwe ndinayamba kuganiza zofalitsa nkhaniyi, panali kale zinthu zisanu pa mndandanda wanga woyamba. Kenako panabwera anthu ambiri malingaliro atsopano za zinthu zina zomwe zingathe kufotokozedwa. Chifukwa chake, nkhaniyi ikukhudza zovuta zowoneka bwino zomwe zimafunikira chidwi chachikulu. Komabe, izi sizikutanthauza kuti mutuwo watha ndipo sindidzabwereranso kuzinthu zanga zamtsogolo ndipo sindidzasintha zomwe zilipo panopa.

PS

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga