PostgreSQL le litlhophiso tse ikhethileng tsa ho ngola ka khokahano

Phetolelo ea sehlooho sena e lokiselitsoe ka ho khetheha liithuti tsa thupelo "Database". Na u khahlehela ho nts'etsapele ntlheng ee? Re u mema hore u Letsatsi la Open, moo re buang ka ho qaqileng ka lenaneo, likarolo tsa sebopeho sa inthaneteng, litsebo le menyetla ea mesebetsi e letetseng ba fumaneng mangolo ka mor'a koetliso.

PostgreSQL le litlhophiso tse ikhethileng tsa ho ngola ka khokahano

PostgreSQL le litlhophiso tse ikhethileng tsa ho ngola ka khokahano
Ho Compose, re sebetsana le li-database tse ngata, tse re fang monyetla oa ho tloaelana le ts'ebetso le mefokolo ea tsona. Ha re ntse re ithuta ho rata likarolo tsa li-database tse ncha, ka linako tse ling re qala ho nahana hore na ho ne ho tla ba monate hakaakang haeba likarolo tse tšoanang li ne li le teng lithulusing tse hōlileng tsebong tseo esale re sebetsa le tsona nako e telele. E 'ngoe ea likarolo tse ncha tseo ke neng ke batla ho li bona ho PostgreSQL e ne e le mokhoa o ka lokisehang oa ho ngola ka khokahanyo ho pholletsa le sehlopha sohle. 'Me ha e le hantle, re se re ntse re e-na le eona,' me kajeno re batla ho arolelana le uena tlhahisoleseding ea hore na u ka e sebelisa joang.

Ke hobane'ng ha ke e hloka?

Hore na sehlopha se lokela ho sebetsa joang ho ipapisitse le kopo ea hau. Nka, mohlala, app ea ho lefa likoloto. U tla hloka botsitso ba XNUMX% ho pholletsa le sehlopha, kahoo o tla tlameha ho lumella boitlamo ba synchronous e le hore database ea hau e emele liphetoho tsohle hore li etsoe. Leha ho le joalo, haeba kopo ea hau e le sebaka sa marang-rang se ntseng se hola ka potlako, mohlomong u tla khetha karabelo e potlakileng ho feta XNUMX% e tsitsitseng. Ho fihlela sena, o ka sebelisa li-asynchronous commits sehlopheng sa hau.

Kopana le ho sekisetsa

U tlameha ho etsa tradeoffs lipakeng tsa ts'ebetso ea data le ts'ebetso. PostgreSQL e suthela hole le botsitso hobane tlhophiso ea kamehla e ka lebelloa esale pele ebile ntle le lintho tse makatsang tse sa lebelloang. Joale ha re shebeng ho sekisetsa.

Tradeoff 1: Ts'ebetso

Haeba sehlopha sa PostgreSQL se sa hloke botsitso, se ka sebetsa ka mokhoa o ts'oanang. Ngola e ngolloa ho moetapele oa sehlopha, 'me lintlafatso li tla romelloa ho likopi tsa eona metsotsoana e seng mekae hamorao. Ha sehlopha sa PostgreSQL se hloka botsitso, se tlameha ho sebetsa ka mokhoa o ts'oanang. Ngola e tla ngolloa ho moetapele oa sehlopha, e tla romella tlhahiso ho li-replicas mme e emetse netefatso ea hore e mong le e mong o ngotse pele a romella netefatso ho moreki ea qalileng ho ngola hore e atlehile. Phapang e sebetsang pakeng tsa mekhoa ena ke hore mokhoa oa asynchronous o hloka hop tse peli tsa marang-rang, ha mokhoa oa synchronous o hloka tse 'nè.

Tradeoff 2: Ho lumellana

Sephetho sa ketsahalo ea ho hloleha ha moetapele mekhoeng ena e 'meli le eona e tla fapana. Haeba mosebetsi o etsoa asynchronously, joale haeba phoso e joalo e etsahala, ha se litlaleho tsohle tse tla etsoa ke likopi. Ho tla lahleha bokae? E ipapisitse le ts'ebeliso ka boeona le bokhoni ba ho ikatisa. Ho etsa phetisetso ho tla thibela replica ho ba moetapele haeba tlhaiso-leseling e ho eona e ka tlase ho 1 MB ho feta ho moetapele, ke hore, ho ka lahleha ho fihla ho 1 MB ea lirekoto nakong ea ts'ebetso e sa ts'oaneng.

Sena ha se etsahale ka mokhoa oa synchronous. Haeba moetapele a hloleha, likopi tsohle lia nchafatsoa, ​​​​hobane mongolo ofe kapa ofe o netefalitsoeng ho moetapele o tlameha ho netefatsoa ho likopi. Sena ke tumellano.

Boitšoaro ba Synchronous bo utloahala ts'ebelisong ea tefiso moo ho ts'oana ho nang le molemo o hlakileng khoebisanong lipakeng tsa botsitso le ts'ebetso. Ntho ea bohlokoa ka ho fetisisa bakeng sa kopo e joalo ke data e nepahetseng. Joale nahana ka sebaka sa marang-rang seo ho sona mosebetsi o ka sehloohong e leng ho boloka tlhokomelo ea mosebelisi ka ho arabela likopo kapele kamoo ho ka khonehang. Tabeng ena, ts'ebetso e nang le li-hops tse fokolang tsa marang-rang le ho leta ho fokolang bakeng sa boitlamo e tla ba ntho e tlang pele. Leha ho le joalo, tradeoff pakeng tsa ts'ebetso le botsitso ha se eona feela eo u lokelang ho nahana ka eona.

Phapanyetsano ea 3: Likotsi

Ho bohlokoa haholo ho utloisisa hore na sehlopha se itšoara joang nakong ea ho hlōleha. Nahana ka boemo boo ho bona setšoantšo se le seng kapa tse ngata li hlōlehang. Ha boitlamo bo sebetsoa ka mokhoa o ts'oanang, moetapele o tla tsoelapele ho sebetsa, ke hore, ho amohela le ho sebetsa ho ngola, ntle le ho emela likopi tse sieo. Ha likopi li khutlela sehlopheng, li tšoara moetapele. Ka ho pheta-pheta ka mokhoa o lumellanang, haeba likopi li sa arabe, moetapele a ke ke a ba le boikhethelo mme o tla tsoelapele ho emela netefatso ea boitlamo ho fihlela setšoantšo se khutlela sehlopheng mme se khona ho amohela le ho ngola.

Khokahano e le 'ngoe ka thekiso?

Sesebelisoa se seng le se seng se hloka mofuta o fapaneng oa motsoako oa ts'ebetso le ts'ebetso. Ntle le haeba, ehlile, ke sesebelisoa sa rona sa ho lefa mekoloto, seo re nahanang hore se tla lumellana ka botlalo, kapa sesebelisoa sa rona sa marang-rang sa marang-rang se batlang se le teng. Maemong a mang kaofela, ho tla ba le linako tseo ka tsona lits'ebetso tse ling li tlamehang ho lumellana 'me tse ling li tlameha ho ba tsa asynchronous. U ka 'na ua se ke ua batla hore tsamaiso e eme ho fihlela molaetsa o rometsoeng moqoqong o etsoa, ​​​​empa haeba tefo e sebetsoa ka kopo e tšoanang, joale u tla tlameha ho ema.

Liqeto tsena kaofela, ehlile, li entsoe ke moqapi oa kopo. Ho etsa liqeto tse nepahetseng mabapi le nako ea ho sebelisa mokhoa o mong le o mong ho tla u thusa hore u rue molemo ka ho fetisisa sehlopheng sa hau. Ke habohlokoa hore moqapi a fetole pakeng tsa bona boemong ba SQL bakeng sa likhokahano le bakeng sa litšebelisano.

Ho netefatsa taolo ka ts'ebetso

Ka ho sa feleng, PostgreSQL e fana ka botsitso. Sena se laoloa ke parameter ea seva synchronous_commit. Ka kamehla e boemong on, empa e na le likhetho tse ling tse tharo: local, remote_write kapa off.

Ha u beha parameter ho off boitlamo bohle ba synchronous bo emisitsoe, esita le tsamaisong ea lehae. Paramethara ea lehae e hlalosa mokhoa o lumellanang bakeng sa sistimi ea lehae, empa ho ngolla likopi ho etsoa ka mokhoa o ts'oanang. Remote_write e tsoela pele ho feta: ho ngola ho likopi li entsoe ka mokhoa o ts'oanang, empa li khutlisoa ha setšoantšo se amohetse ho ngoloa empa se sa se ngolla disk.

Ka ho nahana ka mefuta e mengata e fumanehang ea likhetho, re khetha boitšoaro le, re ntse re hopola hore on - tsena ke lirekoto tsa synchronous, re tla li khetha local bakeng sa boitlamo ba asynchronous holim'a marang-rang, ha u ntse u tlohela mesebetsi ea lehae e lumellana.

Hona joale, re tla u bolella mokhoa oa ho theha sena ka motsotsoana, empa nahana hore re seta synchronous_commit в local bakeng sa seva. Re ne re ipotsa hore na ho ka khoneha ho fetola parameter synchronous_commit ka fofa, 'me ho ile ha fumaneha hore ha ho khonehe feela, ho na le litsela tse peli tsa ho etsa sena. Ea pele ke ho seta nako ea khokahano ea hau ka tsela e latelang:

SET SESSION synchronous_commit TO ON;  
// Your writes go here

Lingoliloeng tsohle tse latelang sebokeng li tla lumela ho ngolla li-replicas pele li khutlisetsa sephetho se setle ho moreki ea hokahaneng. Ntle le haeba ehlile o fetola maemo synchronous_commit hape. U ka siea karolo SESSION taelong hobane e tla ba boleng ba kamehla.

Mokhoa oa bobeli o lokile ha o batla ho etsa bonnete ba hore o fumana phetiso e lumellanang bakeng sa transaction e le 'ngoe. Litabeng tse ngata tsa moloko oa NoSQL mohopolo oa litšebelisano ha o eo, empa o teng ho PostgreSQL. Tabeng ena o qala transaction ebe o beha synchronous_commit в on pele o kenya letsoho bakeng sa thekiso. COMMIT e tla etsa transaction ho sebelisa boleng bofe kapa bofe ba parameter synchronous_commit, e neng e behiloe ka nako eo, le hoja ho le molemo ho beha mefuta e fapaneng ka pele ho etsa bonnete ba hore bahlahisi ba bang ba utloisisa hore ho ngola ha hoasynchronous.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

Lits'ebetso tsohle tsa transaction joale li tla netefatsoa joalo ka ha li ngoletsoe likopi pele database e khutlisa karabelo e ntle ho moreki ea hokahaneng.

Ho theha PostgreSQL

Pele ho mona, re ne re nahana ka sistimi ea PostgreSQL e nang le synchronous_commit, e kentsoeng local. Ho etsa hore sena e be sa nnete ka lehlakoreng la seva, o tla hloka ho beha likhetho tse peli tsa tlhophiso ea seva. Parameter e 'ngoe hape synchronous_standby_names e tla tla ka boyona ha synchronous_commit e tla ba on. E etsa qeto ea hore na ke likopi life tse lokeloang ke mesebetsi ea synchronous, 'me re tla e beha *, e leng se tla bolela hore likopi tsohle lia ameha. Litekanyetso tsena hangata li hlophisoa ho faele ea tlhophiso ka ho eketsa:

synchronous_commit = local  
synchronous_standby_names='*'

Ka ho beha parameter synchronous_commit ho ba le moelelo local, re theha mokhoa oo li-disk tsa lehae li lulang li lumellana, empa li-replica tsa marang-rang li lumellana ka mokhoa o ikhethileng. Ntle le haeba, ehlile, re etsa qeto ea ho etsa hore li-commit tsena li lumellane, joalo ka ha ho bonts'itsoe kaholimo.

Haeba esale u latela nts'etsopele Morero oa 'musisi, mohlomong u hlokometse liphetoho tse itseng haufinyane (1, 2), e ileng ea lumella basebelisi ba 'Musisi ho lekola liparamente tsena le ho beha leihlo ho ts'oana ha tsona.

Mantsoe a mang a 'maloa...

Bekeng e fetileng, nka be ke u joetse hore ha ho khonehe ho hlophisa PostgreSQL hantle hakana. Ke nakong eo Kurt, setho sa sehlopha sa sethala sa Compose, a ileng a tsitlallela hore monyetla o joalo o teng. O ile a khutsisa khanyetso ea ka mme a fumana litokomaneng tsa PostgreSQL e latelang:

PostgreSQL le litlhophiso tse ikhethileng tsa ho ngola ka khokahano

Setting ena e ka fetoloa neng kapa neng. Boitšoaro ba khoebo efe kapa efe bo khethoa ke maemo a teng nakong ea boitlamo. Ka hona, hoa khoneha ebile ho na le thuso bakeng sa litšebelisano tse ling ho etsoa ka mokhoa o lumellanang le ho tse ling ka mokhoa o tšoanang. Ka mohlala, ho qobella motho multistatement transaction to make commits asynchronously ha boleng ba kamehla ba paramethara bo fapana, seta SET LOCAL synchronous_commit TO OFF khoebong.

Ka phetoho ena e nyane ho faele ea tlhophiso, re file basebelisi taolo holim'a botsitso le ts'ebetso ea bona.

Source: www.habr.com

Eketsa ka tlhaloso