PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ini ndinokurudzira kuti uverenge zvinyorwa zveVladimir Sitnikov wekutanga 2016 mushumo "PostgreSQL neJDBC vari kusvina muto wese"

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Masikati akanaka Ini ndinonzi Vladimir Sitnikov. Ndanga ndichishandira NetCracker kwemakore gumi. Uye ini ndiri kunyanya mukubudirira. Zvese zvine chekuita neJava, zvese zvine chekuita neSQL ndizvo zvandinoda.

Uye nhasi ndichataura pamusoro pezvatakasangana nazvo mukambani patakatanga kushandisa PostgreSQL sevhavha yedatabase. Uye isu tinonyanya kushanda neJava. Asi zvandichakuudza nhasi hazvisi zveJava chete. Sezvinoratidzwa nemaitiro, izvi zvinoitikawo mune mimwe mitauro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Tichataura:

  • nezve data sampling.
  • Nezve kuchengetedza data.
  • Uye zvakare nezve performance.
  • Uye pamusoro pemvura yemvura inovigwa ipapo.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatitange nemubvunzo uri nyore. Isu tinosarudza mutsara mumwe kubva patafura zvichienderana nekiyi yekutanga.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Iyo dhatabhesi iri pane imwechete iyo host. Uye kurima kwese uku kunotora 20 milliseconds.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Aya 20 milliseconds akawanda. Kana uine 100 zvikumbiro zvakadaro, saka unopedza nguva pasekondi imwe uchipuruzira zvikumbiro izvi, i.e. tiri kutambisa nguva.

Isu hatidi kuita izvi uye tarisa izvo hwaro hunotipa kune izvi. Iyo dhatabhesi inotipa mbiri sarudzo dzekuita mibvunzo.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Chisarudzo chekutanga chikumbiro chiri nyore. Chii chakanaka pamusoro pazvo? Iyo nyaya yekuti tinoitora totumira, uye hapana zvimwe.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Iyo dhatabhesi zvakare ine mubvunzo wepamberi, unova unonyengerera, asi unoshanda zvakanyanya. Iwe unogona zvakasiyana kutumira chikumbiro chekuparadzanisa, kuuraya, kusiyanisa kusunga, nezvimwe.

Mubvunzo wakawedzerwa chinhu chatisingazovhara mumushumo wazvino. Isu, zvichida, tinoda chimwe chinhu kubva kune database uye pane chido chekuda chakaumbwa mune imwe nzira, i.e. izvi ndizvo zvatinoda, asi hazvibviri ikozvino uye mugore rinotevera. Saka isu takangozvirekodha uye tichatenderera tichizunza vanhu vakuru.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Uye zvatingaite ndezvemubvunzo wakapfava uye wakawedzerwa mubvunzo.

Chii chakakosha pane imwe neimwe nzira?

Mubvunzo wakapfava wakanakira kuurayiwa kamwe chete. Kana zvaitwa ndokukanganwa. Uye dambudziko nderekuti haritsigire mabhinari data format, i.e. haina kukodzera kune mamwe maitiro epamusoro-maitiro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Yakawedzerwa mubvunzo - inokutendera iwe kuchengetedza nguva pakurongedza. Izvi ndizvo zvatakaita ndokutanga kushandisa. Izvi zvakatibatsira chaizvo. Hapana chete mari inochengetwa pakuenzanisa. Pane mari inochengetwa pakuendesa data. Kuendesa data mubhinari format kunonyanya kushanda.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatienderere mberi tichidzidzira. Izvi ndizvo zvinoita akajairika application. Inogona kunge iri Java, nezvimwe.

Isu takagadzira chirevo. Akaita murairo. Yakagadzirwa pedyo. Kukanganisa kupi apa? Dambudziko nderei? Hapana dambudziko. Izvi ndizvo zvarinotaura mumabhuku ose. Aya ndiwo manyorerwo azvinofanira kunyorwa. Kana iwe uchida kuita kwakanyanya, nyora seizvi.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Asi maitiro aratidza kuti izvi hazvishande. Sei? Nekuti isu tine "yepedyo" nzira. Uye kana tikaita izvi, kubva pane dhesi yekuona zvinobuda kuti zvakafanana nefodya inoshanda ne database. Takati "PARSE EXECUTE DEALLOCATE".

Sei zvese izvi zvekuwedzera kusikwa uye kurodha zvinyorwa? Hapana anodzida. Asi zvinowanzoitika muPreparedStatements ndezvekuti kana tikavhara, vanovhara zvese zviri padhatabhesi. Izvi hazvisi izvo zvatinoda.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Tinoda, sevanhu vane hutano, kushanda nehwaro. Takatora ndokugadzira chirevo chedu kamwe chete, tobva tazviita kakawanda. Muchokwadi, kazhinji - ichi kamwe muhupenyu hwese hwekushandisa - ivo vakapatsanurwa. Uye isu tinoshandisa iyo imwechete chirevo id pane akasiyana maREST. Ichi ndicho chinangwa chedu.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Tingaita sei izvi?

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Zviri nyore - hapana chikonzero chekuvhara zvirevo. Tinonyora seizvi: "gadzirira" "kuita".

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Kana tikatanga chimwe chinhu chakadai, zvino zviri pachena kuti chimwe chinhu chichafashukira pane imwe nzvimbo. Kana zvisina kujeka, unogona kuzviedza. Ngatinyorei bhenji rinoshandisa nzira iri nyore iyi. Gadzira chirevo. Isu tinoivhura pane imwe vhezheni yemutyairi uye tinoona kuti inorovera nekukurumidza nekurasikirwa kwese ndangariro yayaive nayo.

Zviri pachena kuti zvikanganiso zvakadaro zvinogadziriswa nyore nyore. Ini handisi kuzotaura nezvavo. Asi ini ndichataura kuti shanduro itsva inoshanda nekukurumidza zvikuru. Iyo nzira yakapusa, asi zvakadaro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Nzira yekushanda zvakanaka? Chii chatinofanira kuita nokuda kweizvi?

Muchokwadi, zvikumbiro zvinogara zvichivhara zvirevo. Mumabhuku ose vanoti vhara, zvikasadaro ndangariro inodeuka.

Uye PostgreSQL haizive maitiro ekuita cache mibvunzo. Izvo zvinodikanwa kuti chikamu chega chega chigadzire iyi cache pachayo.

Uye isu hatidi kutambisa nguva pakuenzanisa zvakare.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Uye senguva dzose tine sarudzo mbiri.

Sarudzo yekutanga ndeyekuti tinoitora totaura kuti ngatiputire zvese muPgSQL. Pane cache ipapo. Inobata zvese. Zvichabuda zvakanaka. Takazviona izvi. Tine 100500 zvikumbiro. Hazvishande. Hatibvumi kushandura zvikumbiro kuita maitiro pamaoko. Kwete kwete.

Tine sarudzo yechipiri - tora uye ticheke isu pachedu. Tinozarura zvinyorwa uye tinotanga kucheka. Takaona uye takaona. Zvakazoitika kuti hazvina kuoma kudaro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Izvi zvakaonekwa muna Nyamavhuvhu 2015. Iye zvino kune imwe shanduro yemazuva ano. Uye zvose zvakanaka. Inoshanda nemazvo zvekuti hapana chatinoshandura mukushandisa. Uye isu takatombomira kufunga takananga kuPgSQL, kureva kuti izvi zvaive zvakatikwanira kuti tideredze mutengo wepamusoro kusvika pazero.

Saizvozvo, Server-yakagadzirirwa zvirevo zvinobatiswa pane yechishanu kuuraya kuitira kudzivirira kutambisa ndangariro mudhatabhesi pane yega yega-nguva chikumbiro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Unogona kubvunza - nhamba dzacho dziripi? Uri kuwana chii? Uye pano handisi kuzopa nhamba, nokuti chikumbiro chimwe nechimwe chine chayo.

Mibvunzo yedu yaive yekuti takashandisa angangoita 20 milliseconds pakushambadzira pamibvunzo yeOLTP. Paive ne 0,5 milliseconds yekuurayiwa, 20 milliseconds yekuparura. Chikumbiro - 10 KB yezvinyorwa, 170 mitsara yehurongwa. Ichi chikumbiro cheOLTP. Inokumbira 1, 5, 10 mitsetse, dzimwe nguva yakawanda.

Asi isu hatina kuda kutambisa 20 milliseconds zvachose. Takadzikisa kusvika ku0. Zvese zvakanaka.

Chii chaungatora kubva pano? Kana iwe uine Java, saka iwe unotora yemazuva ano vhezheni yemutyairi uye ufare.

Kana iwe uchitaura mutauro wakasiyana, saka funga - pamwe iwe unoda izvi zvakare? Nekuti kubva pamaonero emutauro wekupedzisira, semuenzaniso, kana PL 8 kana uine LibPQ, saka hazvisi pachena kwauri kuti uri kushandisa nguva kwete pakuurayiwa, pakupatsanura, uye izvi zvakakodzera kutarisa. Sei? Zvese ndezvemahara.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Kunze kwekuti pane zvikanganiso uye zvimwe zvakasiyana. Uye isu tichataura nezvavo izvozvi. Zvizhinji zvichange zviri zvemaindasitiri ekuchera matongo, nezve zvatakawana, izvo zvatakasangana nazvo.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Kana chikumbiro chakagadzirwa zvine simba. Zvinoitika. Mumwe munhu anonamira tambo pamwechete, zvichikonzera mubvunzo weSQL.

Nei akaipa? Zvakaipa nekuti pese patinopedzisira tave netambo yakasiyana.

Uye iyo hashCode yeiyi tambo yakasiyana inoda kuverengwa zvakare. Iri ibasa reCPU - kuwana chinyorwa chakareba chekukumbira mune kunyangwe hashi iripo hazvisi nyore. Naizvozvo, mhedziso iri nyore - usaite zvikumbiro. Zvichengetedze mune imwe shanduko. Uye ufare.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Dambudziko rinotevera. Mhando dze data dzakakosha. Kune maORM anoti hazvina basa kuti rudzii rweNULL iripo, ngapave neimwe mhando. Kana Int, tobva tati setInt. Uye kana NULL, saka ngazvigare zviri VARCHAR. Uye ndeupi mutsauko wazvinoita kumagumo kuti NULL iripo? Iyo database pachayo ichanzwisisa zvese. Uye mufananidzo uyu haushande.

Mukuita, database haina basa zvachose. Kana wakataura kekutanga kuti iyi inhamba, uye kechipiri wati iVARCHAR, saka hazvibviri kushandisa zvakare Server-yakagadzirirwa zvirevo. Uye mune iyi kesi, isu tinofanirwa kugadzira zvakare chirevo chedu.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Kana iwe uri kuita iwo mubvunzo mumwe chete, ita shuwa kuti mhando dzedata dziri mukoramu yako hadzina kuvhiringwa. Iwe unofanirwa kungwarira NULL. Uku kukanganisa kwakajairika kwatakaita mushure mekunge tatanga kushandisa PreparedStatements

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Zvakanaka, batidza. Pamwe vakatora mutyairi. Uye kubudirira kwakadzikira. Zvinhu zvakashata.

Izvi zvinoitika sei? Ichi chipukanana here kana chimiro? Nehurombo, hazvina kukwanisa kunzwisisa kuti iyi ibug kana chimiro. Asi pane chiitiko chakareruka chekuburitsa dambudziko iri. Akativandira tisingatarisiri. Uye inosanganisira sampling chaiyo kubva kune imwe tafura. Isu, chokwadi, takanga tine zvikumbiro zvakawanda zvakadaro. Sezvo mutemo, vaisanganisira matafura maviri kana matatu, asi pane mamiriro ekutamba akadaro. Tora chero vhezheni kubva kune yako database uye itambe.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Icho chiripo ndechekuti isu tine makoramu maviri, imwe neimwe ine indexed. Kune miriyoni mitsara mune imwe NULL column. Uye chikamu chechipiri chine mitsara makumi maviri chete. Kana isu tichiita pasina akasungwa akasiyana, zvese zvinoshanda nemazvo.

Kana isu tikatanga kuita neakasungwa akasiyana, i.e. isu tinoita iyo "?" kana kuti β€œ$1” pachikumbiro chedu, tinopedzisira tawana chii?

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Kuurayiwa kwekutanga kwakangotarisirwa. Yechipiri inokurumidza zvishoma. Chimwe chinhu chakachengetwa. Chechitatu, chechina, chechishanu. Zvadaro bang - uye chimwe chinhu chakadaro. Uye chakaipisisa ndechekuti izvi zvinoitika pakuurayiwa kwechitanhatu. Ndiani aiziva kuti zvakanga zvakakodzera kuita kuuraya kutanhatu chaiko kuti tinzwisise kuti hurongwa hwekuuraya hwaiva hwei?

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ndiani ane mhosva? Chii chaitika? Iyo database ine optimization. Uye inoratidzika kunge yakagadziridzwa kune iyo generic kesi. Uye, maererano, kutanga pane imwe nguva, anochinjira kune generic chirongwa, icho, zvinosuruvarisa, chinogona kuve chakasiyana. Inogona kunge yakafanana, kana kuti yakasiyana. Uye kune imwe mhando yekukosha kwechikumbaridzo inotungamira kune iyi maitiro.

Chii chaungaita nezvazvo? Pano, hongu, zvakanyanya kuoma kutora chero chinhu. Pane mhinduro iri nyore yatinoshandisa. Iyi ndiyo +0, OFFSET 0. Chokwadi unoziva mhinduro dzakadaro. Isu tinongoitora towedzera "+0" kune chikumbiro uye zvese zvakanaka. Ndichakuratidzai gare gare.

Uye pane imwe sarudzo - tarisa zvirongwa zvakanyatsonaka. Mugadziri haafanire kungonyora chikumbiro, asi zvakare taura "tsanangura ongorora" ka6. Kana ari 5, hazvishande.

Uye pane yechitatu sarudzo - nyora tsamba kune pgsql-hackers. Ndakanyora, zvisinei, hazvisati zvanyatsojeka kuti iyi ibug here kana chimiro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Tichiri kufunga kuti iyi ibug kana chimiro, ngatigadzirise. Ngatitorei chikumbiro chedu towedzera "+0". Zvese zvakanaka. Zviratidzo zviviri uye haufanire kufunga nezvekuti chii kana kuti chii. Very simple. Isu takangorambidza dhatabhesi kuti isashandise index pane iyi column. Isu hatina index pane "+0" column uye ndizvozvo, dhatabhesi haishandisi index, zvose zvakanaka.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Uyu ndiwo mutemo we6 tsanangura. Iye zvino mushanduro dzemazuva ano unofanirwa kuzviita katanhatu kana iwe wakasunga zvinoshanduka. Kana iwe usina akasungwa akasiyana, izvi ndizvo zvatinoita. Uye pakupedzisira ndicho chaizvo chikumbiro ichi chinokundikana. Haisi chinhu chinonyengera.

Zvinoita sekunge, yakawanda sei inogoneka? Chipembenene pano, tsikidzi apo. Chaizvoizvo, bug iri kwese kwese.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatinyatsoongororai. Semuenzaniso, isu tine schemas maviri. Scheme A ine tafura S uye dhayagiramu B ine tafura S. Mubvunzo - sarudza data kubva patafura. Tichave nei pakadai? Tichava nekukanganisa. Tichava nezvose zviri pamusoro. Mutemo ndewekuti - bug iri kwese kwese, isu tichava nezvose zviri pamusoro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Zvino mubvunzo ndewokuti: "Sei?" Zvinoita sekunge pane zvinyorwa zvekuti kana isu tiine schema, saka pane "search_path" shanduko inotiudza kwekutsvaga tafura. Zvingaita sekuti pane shanduko.

Dambudziko nderei? Dambudziko nderekuti zvirevo zvakagadzirirwa-sevha hazvifungidzire kuti search_path inogona kuchinjwa nemumwe munhu. Kukosha uku kunoramba kuripo, sekunge, kunogara kune dhatabhesi. Uye zvimwe zvikamu zvingasatora revo itsva.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ehe, izvi zvinoenderana neshanduro yauri kuyedza pairi. Zvinoenderana nekuti matafura ako akasiyana zvakadii. Uye vhezheni 9.1 inongoita mibvunzo yekare. Shanduro itsva dzinogona kubata tsikidzi dzokuudza kuti une tsikidzi.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Seta kutsvaga_path + server-yakagadzirirwa zvirevo =
cached plan haifanire kuchinja mhedzisiro mhando

Nzira yekurapa nayo? Pane recipe iri nyore - usazviita. Iko hakuna chikonzero chekuchinja search_path apo application iri kushanda. Kana iwe ukachinja, zviri nani kugadzira chinongedzo chitsva.

Munogona kukurukura, kureva kuvhura, kukurukura, kuwedzera. Zvimwe tinogona kugonesa vanogadzira dhatabhesi kuti kana mumwe munhu achinja kukosha, dhatabhesi inofanira kuudza mutengi nezveizvi: β€œTarisa, kukosha kwako kwakagadziridzwa pano. Pamwe unofanirwa kuseta zvakare zvirevo uye wozvigadzira patsva?" Iye zvino dhatabhesi inozvibata pachivande uye haitauri neimwe nzira kuti zvirevo zvachinja pane imwe nzvimbo mukati.

Uye ini ndichasimbisa zvakare - ichi chimwe chinhu chisingawanzo kuJava. Tichaona chinhu chimwe chete muPL/pgSQL imwe kune imwe. Asi zvichaburitswa ipapo.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatiedze imwe sarudzo yedata. Tinosarudza uye tinosarudza. Tine tafura ine miriyoni mitsara. Mutsara wega wega kilobyte. Inenge gigabyte yedata. Uye isu tine ndangariro inoshanda mumushini weJava we128 megabytes.

Isu, sezvakakurudzirwa mumabhuku ese, tinoshandisa stream processing. Ndokunge, isu tinovhura resultSet uye tiverenge data kubva ipapo zvishoma nezvishoma. Zvichashanda here? Ichadonha kubva mundangariro here? Uchaverenga zvishoma here? Ngativimbei nedhatabhesi, ngativimbei nePostgres. Hatizvitendi. Tichadonha kunze kweMemory here? Ndiani akawana OutOfMemory? Ndiani akakwanisa kuzvigadzirisa mushure mezvo? Mumwe munhu akakwanisa kuzvigadzirisa.

Kana uine miriyoni mitsara, haugone kungotora nekusarudza. OFFSET/LIMIT inodiwa. Ndiani wesarudzo iyi? Uye ndiani anofarira kutamba ne autoCommit?

Pano, senguva dzose, sarudzo isingatarisirwi inoshanduka kuva yakarurama. Uye kana ukangoerekana wadzima autoCommit, zvichabatsira. Nei zvakadaro? Sainzi haizive nezvazvo.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Asi nekukasira, vatengi vese vanobatana nePostgres dhatabhesi vanotora data rese. PgJDBC haina musiyano mune izvi; inosarudza mitsetse yese.

Pane musiyano pane FetchSize theme, i.e. unogona kutaura pamwero wechirevo chakasiyana kuti pano, ndapota sarudza data ne10, 50. Asi izvi hazvishande kusvikira wadzima autoCommit. Yakadzima autoCommit - inotanga kushanda.

Asi kuenda kuburikidza nekodhi uye kuseta setFetchSize kwese kupi hazvina kunaka. Naizvozvo, takagadzira marongero ayo achataura kukosha kweiyo yekubatanidza kwese.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ndizvo zvatakataura. Iyo parameter yakagadziriswa. Uye chii chatakawana? Kana tikasarudza zviduku, kana, semuenzaniso, tinosarudza mitsara gumi panguva imwe, saka tine mari yakawanda kwazvo yepamusoro. Nokudaro, kukosha uku kunofanira kuiswa kusvika kune zana.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Zvakanaka, hongu, iwe uchiri kufanira kudzidza nzira yekuimisa mumabheti, asi iyo yekubikira ndeiyi: set defaultRowFetchSize kune anopfuura zana uye ufare.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatienderere mberi nekuisa data. Kupinza kuri nyore, kune sarudzo dzakasiyana. Semuenzaniso, INSERT, VALUES. Iyi isarudzo yakanaka. Unogona kuti "INSERT SELECT". Mukuita chinhu chimwe chete. Hapana mutsauko mukuita.

Mabhuku anoti iwe unofanirwa kuita chirevo cheBatch, mabhuku anoti unogona kuita mirairo yakaoma nemaparentheses akati wandei. Uye Postgres ine inoshamisa chimiro - unogona kuita COPY, i.e. zviite nekukurumidza.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Kana iwe ukaiyera, iwe unogona zvakare kuita zvimwe zvinonakidza zvinowanikwa. Tinoda kuti izvi zvishande sei? Hatidi kupatsanura uye kusaita mirairo isingakoshi.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Mukuita, TCP haitibvumiri kuita izvi. Kana mutengi ari mubishi kutumira chikumbiro, saka dhatabhesi haiverenge zvikumbiro mukuyedza kutitumira mhinduro. Mhedzisiro ndeyekuti mutengi anomirira dhatabhesi kuti averenge chikumbiro, uye dhatabhesi inomirira mutengi kuti averenge mhinduro.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Uye saka mutengi anomanikidzwa kutumira nguva nenguva kutumira pakiti yekuyananisa. Kuwedzera kwekubatana kwetiweki, kuwedzera kutambisa nguva.

PostgreSQL uye JDBC inosvina muto wese. Vladimir SitnikovUye patinowedzera kuvawedzera, zvinotonyanya kuipa. Mutyairi haana tariro uye anowedzera ivo kazhinji, kanenge kamwe chete mitsara mazana maviri, zvichienderana nehukuru hwemitsara, nezvimwe.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

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

Zvinoitika kuti iwe unogadzirisa mutsara mumwe chete uye zvese zvinomhanyisa kagumi. Zvinoitika. Sei? Senguva dzose, chisingaperi chakadai chakatoshandiswa pane imwe nzvimbo. Uye kukosha kwe "10" kwaireva kusashandisa batching.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Java microbenchmark harness

Zvakanaka kuti izvi hazvina kuiswa mushanduro yepamutemo. Zvakawanikwa kusunungurwa kusati kwatanga. Tsanangudzo dzese dzandinopa dzinobva pashanduro dzemazuva ano.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Ngatizviedze. Isu tinoyera InsertBatch iri nyore. Isu tinoyera InsertBatch kakawanda, kureva chinhu chimwe chete, asi pane zvakawanda zvakakosha. Tricky kufamba. Haasi munhu wese anogona kuita izvi, asi kufamba kwakapusa, kuri nyore kupfuura COPY.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Unogona kuita COPY.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Uye iwe unogona kuita izvi pane zvivakwa. Declare User default type, pass array uye INSERT yakananga patafura.

Kana iwe ukavhura chinongedzo: pgjdbc/ubenchmsrk/InsertBatch.java, ipapo iyi kodhi iri paGitHub. Iwe unogona kuona chaizvo izvo zvikumbiro zvinogadzirwa ipapo. Hazvina basa.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

We launched. Uye chinhu chekutanga chatakaona ndechekuti kusashandisa batch hazvigoneke. Yese batching sarudzo ndeye zero, i.e. nguva yekuuraya inenge zero ichienzaniswa neye-imwe-nguva kuuraya.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Isu tinoisa data. Itafura iri nyore kwazvo. Makoramu matatu. Uye chii chatinoona pano? Isu tinoona kuti ese matatu esarudzo aya akaenzana. Uye COPY iri, hongu, iri nani.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Apa ndipo patinopinza zvidimbu. Patakataura kuti imwe VALUES kukosha, mbiri VALUES, nhatu VALUES, kana taratidza gumi dzadzo dzakaparadzaniswa nekoma. Izvi zvakangochinjika manje. 10, 1, 2, 4. Zvinogona kuonekwa kuti Batch Insert, iyo yakatorwa mubhuruu, inoita kuti anzwe zviri nani zvikuru. Kureva kuti ukapinza one panguva kana kuti kana waisa mana panguva imwe chete, inova yakanaka zvakapetwa kaviri, kungoti isu takadzvanyirira zvishoma muZVINHU. Zvishoma EXECUTE mashandiro.

Kushandisa COPY pamavhoriyamu madiki hakuvimbise zvakanyanya. Handina kana kudhirowa pambiri dzekutanga. Vanoenda kudenga, kureva nhamba dzegirini idzi dzeCOPY.

COPY inofanira kushandiswa kana uine kanenge zana mitsara yedata. Iyo yepamusoro yekuvhura iyi yekubatanidza yakakura. Uye, kutaura chokwadi, ini handina kuchera munzira iyi. Ndakagadzirisa Batch, asi kwete COPY.

Chii chatinotevera? Takazviedza. Tinonzwisisa kuti tinofanira kushandisa zvingava zvimiro kana kuti bacth yakangwara inobatanidza zvirevo zvakawanda.

PostgreSQL uye JDBC inosvina muto wese. Vladimir Sitnikov

Chii chaunofanira kutora kubva mushumo yanhasi?

  • PreparedStatement ndiyo yedu yese. Izvi zvinopa zvakawanda zvekubudirira. Inoburitsa flop yakakura muchizoro.
  • Uye unofanira kuita TSANANGURA ONGORORA ka6.
  • Uye isu tinofanirwa kudzikisa OFFSET 0, uye matipi se +0 kuitira kugadzirisa chikamu chasara chemibvunzo yedu ine dambudziko.

Source: www.habr.com

Voeg