PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndikupangira kuti muwerenge zolembedwa za Vladimir Sitnikov lipoti loyambirira la 2016 "PostgreSQL ndi JDBC akufinya madzi onse"

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Masana abwino Dzina langa ndine Vladimir Sitnikov. Ndakhala ndikugwira ntchito ku NetCracker kwa zaka 10. Ndipo ndimakonda kwambiri zokolola. Chilichonse chokhudzana ndi Java, chilichonse chokhudzana ndi SQL ndi chomwe ndimakonda.

Ndipo lero ndilankhula zomwe tidakumana nazo mukampani pomwe tidayamba kugwiritsa ntchito PostgreSQL ngati seva ya database. Ndipo nthawi zambiri timagwira ntchito ndi Java. Koma zomwe ndikuuzeni lero sizongokhudza Java. Monga momwe machitidwe asonyezera, izi zimachitikanso m'zinenero zina.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tilankhula:

  • za sampuli za data.
  • Za kusunga deta.
  • Komanso za performance.
  • Ndipo za ma rakes apansi pamadzi omwe amakwiriridwa pamenepo.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tiyambe ndi funso losavuta. Timasankha mzere umodzi kuchokera patebulo potengera kiyi yoyamba.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Nawonso database ili pa gulu lomwelo. Ndipo ulimi wonsewu umatenga 20 milliseconds.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ma milliseconds 20 awa ndiambiri. Ngati muli ndi zopempha zotere 100, ndiye kuti mumathera nthawi pa sekondi iliyonse ndikufufuza zopempha izi, mwachitsanzo, tikuwononga nthawi.

Sitimakonda kuchita izi ndikuyang'ana zomwe maziko amatipatsa pa izi. Database imatipatsa njira ziwiri zochitira mafunso.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Njira yoyamba ndi pempho losavuta. Ubwino wake ndi chiyani? Zoti timazitenga ndikuzitumiza, ndipo palibenso china.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Dongosololi limakhalanso ndi funso lapamwamba, lomwe ndi lachinyengo, koma logwira ntchito kwambiri. Mutha kutumiza padera pempho la kugawa, kupha, kumanga mosiyanasiyana, ndi zina.

Funso lalitali ndichinthu chomwe sitingafotokoze mu lipoti lapano. Ife, mwinamwake, tikufuna chinachake kuchokera ku database ndipo pali mndandanda wa zofuna zomwe zapangidwa mwanjira ina, mwachitsanzo, izi ndi zomwe tikufuna, koma sizingatheke tsopano ndi chaka chamawa. Kotero ife tangojambula izo ndipo tidzayendayenda ndikugwedeza anthu akuluakulu.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndipo zomwe tingachite ndi funso losavuta komanso kufunso lalitali.

Ndi chiyani chapadera pa njira iliyonse?

Funso losavuta ndilabwino kwa nthawi imodzi. Kamodzi anachita ndi kuiwala. Ndipo vuto ndiloti siligwirizana ndi mawonekedwe a deta ya binary, mwachitsanzo, sizoyenera machitidwe ena apamwamba.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Funso lowonjezera - limakupatsani mwayi wosunga nthawi pakugawa. Izi ndi zomwe tinachita ndikuyamba kugwiritsa ntchito. Zimenezi zinatithandizadi. Sikuti ndalama zimangosungidwa pakugawa. Pali zosunga pa kusamutsa deta. Kusamutsa deta mu mawonekedwe a binary ndikothandiza kwambiri.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tipite kukachita. Umu ndi momwe pulogalamu yanthawi zonse imawonekera. Ikhoza kukhala Java, etc.

Tinapanga chiganizo. Anachita lamulo. Adapangidwa pafupi. Kulakwitsa kuli pati apa? Vuto ndi chiyani? Palibe vuto. Izi ndi zomwe limanena m'mabuku onse. Umu ndi momwe ziyenera kulembedwera. Ngati mukufuna kuchita bwino kwambiri, lembani motere.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Koma machitidwe awonetsa kuti izi sizikugwira ntchito. Chifukwa chiyani? Chifukwa tili ndi njira "yotseka". Ndipo tikachita izi, kuchokera kumalo osungirako zinthu zakale zimakhala ngati wosuta akugwira ntchito ndi database. Tinati "PARSE EXECUTE DEALLOCATE".

Chifukwa chiyani kupangidwa kowonjezera uku ndikutsitsa mawu? Palibe amene akuwafuna. Koma zomwe nthawi zambiri zimachitika mu PreparedStatements ndikuti tikawatseka, amatseka chilichonse pa database. Izi sizomwe tikufuna.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tikufuna, monga anthu athanzi, kugwira ntchito ndi maziko. Tidatenga ndikukonza mawu athu kamodzi, kenako timachita nthawi zambiri. M'malo mwake, nthawi zambiri - izi ndi kamodzi m'moyo wonse wa mapulogalamu - adasinthidwa. Ndipo timagwiritsa ntchito id mawu omwewo pama REST osiyanasiyana. Ichi ndi cholinga chathu.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Kodi tingakwaniritse bwanji zimenezi?

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndi zophweka - palibe chifukwa chotseka ziganizo. Timalemba motere: "kukonzekera" "kuchita".

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ngati tiyambitsa chinthu chonga ichi, ndiye kuti zikuwonekeratu kuti chinachake chidzasefukira kwinakwake. Ngati sizikumveka bwino, mukhoza kuyesa. Tiyeni tilembe chizindikiro chomwe chimagwiritsa ntchito njira yosavutayi. Pangani chiganizo. Timayiyambitsa pamtundu wina wa dalaivala ndipo timapeza kuti imawonongeka mofulumira ndikutayika kukumbukira zonse zomwe anali nazo.

N’zoonekeratu kuti zolakwika zoterezi zimakonzedwa mosavuta. Sindilankhula za iwo. Koma ine ndikunena kuti Baibulo latsopano ntchito mofulumira kwambiri. Njirayo ndi yopusa, komabe.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Kodi ntchito molondola? Kodi tiyenera kuchita chiyani pa izi?

M'malo mwake, mapulogalamu nthawi zonse amatseka mawu. M'mabuku onse amati kutseka, apo ayi kukumbukira kutha.

Ndipo PostgreSQL sadziwa momwe angasungire mafunso. Ndikofunikira kuti gawo lililonse lidzipangira yokha cache iyi.

Ndipo sitikufuna kuwononga nthawi ndikugawa.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndipo mwachizolowezi tili ndi njira ziwiri.

Njira yoyamba ndikuti titenge ndikunena kuti tiyeni tikulunga zonse mu PgSQL. Pali posungira pamenepo. Imasunga chilichonse. Zidzakhala zabwino kwambiri. Tinawona izi. Tili ndi zopempha 100500. sizikugwira ntchito. Sitikuvomereza kusandutsa zopempha kukhala ndondomeko pamanja. Ayi ayi.

Tili ndi njira yachiwiri - tengani ndikudula tokha. Timatsegula magwero ndikuyamba kudula. Tinaona ndi kuona. Zinapezeka kuti sizovuta kuchita.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Izi zidawoneka mu Ogasiti 2015. Tsopano pali Baibulo lamakono. Ndipo zonse nzabwino. Zimagwira ntchito bwino kwambiri kotero kuti sitisintha chilichonse pakugwiritsa ntchito. Ndipo tidasiya ngakhale kuganiza molunjika ku PgSQL, mwachitsanzo, izi zinali zokwanira kuti tichepetse ndalama zonse zapamutu mpaka ziro.

Chifukwa chake, mawu okonzekera Seva amayatsidwa pakuchita 5 kuti apewe kuwononga kukumbukira m'dawunilodi pa pempho lililonse lanthawi imodzi.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Mutha kufunsa - manambala ali kuti? Mukupeza chiyani? Ndipo apa sindipereka manambala, chifukwa pempho lililonse lili ndi zake.

Mafunso athu anali oti tidawononga pafupifupi ma milliseconds 20 posanthula mafunso a OLTP. Panali 0,5 milliseconds kuti aphedwe, 20 milliseconds kuti afotokoze. Pempho - 10 KB ya zolemba, 170 mizere ya mapulani. Ili ndi pempho la OLTP. Imapempha mizere 1, 5, 10, nthawi zina zambiri.

Koma sitinafune kuwononga 20 milliseconds konse. Tinachepetsa mpaka 0. Zonse ndi zabwino.

Kodi mungachotsepo chiyani pano? Ngati muli ndi Java, ndiye kuti mutenga mtundu wamakono wa dalaivala ndikusangalala.

Ngati mumalankhula chinenero china, ndiye ganizirani - mwinamwake mukufunikira izi? Chifukwa kuchokera pamalingaliro a chilankhulo chomaliza, mwachitsanzo, ngati PL 8 kapena muli ndi LibPQ, ndiye kuti sizodziwikiratu kuti mukuwononga nthawi osati pakuphedwa, pakugawa, ndipo izi ndizofunikira kuziwona. Bwanji? Zonse ndi zaulere.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Kupatula kuti pali zolakwika ndi zina zapadera. Ndipo tikambirana za iwo pompano. Zambiri zidzakhudza zofukula zakale zamafakitale, zomwe tapeza, zomwe tidakumana nazo.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ngati pempho lapangidwa dynamically. Zimachitika. Wina amamata zingwezo, zomwe zimapangitsa kuti pakhale funso la SQL.

Chifukwa chiyani ali woyipa? Ndizoipa chifukwa nthawi iliyonse timatha ndi chingwe chosiyana.

Ndipo hashCode ya chingwe chosiyana ichi iyenera kuwerengedwanso. Iyi ndi ntchito ya CPU - kupeza zolemba zazitali ngakhale mu hashi yomwe ilipo sikophweka. Choncho, mapeto ndi osavuta - musapange zopempha. Zisungeni mumtundu umodzi. Ndipo kondwerani.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Vuto lotsatira. Mitundu ya data ndiyofunikira. Pali ma ORM omwe amati zilibe kanthu kuti pali NULL yamtundu wanji, pakhale mtundu wina. Ngati Int, ndiye timati setInt. Ndipo ngati NULL, ndiye nthawi zonse zikhale VARCHAR. Ndipo zimapanga kusiyana kotani pamapeto pake zomwe NULL ilipo? Nawonso database yokha idzamvetsetsa zonse. Ndipo chithunzichi sichikugwira ntchito.

M'malo mwake, database siyisamala konse. Ngati mudanena koyamba kuti iyi ndi nambala, ndipo kachiwiri munanena kuti ndi VARCHAR, ndiye kuti sizingatheke kugwiritsanso ntchito mawu okonzekera Seva. Ndipo mu nkhani iyi, tiyenera kukonzanso mawu athu.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ngati mukufunsanso funso lomwelo, onetsetsani kuti mitundu ya data yomwe ili mgulu lanu siisokonezedwa. Muyenera kuyang'anira NULL. Ichi ndi cholakwika chomwe tinali nacho titayamba kugwiritsa ntchito PreparedStatements

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Chabwino, anayatsa. Mwina adatenga driver. Ndipo zokolola zidatsika. Zinthu zinafika poipa.

Kodi izi zimachitika bwanji? Kodi ichi ndi cholakwika kapena mawonekedwe? Tsoka ilo, sikunali kotheka kumvetsetsa ngati ichi ndi cholakwika kapena mawonekedwe. Koma pali njira yosavuta yopangiranso vutoli. Anatibisalira mosayembekezeka. Ndipo imakhala ndi zitsanzo zenizeni kuchokera patebulo limodzi. Ife, ndithudi, tinali ndi zopempha zambiri zoterozo. Monga lamulo, iwo anaphatikizapo matebulo awiri kapena atatu, koma pali zochitika ngati zosewerera. Tengani mtundu uliwonse kuchokera ku database yanu ndikuyisewera.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Mfundo ndi yakuti tili ndi mizati iwiri, yomwe ili ndi indexed. Pali mizere miliyoni imodzi mugawo limodzi la NULL. Ndipo gawo lachiwiri lili ndi mizere 20 yokha. Pamene tikuchita popanda zosintha zomangidwa, zonse zimagwira ntchito bwino.

Ngati tiyamba kuchita ndi zosintha zomangidwa, mwachitsanzo, timachita "?" kapena "$1" pa pempho lathu, kodi timapeza chiyani?

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Kuphedwa koyamba kuli koyenera. Wachiwiri ndi wothamanga pang'ono. Chinachake chasungidwa. Chachitatu, chachinayi, chachisanu. Ndiye bang - ndi zina zotero. Ndipo choyipa kwambiri ndikuti izi zimachitika pa kuphedwa kwachisanu ndi chimodzi. Ndani ankadziwa kuti kunali kofunika kupha anthu XNUMX ndendende kuti amvetse cholinga chenicheni cha kupha anthu?

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Wolakwa ndani? Chinachitika ndi chiyani? Nawonsonkhokwe ili ndi kukhathamiritsa. Ndipo zikuwoneka ngati zokongoletsedwa ndi generic kesi. Ndipo, motero, kuyambira nthawi ina, amasinthira ku dongosolo la generic, lomwe, mwatsoka, litha kukhala losiyana. Zitha kukhala zofanana, kapena zitha kukhala zosiyana. Ndipo pali mtundu wina wa mtengo womwe umatsogolera ku khalidweli.

Kodi mungatani nazo? Apa, ndithudi, ndizovuta kwambiri kuganiza chirichonse. Pali njira yosavuta yomwe timagwiritsa ntchito. Izi ndi +0, OFFSET 0. Ndithudi mumadziwa mayankho otere. Timangotenga ndikuwonjezera "+0" ku pempho ndipo zonse zili bwino. Ndikuwonetsani nthawi ina.

Ndipo pali njira ina - yang'anani mapulaniwo mosamala. Wopanga mapulogalamu sayenera kungolemba zopempha, komanso nenani "kufotokoza kusanthula" ka 6. Ngati ndi 5, sizigwira ntchito.

Ndipo pali njira yachitatu - lembani kalata kwa pgsql-hackers. Ndinalemba, komabe, sizikudziwika ngati izi ndi cholakwika kapena mawonekedwe.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Pamene tikuganiza ngati ichi ndi cholakwika kapena mawonekedwe, tiyeni tikonze. Tiyeni titenge pempho lathu ndikuwonjezera "+0". Zonse zili bwino. Zizindikiro ziwiri ndipo simuyenera kuganiza za momwe zilili kapena zomwe zili. Zosavuta kwambiri. Tidangoletsa nkhokwe kuti isagwiritse ntchito index yomwe ili patsambali. Tilibe cholozera pagawo la "+0" ndipo ndizomwezo, database sigwiritsa ntchito index, zonse zili bwino.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ili ndi lamulo la 6 kufotokoza. Tsopano m'matembenuzidwe amakono muyenera kuchita nthawi 6 ngati muli ndi zosintha. Ngati mulibe zosinthika zomangika, izi ndi zomwe timachita. Ndipo pamapeto pake ndi pempho ili lomwe likulephera. Sichinthu chachinyengo.

Zikuwoneka, zingatheke bwanji? Chiphuphu apa, cholakwika apo. Kwenikweni, cholakwika chili paliponse.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tione bwinobwino. Mwachitsanzo, tili ndi schemas ziwiri. Chiwembu A chokhala ndi tebulo S ndi chithunzi B chokhala ndi tebulo S. Funso - sankhani deta patebulo. Tidzakhala ndi chiyani pankhaniyi? Tidzakhala ndi cholakwika. Tidzakhala nazo zonse pamwambapa. Lamulo ndi - cholakwika chili paliponse, tidzakhala nazo zonse pamwambapa.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tsopano funso nlakuti: β€œChifukwa chiyani?” Zikuwoneka kuti pali zolembedwa kuti ngati tili ndi schema, ndiye kuti pali "search_path" yosinthika yomwe imatiuza komwe tingayang'ane tebulo. Zikuwoneka kuti pali kusintha.

Vuto ndi chiyani? Vuto ndiloti mawu okonzekera seva samakayikira kuti search_path ikhoza kusinthidwa ndi wina. Mtengo uwu umakhalabe, monga momwe zimakhalira, nthawi zonse kwa database. Ndipo mbali zina sizingatenge matanthauzo atsopano.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Zachidziwikire, izi zimatengera mtundu womwe mukuyesa. Zimatengera momwe matebulo anu amasiyanirana. Ndipo mtundu 9.1 ungochita zopempha zakale. Mabaibulo atsopano akhoza kugwira cholakwikacho ndikukuuzani kuti muli ndi cholakwika.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Khazikitsani search_path + mawu okonzekera seva =
dongosolo losungidwa siliyenera kusintha mtundu wa zotsatira

Kodi kuchitira izo? Pali njira yosavuta - musachite. Palibe chifukwa chosinthira search_path pomwe pulogalamuyo ikugwira ntchito. Ngati mutasintha, ndi bwino kupanga mgwirizano watsopano.

Mutha kukambirana, mwachitsanzo, tsegulani, kambiranani, onjezerani. Mwina tingathe kutsimikizira opanga database kuti wina akasintha mtengo wake, nkhokweyo iyenera kuuza kasitomala za izi: "Tawonani, mtengo wanu wasinthidwa pano. Mwina mukufunika kusinthanso ziganizozo ndikuzipanganso?" Tsopano databaseyo imachita mobisa ndipo silinena mwanjira iliyonse kuti mawuwo asintha kwinakwake mkati.

Ndipo ndikugogomezeranso - ichi ndichinthu chomwe sichinafanane ndi Java. Tidzawona zomwezo mu PL/pgSQL imodzi ndi imodzi. Koma idzatulutsidwanso kumeneko.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tiyese kusankha zina zambiri. Timasankha ndikusankha. Tili ndi tebulo lokhala ndi mizere miliyoni. Mzere uliwonse ndi kilobyte. Pafupifupi gigabyte ya data. Ndipo tili ndi kukumbukira ntchito mu Java makina 128 megabytes.

Ife, monga tikulimbikitsidwa m'mabuku onse, timagwiritsa ntchito mtsinje. Ndiye kuti, timatsegula resultSet ndikuwerenga zomwe zili pamenepo pang'onopang'ono. Kodi zigwira ntchito? Kodi chidzagwa kuchokera pamtima? Kodi mungawerenge pang'ono? Tiyeni tidalire nkhokwe, tidalire Postgres. Ife sitimakhulupirira izo. Kodi tidzagwa OutOFMemory? Ndani adakumana ndi OutOfMemory? Ndani adakwanitsa kukonza pambuyo pake? Winawake anakwanitsa kukonza.

Ngati muli ndi mizere miliyoni, simungangosankha ndikusankha. OFFSET/LIMIT ndiyofunikira. Ndani angasankhe? Ndipo ndani amakonda kusewera ndi autoCommit?

Apa, mwachizolowezi, njira yosayembekezeka kwambiri imakhala yolondola. Ndipo ngati mwadzidzidzi muzimitsa autoCommit, zidzakuthandizani. Ndichoncho chifukwa chiyani? Sayansi sadziwa za izi.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Koma mwachisawawa, makasitomala onse olumikizana ndi database ya Postgres amatenga zonse. PgJDBC ndiyosiyana ndi izi; imasankha mizere yonse.

Pali kusiyana pamutu wa FetchSize, mwachitsanzo, mutha kunena pamlingo wa mawu osiyana kuti apa, chonde sankhani deta ndi 10, 50. Koma izi sizikugwira ntchito mpaka mutazimitsa autoCommit. Yazimitsa autoCommit - iyamba kugwira ntchito.

Koma kudutsa nambala ndikukhazikitsa setFetchSize kulikonse ndikovuta. Chifukwa chake, tidapanga zoikamo zomwe zinganene mtengo wokhazikika wa kulumikizana konse.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndi zomwe tanena. Parameter yakonzedwa. Ndipo tinapeza chiyani? Ngati tisankha ndalama zing'onozing'ono, ngati, mwachitsanzo, tisankha mizere 10 panthawi imodzi, ndiye kuti timakhala ndi ndalama zambiri. Choncho, mtengo uwu uyenera kukhazikitsidwa pafupifupi zana.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Momwemo, inde, muyenera kuphunzira momwe mungachepetsere ma byte, koma Chinsinsi ndi ichi: ikani defaultRowFetchSize kupitilira zana ndikusangalala.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tipitirire kuyika deta. Kulowetsa ndikosavuta, pali zosankha zosiyanasiyana. Mwachitsanzo, INSERT, VALUES. Iyi ndi njira yabwino. Mutha kunena kuti "INSERT SELECT". Mukuchita ndi chinthu chomwecho. Palibe kusiyana pakuchita.

Mabuku amanena kuti muyenera kuchita mawu a Batch, mabuku amanena kuti mukhoza kupereka malamulo ovuta kwambiri ndi mapologalamu angapo. Ndipo Postgres ili ndi mawonekedwe abwino - mutha kuchita COPY, mwachitsanzo, chitani mwachangu.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Mukachiyesa, mutha kupezanso zinthu zosangalatsa. Kodi tikufuna kuti izi zigwire ntchito bwanji? Sitikufuna kuwerengera komanso kusapereka malamulo osafunikira.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Mwakuchita, TCP sichilola kuti tichite izi. Ngati kasitomala ali wotanganidwa kutumiza pempho, ndiye kuti databaseyo siwerenga zopemphazo pofuna kutitumizira mayankho. Chotsatira chake ndikuti kasitomala amadikirira database kuti awerenge pempho, ndipo database imadikirira kuti kasitomala awerenge yankho.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndipo chifukwa chake kasitomala amakakamizika kutumiza nthawi ndi nthawi paketi yolumikizira. Kuyanjana kowonjezera pa intaneti, kuwononga nthawi yowonjezera.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir SitnikovNdipo tikamawonjezera, zimafika poipa kwambiri. Dalaivala alibe chiyembekezo ndipo amawonjezera nthawi zambiri, pafupifupi kamodzi pa mizere 200, kutengera kukula kwa mizere, ndi zina.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

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

Zimachitika kuti mungokonza mzere umodzi wokha ndipo chilichonse chidzafulumizitsa nthawi 10. Zimachitika. Chifukwa chiyani? Monga mwachizolowezi, chokhazikika chonga ichi chakhala chikugwiritsidwa ntchito kwinakwake. Ndipo mtengo "128" umatanthauza kusagwiritsa ntchito batching.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Java microbenchmark harness

Ndibwino kuti izi sizinaphatikizidwe mu mtundu wovomerezeka. Zadziwika kumasulidwa kusanayambe. Matanthauzo onse omwe ndimapereka amachokera ku matembenuzidwe amakono.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tiyeni tiyese. Timayesa InsertBatch mophweka. Timayesa InsertBatch kangapo, mwachitsanzo, chinthu chomwecho, koma pali zinthu zambiri. Kusuntha kwachinyengo. Sikuti aliyense angathe kuchita izi, koma ndi kusuntha kosavuta, kosavuta kuposa COPY.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Mutha kuchita COPY.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Ndipo mutha kuchita izi pazomangamanga. Fotokozerani mtundu wokhazikika wa User, pass array ndi INSERT molunjika patebulo.

Ngati mutsegula ulalo: pgjdbc/ubenchmsrk/InsertBatch.java, ndiye kuti code iyi ili pa GitHub. Mutha kuwona zomwe zopempha zimapangidwa pamenepo. Zilibe kanthu.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Tinayambitsa. Ndipo chinthu choyamba chomwe tidazindikira ndikuti kusagwiritsa ntchito batch sikutheka. Zosankha zonse za batching ndi ziro, mwachitsanzo, nthawi yophedwa ndi ziro poyerekeza ndi kuphedwa kamodzi.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Timayika deta. Ndi tebulo losavuta kwambiri. Mizati itatu. Ndipo tikuwona chiyani apa? Tikuwona kuti zosankha zonse zitatuzi ndizofanana. Ndipo COPY ndiyabwinoko.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Apa ndi pamene timayika zidutswa. Pamene tinanena kuti mtengo umodzi wa VALUES, miyeso iwiri ya VALUES, miyeso itatu ya VALUES, kapena timasonyeza 10 mwa iwo olekanitsidwa ndi koma. Izi zangopingasa tsopano. 1, 2, 4, 128. Zitha kuwoneka kuti Batch Insert, yomwe imakokedwa ndi buluu, imamupangitsa kumva bwino kwambiri. Ndiko kuti, mukalowetsa chimodzi panthawi kapena ngakhale mutalowetsa zinayi panthawi imodzi, zimakhala zabwino kuwirikiza kawiri, chifukwa chakuti tinapanikizana pang'ono mu VALUES. Zochepa za EXECUTE.

Kugwiritsa ntchito COPY pamavoliyumu ang'onoang'ono ndikopanda chiyembekezo. Sindinajambulenso pa ziwiri zoyambirirazo. Amapita kumwamba, ndiye kuti, manambala obiriwira awa a COPY.

COPY iyenera kugwiritsidwa ntchito mukakhala ndi mizere yosachepera zana. Ntchito yotsegula kulumikizana uku ndi yayikulu. Ndipo, kunena zoona, sindinafufuze mbali iyi. Ndinakonza Batch, koma osati COPY.

Kenako titani? Tinayesera izo. Timamvetsetsa kuti tifunika kugwiritsa ntchito zomangira kapena bacth yochenjera yomwe imaphatikiza matanthauzo angapo.

PostgreSQL ndi JDBC finyani madzi onse. Vladimir Sitnikov

Kodi muyenera kuchotsa chiyani mu lipoti la lero?

  • PreparedStatement ndiye chilichonse chathu. Izi zimapereka zambiri zokolola. Amatulutsa kupindika kwakukulu mumafuta.
  • Ndipo muyenera kuchita KUSUNGA ZOKHUDZA 6 nthawi.
  • Ndipo tiyenera kuchepetsa OFFSET 0, ndi zidule ngati +0 kuti tikonze gawo lotsala la mafunso athu ovuta.

Source: www.habr.com

Kuwonjezera ndemanga