PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ke fana ka tlhahiso ea hore u bale sengoloa sa tlaleho ea Vladimir Sitnikov ea pele ea 2016 "PostgreSQL le JDBC li pepeta lero lohle"

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Lumelang Lebitso la ka ke Vladimir Sitnikov. Ke qetile lilemo tse 10 ke sebeletsa NetCracker. 'Me hangata ke kena tlhahiso. Ntho e 'ngoe le e' ngoe e amanang le Java, ntho e 'ngoe le e' ngoe e amanang le SQL ke seo ke se ratang.

'Me kajeno ke tla bua ka seo re kopaneng le sona k'hamphaning ha re qala ho sebelisa PostgreSQL joalo ka seva sa database. 'Me hangata re sebetsa le Java. Empa seo ke tla u bolella sona kajeno ha se feela ka Java. Joalokaha tloaelo e bontšitse, sena se etsahala le lipuong tse ling.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Re tla bua:

  • mabapi le sampole ya data.
  • Mabapi le ho boloka data.
  • Hape le mabapi le tshebetso.
  • Le ka liraka tse ka tlas'a metsi tse patiloeng moo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

A re qaleng ka potso e bonolo. Re khetha mola o le mong ho tloha tafoleng ho latela senotlolo sa mantlha.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Database e fumaneha ho moamoheli a le mong. Mme temo ena kaofela e nka 20 milliseconds.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Li-milliseconds tsena tse 20 li ngata. Haeba u na le likopo tse joalo tse 100, joale u qeta nako ka motsotsoana u ntse u bala likopo tsena, ke hore, re senya nako.

Ha re rate ho etsa sena mme re shebe hore na motheo o re fa eng bakeng sa sena. Database e re fa likhetho tse peli tsa ho botsa lipotso.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Khetho ea pele ke kopo e bonolo. Ke eng e ntle ka eona? Taba ea hore rea e nka ebe rea e romela, eseng letho hape.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/478

Database e boetse e na le potso e tsoetseng pele, e qhekellang, empa e sebetsa haholoanyane. U ka romella ka thoko kopo ea ho arola, ho e sebelisa, ho tlama ka mokhoa o fapaneng, joalo-joalo.

Potso e atolositsoeng haholo ke ntho eo re ke keng ra e bua tlalehong ea hajoale. Re, mohlomong, re batla ho hong ho tswa ho database mme ho na le lethathamo la litakatso le entsoeng ka mokhoa o itseng, ke hore sena ke seo re se batlang, empa ha se khonehe hona joale le selemong se latelang. Kahoo re sa tsoa e rekota mme re tla potoloha re sisinya batho ba ka sehloohong.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Mme seo re ka se etsang ke potso e bonolo le potso e atolositsoeng.

Ke eng e ikhethang ka mokhoa o mong le o mong?

Potso e bonolo e loketse ho etsoa hang feela. Hang ha e etsoa mme e lebetsoe. 'Me bothata ke hore ha e tšehetse mokhoa oa boitsebiso ba binary, ke hore ha o tšoanelehe bakeng sa mekhoa e meng e phahameng ea ts'ebetso.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Potso e atolositsoeng - e u lumella ho boloka nako ha u bala. Sena ke seo re se entseng mme ra qala ho se sebelisa. Ruri sena se ile sa re thusa. Ha ho bolokehe feela ha ho arola. Ho na le lipolokelo ho phetiso ea data. Ho fetisetsa data ka sebopeho sa binary ho sebetsa hantle haholo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ha re tsoeleng pele ho itloaetsa. Sena ke seo sesebelisoa se tloaelehileng se shebahalang ka sona. E ka ba Java, joalo-joalo.

Re entse polelo. Phetha taelo. E entsoe haufi. Phoso e kae moo? Bothata ke bofe? Ha ho bothata. Sena ke seo e se buang libukeng tsohle. Ke kamoo e lokelang ho ngoloa kateng. Haeba u batla tshebetso e phahameng ka ho fetisisa, ngola tjena.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Empa tloaelo e bontšitse hore sena ha se sebetse. Hobaneng? Hobane re na le mokhoa oa "haufi". 'Me ha re etsa sena, ho ea ka pono ea database ho bonahala eka ho tšoana le motho ea tsubang ea sebetsang le database. Re itse "PARSE EXECUTE DEALLOCATE".

Ke hobane'ng ha pōpo ee e eketsehileng le ho laolla lipolelo? Ha ho motho ea li hlokang. Empa se atisang ho etsahala ho PreparedStatements ke hore ha re li koala, li koala ntho e 'ngoe le e' ngoe ho database. Sena ha se seo re se batlang.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Re batla, joalo ka batho ba phetseng hantle, ho sebetsa le setsi. Re nkile le ho lokisa polelo ea rona hang, ebe re e phetha hangata. Ebile, hangata - sena ke hang bophelong bohle ba lits'ebetso - li fetisitsoe. 'Me re sebelisa id ea polelo e tšoanang ho REST e fapaneng. Sena ke sepheo sa rona.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Re ka finyella see joang?

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ho bonolo haholo - ha ho hlokahale ho koala lipolelo. Re e ngola tjena: "lokisa" "phetha".

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Haeba re qala ntho e kang ena, joale ho hlakile hore ho na le ntho e tla phalla kae-kae. Haeba e sa hlaka, u ka e leka. Ha re ngoleng palo e sebelisang mokhoa ona o bonolo. Etsa polelo. Re e tsebisa ka mofuta o mong oa mokhanni mme re fumana hore e soahlamana ka potlako ka tahlehelo ea memori eohle eo e neng e e-na le eona.

Ho hlakile hore liphoso tse joalo li lokisoa habonolo. Nke ke ka bua ka tsona. Empa ke tla re phetolelo e ncha e sebetsa ka potlako haholo. Mokhoa ona o hloka kelello, empa leha ho le joalo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Mokhoa oa ho sebetsa hantle? Re lokela ho etsa eng bakeng sa see?

Ha e le hantle, likopo li lula li koala lipolelo. Libukeng tsohle ba re ho e koala, ho seng joalo mohopolo o tla lutla.

'Me PostgreSQL ha e tsebe ho etsa lipotso tsa cache. Hoa hlokahala hore seboka se seng le se seng se iketsetse cache ena.

'Me le rona ha re batle ho senya nako ka ho bala.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

'Me joalo ka tloaelo re na le likhetho tse peli.

Khetho ea pele ke hore re e nke ebe re re ha re phuthele tsohle ho PgSQL. Ho na le cache moo. E boloka tsohle. Ho tla ba monate. Re bone sena. Re na le likopo tse 100500. Ha e sebetse. Ha re lumellane ho fetola likopo hore e be lits'ebetso ka letsoho. Che, che.

Re na le khetho ea bobeli - e nke 'me u itšehe ka borona. Re bula mehloli ebe re qala ho khaola. Re ile ra bona le ho bona. Ho ile ha fumaneha hore ha ho thata hakaalo ho e etsa.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/319

Sena se hlahile ka Phato 2015. Hona joale ho na le phetolelo ea morao-rao. Mme tsohle di ntle. E sebetsa hantle hoo re sa fetoleng letho ts'ebelisong. Hape re ile ra emisa ho nahana ka tsela ea PgSQL, ke hore, sena se ne se lekane hore re ka fokotsa litšenyehelo tsohle ho ea ho zero.

Ka hona, lipolelo tse lokiselitsoeng ke Seva li kentsoe tšebetsong ea 5th e le ho qoba ho senya mohopolo sebakeng sa polokelo ea litaba ka kopo e 'ngoe le e' ngoe ea nako e le 'ngoe.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

U ka botsa - linomoro li hokae? U fumana eng? 'Me mona nke ke ka fana ka linomoro, hobane kopo e' ngoe le e 'ngoe e na le ea eona.

Lipotso tsa rona li bile joalo hoo re sebelisitseng li-milliseconds tse ka bang 20 ho hlalosa lipotso tsa OLTP. Ho ne ho e-na le 0,5 milliseconds bakeng sa ho bolaoa, 20 milliseconds bakeng sa tlhaloso. Kopo - 10 KB ea mongolo, mela e 170 ea moralo. Ena ke kopo ea OLTP. E kopa 1, 5, 10 mela, ka linako tse ling ho feta.

Empa re ne re sa batle ho senya 20 milliseconds ho hang. Re e fokotsa ho 0. Tsohle di ntle.

U ka nka eng ho tloha moo? Haeba u na le Java, joale u nka mofuta oa sejoale-joale oa mokhanni 'me u thabe.

Haeba u bua puo e fapaneng, joale nahana - mohlomong le uena u hloka sena? Hobane ho ea ka pono ea puo ea ho qetela, ka mohlala, haeba PL 8 kapa u na le LibPQ, joale ha ho hlake ho uena hore u qeta nako e seng ho phethahatsoa, ​​ho arola, 'me sena se lokela ho hlahlojoa. Joang? Tsohle di lokolohile.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ntle le hore ho na le liphoso le peculiarities tse ling. 'Me re tla bua ka bona hona joale. Boholo ba eona e tla ba ka ho epolloa ha lintho tsa khale tsa indasteri, mabapi le seo re se fumaneng, seo re se fumaneng.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Haeba kopo e hlahisoa ka matla. Hoa etsahala. Motho e mong o kopanya likhoele hammoho, ho fella ka potso ea SQL.

Ke hobane'ng ha a le mobe? Ho hobe hobane nako le nako re qetella re e-na le khoele e fapaneng.

'Me hashCode ea khoele ena e fapaneng e hloka ho baloa hape. Ha e le hantle ona ke mosebetsi oa CPU - ho fumana mongolo o molelele oa kopo esita le hash e teng ha ho bonolo hakaalo. Ka hona, sephetho se bonolo - u se ke ua hlahisa likopo. Li boloke boemong bo le bong. Mme le thabe.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Bothata bo latelang. Mefuta ea data e bohlokoa. Ho na le li-ORM tse reng ha ho na taba hore na NULL ke ea mofuta ofe, ho ke ho be le mofuta o itseng. Haeba Int, joale re re setInt. 'Me haeba NULL, e ke e be VARCHAR kamehla. Hona ho etsa phapang efe qetellong hore na NULL ke eng? Database ka boeona e tla utloisisa ntho e 'ngoe le e' ngoe. 'Me setšoantšo sena ha se sebetse.

Ha e le hantle, database ha e tsotelle ho hang. Haeba u boletse lekhetlo la pele hore ena ke nomoro, 'me lekhetlo la bobeli u re ke VARCHAR, joale ho ke ke ha khoneha ho sebelisa lipolelo tse lokiselitsoeng ke Seva hape. 'Me tabeng ena, re tlameha ho tsosolosa polelo ea rona.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Haeba u etsa potso e tšoanang, etsa bonnete ba hore mefuta ea data e kholomong ea hau ha e ferekane. U tlameha ho ela hloko NULL. Ena ke phoso e tloaelehileng eo re bileng le eona kamora hore re qale ho sebelisa PreparedStatements

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ho lokile, butswe. Mohlomong ba nkile mokhanni. Mme tlhahiso e ile ya theoha. Lintho li ile tsa mpefala.

See se etsahala joang? Na ke bothata kapa ke tšobotsi? Ka bomalimabe, ho ne ho sa khonehe ho utloisisa hore na sena ke phoso kapa ke tšobotsi. Empa ho na le boemo bo bonolo haholo ba ho hlahisa bothata bona hape. O ile a re lalla re sa lebella. 'Me e na le sampling ka ho toba ho tloha tafoleng e le' ngoe. Ha e le hantle, re ne re e-na le likōpo tse ngata tse joalo. E le molao, ba ne ba kenyelletsa litafole tse peli kapa tse tharo, empa ho na le boemo bo joalo ba ho bapala. Nka mofuta ofe kapa ofe ho tsoa ho database ea hau 'me u e bapale.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Taba ke hore re na le litšiea tse peli, tseo e 'ngoe le e 'ngoe e nang le indexed. Ho na le mela e milione kholomong e le 'ngoe ea NULL. 'Me karolo ea bobeli e na le mela e 20 feela. Ha re etsa lintho tse sa tšoaneng, ntho e 'ngoe le e' ngoe e sebetsa hantle.

Haeba re qala ho phethahatsa ka mefuta e fapaneng, ke hore, re etsa "?" kapa "$1" bakeng sa kopo ea rona, re qetella re fumana eng?

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Phethahatso ea pele e joalo ka ha ho lebelletsoe. Ea bobeli e potlakile hanyane. Ho na le ntho e bolokiloeng. Ea boraro, ea bone, ea bohlano. Ebe bang - le ntho e kang eo. 'Me ntho e mpe ka ho fetisisa ke hore sena se etsahala ka phethahatso ea botšelela. Ke mang ea neng a tseba hore ho ne ho hlokahala hore ho bolaoe batho ba tšeletseng e le hore ho ka utloisisoa hore na morero oa sebele oa polao ke ofe?

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ke mang ea molato? Ho etsahetse eng? Database e na le optimization. 'Me e bonahala e ntlafalitsoe bakeng sa kesi ea generic. 'Me, ka hona, ho qala ka nako e itseng, o fetohela ho moralo oa generic, oo, ka bomalimabe, o ka fetohang o fapaneng. E ka 'na ea bonahala e tšoana, kapa e ka ba e fapaneng. 'Me ho na le mofuta o mong oa boleng ba moeli o lebisang boitšoarong bona.

U ka etsa’ng ka eona? Ha e le hantle, mona ho thata ho nahana ka ntho leha e le efe. Ho na le tharollo e bonolo eo re e sebelisang. Sena ke +0, OFFSET 0. Ka sebele u tseba litharollo tse joalo. Re e nka feela ebe re eketsa "+0" ho kopo mme tsohle li lokile. Ke tla u bontša hamorao.

'Me ho na le khetho e' ngoe - sheba merero ka hloko haholoanyane. Moqapi ha aa lokela ho ngola kopo feela, empa hape o re "hlalosa sekaseka" makhetlo a 6. Haeba e le 5, e ke ke ea sebetsa.

'Me ho na le khetho ea boraro - ngolla pgsql-hackers lengolo. Ke ngotse, leha ho le joalo, ha e e-so hlake hore na ena ke phoso kapa ke tšobotsi.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://gist.github.com/vlsi/df08cbef370b2e86a5c1

Ha re ntse re nahana hore na ena ke bothata kapa ke tšobotsi, ha re e lokise. Ha re nke kopo ea rona mme re kenye "+0". Tsohle di lokile. Matšoao a mabeli 'me ha ho hlokahale hore u nahane ka hore na ke eng kapa hore na ke eng. E bonolo haholo. Re hanetse feela database ho sebelisa index kholomong ena. Ha re na index holim'a kholomo ea "+0" 'me ho joalo, database ha e sebelise index, ntho e' ngoe le e 'ngoe e hantle.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ona ke molao oa 6 hlalosa. Hona joale liphetolelong tsa morao-rao u tlameha ho e etsa ka makhetlo a 6 haeba u na le mefuta-futa e tlamiloeng. Haeba ha u na lintho tse fapaneng tse tlamang, sena ke seo re se etsang. 'Me qetellong ke eona kopo ena e hlolehang. Ha se ntho e qhekellang.

Ho ka bonahala eka, ke bokae ho ka khonehang? Kotsi mona, kokoanyana mono. Haele hantle, bothata bo hohle.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

A re hlahlobeng ka hloko. Ka mohlala, re na le li-schema tse peli. Leano la A le nang le tafole S le setšoantšo sa B se nang le tafole S. Potso – kgetha data ho tswa tafoleng. Re tla ba le eng tabeng ee? Re tla ba le phoso. Re tla ba le tsohle tse ka holimo. Molao ke - kokoanyana e hohle, re tla ba le tsohle tse ka holimo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Joale potso ke: "Hobane'ng?" Ho ka bonahala eka ho na le litokomane tsa hore haeba re na le schema, joale ho na le "search_path" e fapaneng e re bolellang hore na re batle tafole hokae. Ho bonahala eka ho na le phapang.

Bothata ke bofe? Bothata ke hore lipolelo tse lokiselitsoeng seva ha li belaelle hore search_path e ka fetoloa ke motho e mong. Boleng bona bo sala, joalo ka ha ho le joalo, bo sa fetohe bakeng sa database. ’Me likarolo tse ling li ka ’na tsa se ke tsa fumana meelelo e mecha.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ehlile, sena se ipapisitse le mofuta oo u lekang ho ona. Ho ipapisitse le hore na litafole tsa hau li fapana hakae. Mme mofuta oa 9.1 o tla phethahatsa likopo tsa khale feela. Liphetolelo tse ncha li ka tšoasa kokoanyana eo 'me tsa u bolella hore u na le bothata.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Seta search_path + lipolelo tse lokiselitsoeng seva =
moralo oa cache ha oa tlameha ho fetola mofuta oa sephetho

Joang ho e phekola? Ho na le recipe e bonolo - u se ke ua e etsa. Ha ho na lebaka la ho fetola search_path ha sesebelisoa se ntse se sebetsa. Haeba o fetoha, ho molemo ho theha khokahano e ncha.

U ka buisana, ke hore bula, buisana, eketsa. Mohlomong re ka kholisa baetsi ba polokelo ea boitsebiso hore ha motho e mong a fetola boleng, polokelo ea boitsebiso e lokela ho bolella moreki ka sena: “Bona, boleng ba hau bo ntlafalitsoe mona. Mohlomong u hloka ho hlophisa lipolelo hape ebe u li etsa bocha? Hona joale database e itšoara ka sekhukhu 'me ha e tlalehe ka tsela leha e le efe hore lipolelo li fetohile kae-kae ka hare.

'Me ke tla hatisa hape - sena ke ntho e sa tloaelehang bakeng sa Java. Re tla bona ntho e tšoanang ho PL/pgSQL ho isa ho e 'ngoe. Empa e tla hlahisoa hape moo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ha re leke khetho e 'ngoe ea data. Re khetha le ho khetha. Re na le tafole e nang le mela e milione. Mohala o mong le o mong ke kilobyte. Hoo e ka bang gigabyte ea data. Mme re na le memori e sebetsang mochining oa Java oa 128 megabytes.

Rona, joalo ka ha ho khothalelitsoe libukeng tsohle, re sebelisa ts'ebetso ea molapo. Ke hore, re bula resultSet ebe re bala lintlha tse tsoang moo hanyane ka hanyane. Na e tla sebetsa? Na e tla oela mohopolong? O tla bala hanyane? Ha re tšepeng database, a re tšepeng Postgres. Ha re e lumele. Na re tla oela OutOFMemory? Ke mang ea bileng le phihlelo ea OutOfMemory? Ke mang ea ileng a khona ho e lokisa ka mor'a moo? Ho na le motho ea ileng a khona ho e lokisa.

Haeba u na le mela e milione, u ke ke ua khetha feela. OFFSET/LIMIT ea hlokahala. Ke mang bakeng sa khetho ee? Mme ke mang ea ratang ho bapala le autoCommit?

Mona, joalo ka tloaelo, khetho e sa lebelloang ka ho fetesisa e fetoha e nepahetseng. 'Me haeba ka tšohanyetso u tima AutoCommit, ho tla thusa. Hobaneng ha ho le joalo? Mahlale ha a tsebe ka sena.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Empa ka ho sa feleng, bareki bohle ba hokelang polokelong ea polokelo ea Postgres ba lata data kaofela. PgJDBC ha se mokhelo tabeng ena; e khetha mela eohle.

Ho na le phapang holim'a sehlooho sa FetchSize, ke hore, u ka bua boemong ba polelo e fapaneng hore mona, ka kopo khetha data ka 10, 50. Empa sena ha se sebetse ho fihlela u tima autoCommit. E koetse AutoCommit - e qala ho sebetsa.

Empa ho sebelisa khoutu le ho beha setFetchSize hohle ha ho na tšitiso. Ka hona, re entse tlhophiso e tla bolela boleng ba kamehla bakeng sa khokahano eohle.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ke seo re se buileng. Paramethara e hlophisitsoe. Mme re fumane eng? Haeba re khetha chelete e nyane, haeba, ka mohlala, re khetha mela e 10 ka nako, joale re na le litšenyehelo tse kholo haholo. Ka hona, boleng bona bo lokela ho behoa ho hoo e ka bang lekholo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Haele hantle, ehlile, o ntse o tlameha ho ithuta ho e fokotsa ka li-byte, empa risepe ke ena: beha defaultRowFetchSize ho feta lekholo mme u thabe.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ha re tsoeleng pele ho kenya data. Ho kenya ho bonolo, ho na le likhetho tse fapaneng. Mohlala, INSERT, VALUES. Ena ke khetho e ntle. U ka re "INSERT KHETHA". Ka ts'ebetso ke ntho e tšoanang. Ha ho phapang ts'ebetsong.

Libuka li re u hloka ho etsa polelo ea Batch, libuka li re u ka etsa litaelo tse rarahaneng ka li-parentheses tse 'maloa. 'Me Postgres e na le tšobotsi e ntle haholo - o ka etsa COPY, ke hore, e etse kapele.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Haeba u e lekanya, u ka boela ua etsa lintho tse ling tse thahasellisang. Re batla hore see se sebetse joang? Ha re batle ho hlalosa le ho se phethise litaelo tse sa hlokahaleng.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ka ts'ebetso, TCP ha e re lumelle ho etsa sena. Haeba moreki a ntse a phathahane ka ho romella kopo, joale database ha e bale likopo ha a leka ho re romella likarabo. Sephetho ke hore moreki o emetse database ho bala kopo, mme database e emetse hore moreki a bale karabo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

'Me ka hona moreki o tlameha ho romella pakete ea khokahano nako le nako. Litšebelisano tse eketsehileng tsa marang-rang, tšenyo e eketsehileng ea nako.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir SitnikovMme ha re ntse re di eketsa, di mpefala le ho feta. Mokhanni ha a na tšepo 'me o li eketsa hangata, hoo e ka bang hanngoe meleng e meng le e meng e 200, ho itšetlehile ka boholo ba mela, joalo-joalo.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

https://github.com/pgjdbc/pgjdbc/pull/380

Hoa etsahala hore u lokise mola o le mong feela 'me ntho e' ngoe le e 'ngoe e tla potlakisa makhetlo a 10. Hoa etsahala. Hobaneng? Joalo ka tloaelo, ntho e sa fetoheng e kang ena e se e sebelisitsoe kae-kae. 'Me boleng "128" bo ne bo bolela ho se sebelise batching.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Sesebelisoa sa Java sa microbenchmark

Ho hotle hore ebe sena ha sea ka sa kenyelletsoa phetolelong ea molao. E fumanoe pele tokollo e qala. Litlhaloso tsohle tseo ke fanang ka tsona li thehiloe liphetolelong tsa morao-rao.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ha re e leke. Re lekanya InsertBatch e bonolo. Re lekanya InsertBatch makhetlo a mangata, ke hore ntho e le 'ngoe, empa ho na le litekanyetso tse ngata. Motsamao o qhekellang. Ha se motho e mong le e mong ea ka etsang sena, empa ke ts'ebetso e bonolo joalo, e bonolo haholo ho feta COPY.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

U ka etsa KOPI.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

'Me u ka etsa sena ka mehaho. Declare User default type, pass array le INSERT ka kotloloho tafoleng.

Haeba u bula sehokelo: pgjdbc/ubenchmsrk/InsertBatch.java, joale khoutu ena e ho GitHub. U ka bona ka ho hlaka hore na ke likopo life tse hlahisoang moo. Ha ho na taba.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Re ile ra qala. 'Me ntho ea pele eo re e hlokometseng ke hore ho se sebelise batch ho ke ke ha khoneha. Likhetho tsohle tsa batching ke zero, ke hore, nako ea ts'ebetso e batla e le zero ha e bapisoa le ts'ebetso ea nako e le 'ngoe.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Re kenya data. Ke tafole e bonolo haholo. Litšiea tse tharo. Mme re bona eng moo? Rea bona hore likhetho tsena tse tharo kaofela li batla li bapisoa. 'Me COPY, ehlile, e betere.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

Ke ha re kenya likotoana. Ha re re boleng bo le bong ba VALUES, tse peli tsa VALUES, tse tharo tsa VALUES, kapa re bonts'a tse 10 tsa tsona li arotsoe ke koma. Sena se mpa feela se tshekaletseng jwale. 1, 2, 4, 128. Ho ka bonoa hore Batch Insert, e entsoeng ka boputsoa, ​​​​e etsa hore a ikutloe a le betere haholo. Ke hore ha u kenya e le ‘ngoe ka nako kapa leha u kenya tse ‘ne ka nako e le ‘ngoe, e fetoha e ntle habeli, hobane feela re ile ra petetsa hanyane ka har’a VALUES. Ts'ebetso e fokolang ea EXECUTE.

Ho sebelisa COPY meqolong e menyenyane ha ho tšepise haholo. Ha kea ka ka taka le ho tse peli tsa pele. Ba ea leholimong, ke hore, linomoro tsena tse tala bakeng sa COPY.

COPY e lokela ho sebelisoa ha bonyane u na le mela e lekholo ea data. Taba ea ho bula khokahano ena e kholo. 'Me, ho bua 'nete, ha kea ka ka cheka ntlheng ena. Ke ntlafalitse Batch, empa eseng COPY.

Re etsa’ng ka mor’a moo? Re ile ra e leka. Re utloisisa hore re hloka ho sebelisa libopeho kapa bacth e bohlale e kopanyang meelelo e mengata.

PostgreSQL le JDBC li pepesa lero lohle. Vladimir Sitnikov

U lokela ho nka eng tlalehong ea kajeno?

  • PreparedStatement ke tsohle tsa rona. Sena se fana ka haholo bakeng sa tlhahiso. E hlahisa flop e kholo ka har'a setlolo.
  • 'Me u lokela ho etsa HLALOSA HLAHLOBA makhetlo a 6.
  • 'Me re hloka ho hlapolla OFFSET 0, le maqheka a kang +0 ho lokisa liphesente tse setseng tsa lipotso tsa rona tse nang le mathata.

Source: www.habr.com

Eketsa ka tlhaloso