PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ou te fautua atu ia e faitau le tusitusiga o le lipoti a Vladimir Sitnikov i le amataga o le 2016 "PostgreSQL ma le JDBC o loʻo oomi uma le sua"

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Manuia le aoauli O loʻu igoa o Vladimir Sitnikov. Sa ou galue mo NetCracker mo le 10 tausaga. Ma o le tele lava o a'u i le gaosiga. O mea uma e fesoʻotaʻi ma Java, mea uma e fesoʻotaʻi ma SQL o le mea ou te fiafia i ai.

Ma o le asō o le a ou talanoa e uiga i mea na matou fetaiai i le kamupani ina ua amata ona matou faʻaaogaina PostgreSQL e avea o se faʻamaumauga tuʻufaʻatasia. Ma e tele lava matou galulue ma Java. Ae o le mea o le a ou taʻuina atu ia te oe i le aso e le naʻo Java. E pei ona faaalia i faiga masani, e tupu foi lenei mea i isi gagana.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le a tatou talanoa:

  • e uiga i fa'ata'ita'iga fa'amaumauga.
  • E uiga i le faasaoina o faamatalaga.
  • Ma e uiga foi i le faatinoga.
  • Ma e uiga i salu i lalo o le vai o loo tanumia ai iina.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Sei o tatou amata i se fesili faigofie. Matou te filifilia se laina se tasi mai le laulau e faʻatatau i le ki autu.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O lo'o iai le fa'amaumauga i luga o le fale e tasi. Ma o nei fa'ato'aga uma e 20 milliseconds.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O nei 20 milliseconds e tele. Afai e 100 au talosaga faapena, ona e faʻaaluina lea o le taimi i le sekone e taʻavale ai i nei talosaga, o lona uiga o loʻo matou faʻaumatia le taimi.

Matou te le fiafia e fai lenei mea ma vaʻavaʻai i mea o loʻo ofoina mai e le faʻavae ia i matou mo lenei mea. O lo'o tu'uina mai e le fa'amaumauga ni filifiliga se lua mo le fa'atinoina o fesili.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le filifiliga muamua o se talosaga faigofie. O le a le lelei o lea mea? O le mea moni tatou te aveina ma auina atu, ma e leai se isi mea.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

O loʻo i ai foʻi i le database se suʻesuʻega alualu i luma, lea e sili atu ona taufaasese, ae sili atu ona aoga. E mafai ona e tuʻu eseʻese se talosaga mo le faʻavasegaina, faʻataunuʻuina, fesuiaʻi fusi, ma isi.

Ole su'esu'ega fa'alautele tele ose mea o le a tatou le fa'amatalaina ile lipoti o iai nei. Matou, masalo, e manaʻo i se mea mai le database ma o loʻo i ai se lisi o manaʻoga ua faia i nisi tulaga, o lona uiga o le mea lea matou te mananaʻo ai, ae e le mafai nei ma i le isi tausaga. O lea na ona matou faamaumauina ma o le a matou feoai solo e luluina tagata autu.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ma o le mea e mafai ona tatou faia o le fesili faigofie ma fesili faʻalautele.

O le a le mea faʻapitoa e uiga i auala taʻitasi?

O se fesili faigofie e lelei mo le faʻatinoina o le tasi taimi. A uma ona fai ae galo. Ma o le faʻafitauli e le o lagolagoina le faʻasologa o faʻamaumauga binary, o lona uiga e le talafeagai mo nisi faiga maualuga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Fesili fa'alautele - e mafai ai ona e fa'asaoina le taimi ile fa'avasegaina. O le mea lea na matou faia ma amata faʻaaoga. Na fesoasoani tele lenei mea ia i matou. E le gata ina fa'asaoina ile fa'avasegaina. O loʻo i ai sefe i luga o faʻamatalaga faʻamatalaga. O le fa'aliliuina o fa'amatalaga i le fa'asologa fa'alua e sili atu ona lelei.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Sei o tatou agai i luma e faataitai. O le mea lea e foliga mai o se talosaga masani. E mafai ona avea ma Java, ma isi.

Na matou faia se faʻamatalaga. Faia le poloaiga. Fausia latalata. O fea le mea sese iinei? O le a le faafitauli? Leai se faafitauli. O le mea lea o loo fai mai ai i tusi uma. O le ala lea e tatau ona tusia ai. Afai e te manaʻo i le faʻatinoga maualuga, tusi faʻapea.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ae ua faaalia e le faataʻitaʻiga e lē aogā lea tulaga. Aisea? Aua o loʻo i ai a tatou auala "latalata". Ma pe a tatou faia lenei mea, mai le faʻamatalaga faʻamaumauga e foliga mai e pei o se ulaula o loʻo galue ma se faʻamaumauga. Na matou fai atu "PARSE EXECUTE DEALLOCATE".

Aisea ua faia ai nei mea uma ma le lafoaia o faamatalaga? E leai se tasi e mana'omia. Ae o le mea e masani ona tupu i PreparedStatements o le taimi tatou te tapunia ai, latou te tapunia mea uma i luga o le database. E le o le mea lea tatou te mananao ai.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Matou te mananaʻo, pei o tagata soifua maloloina, e galulue ma le faʻavae. E tasi ona ave ma saunia le matou faamatalaga, ona faatino lea i le tele o taimi. O le mea moni, o le tele o taimi - e tasi lenei i le olaga atoa o talosaga - ua uma ona faʻasalalau. Ma matou faʻaogaina le faʻamatalaga tutusa id i REST eseese. O la tatou sini lea.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

E mafai faapefea ona tatou ausia lenei mea?

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

E matua faigofie lava - e le manaʻomia ona tapunia faʻamatalaga. Matou te tusia e pei o lenei: "saunia" "faʻatino".

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Afai tatou te faʻalauiloaina se mea faʻapenei, o lona uiga e manino lava e iai se mea o le a lofia i se mea. Afai e le o manino, e mafai ona e taumafai i ai. Se'i o tatou tusia se fa'ailoga e fa'aogaina ai lenei auala faigofie. Fausia se faʻamatalaga. Matou te faʻalauiloaina i luga o nisi faʻamatalaga o le avetaavale ma iloa ai e vave lava ona paʻu i le leiloa o manatuaga uma na i ai.

E manino lava o ia mea sese e faigofie ona faasaʻoina. O le a ou le talanoa e uiga ia i latou. Ae o le a ou fai atu o le lomiga fou e galue tele vave. O le auala e valea, ae o lea lava.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

E fa'afefea ona galue sa'o? O le a le mea e tatau ona tatou faia mo lenei mea?

O le mea moni, o talosaga e tapunia i taimi uma faʻamatalaga. I tusi uma latou te fai mai e tapuni, a le o lea o le a galo le manatua.

Ma PostgreSQL e le iloa pe faʻafefea ona faʻaogaina fesili. E tatau ona faia e vasega taʻitasi lenei faʻaoga mo ia lava.

Ma matou te le manaʻo e faʻaumatia le taimi i le faʻasalalauga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ma e pei ona masani ai e lua a tatou filifiliga.

O le filifiliga muamua o le tatou ave lea ma fai atu tatou afifi mea uma ile PgSQL. O loʻo i ai se faʻaoga iina. E natia mea uma. O le a sili atu le lelei. Na matou vaʻaia lenei mea. E 100500 a matou talosaga. E le aoga. Matou te le malilie e fa'aliliuina talosaga i faiga fa'atino ma le lima. Leai leai.

E i ai le matou filifiliga lona lua - ave ma tipi i matou lava. Matou te tatalaina punavai ma amata ona tipi. Sa matou vaai ma vaai. Na aliali mai e le faigata tele ona fai.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

Na aliali mai ia Aokuso 2015. O lea ua iai se fa'aonaponei fa'aonaponei. Ma e lelei mea uma. E lelei tele e matou te le suia ai se mea i totonu o le talosaga. Ma na matou taofi foi le mafaufau i le itu o le PgSQL, o lona uiga ua lava lea mo i matou e faʻaitiitia uma tau o loʻo i luga i le toetoe lava leai.

E tusa ai, o faʻamatalaga saunia e le Server o loʻo faʻagaoioia ile 5th execution ina ia aloese mai le faʻamaʻimau manatua i totonu o faʻamaumauga i luga ole talosaga taʻitasi.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Atonu e te fesili – o fea o iai numera? O a mea e te maua? Ma o iinei o le a ou le tuʻuina atu numera, aua o talosaga taʻitasi e iai lona lava.

O a matou fesili na fa'aalu e tusa ma le 20 miliseconds i le fa'avasegaina o fesili OLTP. E 0,5 milliseconds mo le fa'atinoina, 20 milliseconds mo le fa'avasegaina. Talosaga - 10 KiB o tusitusiga, 170 laina o fuafuaga. Ole talosaga lea ole OLTP. E manaʻomia 1, 5, 10 laina, o nisi taimi e sili atu.

Ae matou te leʻi manaʻo e faʻaumatia le 20 miliseconds. Na matou faʻaititia i le 0. E lelei mea uma.

O le a se mea e mafai ona e aveesea mai iinei? Afai ei ai lau Java, ona e ave lea o le faʻaonaponei o le avetaavale ma fiafia.

Afai e te tautala i se gagana ese, ona e mafaufau lea - atonu e te manaʻomia foʻi lenei mea? Talu ai mai le manatu o le gagana mulimuli, mo se faʻataʻitaʻiga, afai PL 8 poʻo e iai lau LibPQ, o lona uiga e le o manino ia te oe o loʻo e faʻaaluina le taimi e le o le faʻataunuʻuina, i luga o le parsing, ma e aoga le siakiina. E faapefea? E leai se totogi o mea uma.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Vagana ai o loʻo i ai mea sese ma nisi mea faʻapitoa. Ma o le a tatou talanoa e uiga ia i latou i le taimi nei. Ole tele ole a fa'atatau ile su'esu'ega tau alamanuia, e uiga i mea na tatou maua, mea na tatou maua.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Afai o le talosaga e gaosia dynamically. E tupu. E fa'apipi'i fa'atasi e se tasi ia manoa, ma maua ai se fesili SQL.

Aiseā ua leaga ai o ia? E leaga aua o taimi uma tatou te fa'ai'u ai i se manoa eseese.

Ma o le hashCode o lenei manoa eseese e manaʻomia ona toe faitau. Ole mea moni ole galuega ole PPU - ole su'eina o se tusi talosaga umi i totonu e oo lava ile hash o iai e le faigofie tele. O le mea lea, o le faaiuga e faigofie - aua le faʻatupuina talosaga. Teu i latou i se tasi fesuiaiga. Ma olioli.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le isi faafitauli. E taua ituaiga faʻamatalaga. E i ai ORM e fai mai e le afaina po o le a le ituaiga NULL o loʻo i ai, ia i ai se ituaiga. Afai Int, ona matou fai atu lea setInt. Ma afai e NULL, ona tuʻu lea i taimi uma VARCHAR. Ma o le a le eseesega e faia i le faaiuga o le a le NULL iina? O le database lava ia o le a malamalama i mea uma. Ma e le aoga lenei ata.

I le fa'ata'ita'iga, e le popole lava le database. Afai na e fai mai i le taimi muamua o le numera lenei, ma o le taimi lona lua na e fai mai ai o le VARCHAR, ona le mafai lea ona toe faʻaaogaina faʻamatalaga saunia e le Server. Ma i lenei tulaga, e tatau ona tatou toe faia a tatou faamatalaga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Afai o lo'o e fa'atinoina le fesili lava e tasi, ia mautinoa e le fenumiai ituaiga fa'amaumauga i lau koluma. E tatau ona e mataala mo NULL. Ole mea masani lea na matou maua ina ua uma ona matou faʻaogaina PreparedStatements

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Lelei, ki. Masalo na latou ave le avetaavale. Ma ua pa'ū le gaosiga. Ua leaga mea.

E faapefea ona tupu lenei mea? O se mea sese po'o se fa'aaliga? Ae paga lea, sa le mafai ona malamalama pe o se mea sese poʻo se faʻaaliga. Ae o loʻo i ai se faʻataʻitaʻiga faigofie tele mo le toe faia o lenei faʻafitauli. Sa ia faafuaseʻi lava ona lalafi mai ia i matou. Ma e aofia ai le sampling moni mai le tasi laulau. O le mea moni, sa tele atu a matou talosaga faapena. I le avea ai o se tulafono, latou te aofia ai ni laulau se lua pe tolu, ae o loʻo i ai se faʻataʻitaʻiga toe faʻafoʻi. Ave soʻo se faʻamatalaga mai lau faʻamaumauga ma taʻalo.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

O le manatu e lua a tatou koluma, o ia mea taitasi e faasino igoa. E miliona laina i le tasi koluma NULL. Ma o le koluma lona lua e na o le 20 laina. A tatou faʻatinoina e aunoa ma ni fesuiaiga faʻapipiʻi, e lelei mea uma.

Afai tatou te amata faʻatinoina faʻatasi ma fesuiaʻiga fusifusia, o lona uiga tatou te faia le "?" po'o le “$1” mo la tatou talosaga, o le a le mea tatou te maua?

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

O le faatinoga muamua e pei ona faamoemoeina. O le lona lua e fai si saoasaoa. Sa natia se mea. Tolu, fa, lima. Ona paʻu lea - ma se mea faapena. Ma o le mea sili ona leaga e tupu lenei mea i le faʻasalaga lona ono. O ai na iloa e tatau ona faia saʻo le ono faʻasalaga ina ia malamalama pe o le a le fuafuaga faʻataunuʻu?

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O ai e sala? O le a le mea ua tupu? O lo'o iai le fa'amaumauga tu'ufa'atasiga. Ma e foliga mai e sili ona lelei mo le tulaga lautele. Ma, e tusa ai, e amata i se taimi, na te sui i se fuafuaga lautele, lea, o le mea e leaga ai, atonu e foliga mai e ese. Atonu e foliga mai e tutusa, pe eseese foi. Ma o loʻo i ai se ituaiga o faʻailoga taua e taʻitaʻia ai lenei amio.

O le a se mea e mafai ona e faia i ai? O iinei, ioe, e sili atu ona faigata le faʻamoemoeina o se mea. E i ai se fofo faigofie tatou te faʻaaogaina. Ole +0 lea, OFFSET 0. E mautinoa e te iloa fofo faapena. Naʻo matou ave ma faʻaopopo le "+0" i le talosaga ma o loʻo lelei mea uma. O le a ou faaali atu ia te oe mulimuli ane.

Ma o loʻo i ai se isi filifiliga - vaʻavaʻai lelei i fuafuaga. E le gata e tatau i le tagata atiae ona tusia se talosaga, ae fai mai foi "faʻamatala auiliiliga" 6 taimi. Afai e 5, e le aoga.

Ma o loʻo i ai le filifiliga lona tolu - tusi se tusi i pgsql-hackers. Na ou tusia, peitaʻi, e leʻi manino mai pe o se bug poʻo se faʻaaliga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

A o tatou mafaufau pe o se mea sese poʻo se mea, seʻi o tatou faʻaleleia. Se'i ave la tatou talosaga ma faaopoopo le "+0". Ua lelei mea uma. Lua faʻailoga ma e te le tau mafaufau pe faʻafefea pe o le a foi. Faigofie tele. Na matou fa'asaina le fa'amaumauga mai le fa'aogaina o se fa'asino i luga o lenei koluma. E leai se matou faʻamatalaga i luga o le koluma "+0" ma o le mea lena, e le faʻaogaina e le database le faasino igoa, o loʻo lelei mea uma.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ole tulafono lea ole 6 fa'amatala. I le taimi nei i lomiga o loʻo i ai nei, e tatau ona e faia faʻa 6 taimi pe afai e iai sau fesuiaiga. Afai e le o iai ni au fesuiaiga, o le mea lea matou te faia. Ma i le faaiuga o le talosaga tonu lava lea e le manuia. E le o se mea taufaasese.

E foliga mai, o le a le tele e mafai? Se bug iinei, se bug iina. O le mea moni, o le bug o loʻo i soo se mea.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Sei o tatou tilotilo totoa. Mo se faʻataʻitaʻiga, e lua a matou fuafuaga. Fuafuaga A ma le laulau S ma le ata B ma le laulau S. Fesili – filifili fa'amaumauga mai se laulau. O le a le mea o le a tatou maua i lenei tulaga? O le a tatou maua se mea sese. O le a tatou maua mea uma o loʻo i luga. O le tulafono - o loʻo i ai se pusa i soʻo se mea, o le a tatou maua uma mea o loʻo i luga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le fesili la o le: “Aisea?” E foliga mai o loʻo i ai faʻamaumauga e faʻapea afai ei ai sau fuafuaga, o loʻo i ai se fesuiaiga "search_path" e taʻu mai ia i tatou le mea e suʻe ai le laulau. E foliga mai e iai se suiga.

O le a le faafitauli? O le fa'afitauli o fa'amatalaga na saunia e le server e le masalomia o le search_path e mafai ona suia e se tasi. O lenei tau e tumau, e pei ona i ai, tumau mo le database. Ma o nisi vaega atonu e le maua ni uiga fou.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ioe, e fa'alagolago lea i le version o lo'o e su'eina ai. Fa'alagolago i le ogaoga o le eseesega o au laulau. Ma o le version 9.1 o le a naʻo le faʻatinoina o talosaga tuai. O fa'aliliuga fou e ono pu'eina le pusi ma ta'u atu ia te oe o lo'o i ai sau pusi.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Seti search_path + fa'amatalaga saunia e le server =
e le tatau ona suia le ituaiga o taunuuga

E faapefea ona togafitia? E i ai se fua faigofie - aua le faia. E leai se mana'oga e sui search_path a'o fa'agasolo le talosaga. Afai e te sui, e sili atu le faia o se fesoʻotaʻiga fou.

E mafai ona e talanoaina, i.e. tatala, talanoaina, faaopoopo. Masalo e mafai ona tatou faʻamaonia le au atinaʻe faʻamaumauga pe a suia e se tasi se tau, e tatau i le database ona taʻu atu i le kalani e uiga i lenei mea: "Vaʻai, ua faʻafouina lou tau iinei. Masalo e te manaʻomia le toe setiina o faʻamatalaga ma toe faia?" O le taimi nei o le database e amio faalilolilo ma e le lipotia i soo se auala o faʻamatalaga ua suia i se mea i totonu.

Ma o le a ou toe faamamafa atu - o se mea e le masani ai Java. O le a tatou vaʻai i le mea lava e tasi i PL/pgSQL tasi i le tasi. Ae o le a toe faia iina.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Se'i o tatou taumafai i nisi fa'amatalaga filifiliga. Tatou te filifili ma filifili. E i ai le matou laulau ma le miliona laina. O laina ta'itasi o le kilobyte. E tusa ma le gigabyte o faʻamaumauga. Ma o loʻo i ai se matou manatuaga galue i le masini Java o 128 megabytes.

Matou, e pei ona fautuaina i tusi uma, e faʻaogaina le faʻaogaina o vaitafe. O lona uiga, matou te tatalaina le resultSet ma faitau faʻamaumauga mai iina i sina mea itiiti. Mata e aoga? Pe o le a pau mai le manatua? E te faitau teisi? Tatou fa'alagolago i le database, tatou fa'alagolago i Postgres. Matou te le talitonu i ai. O le a tatou pa'u ese OutOFMemory? O ai na iloa OutOfMemory? O ai na mafai ona toe faaleleia ina ua uma lena? Sa mafai e se tasi ona faaleleia.

Afai e miliona lau laina, e le mafai ona e filifili ma filifili. OFFSET/LIMIT e mana'omia. O ai mo lenei filifiliga? Ma o ai e fiafia e taʻalo i le autoCommit?

O iinei, e pei ona masani ai, o le filifiliga sili ona le mafaufauina e saʻo. Ma afai e te faʻafuaseʻi ona tape le autoCommit, o le a fesoasoani. Aisea ua faapea ai? E le iloa e Saienisi lenei mea.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ae ona o le faaletonu, o tagata uma e fesoʻotaʻi atu i le Postgres database e aumai uma faʻamaumauga. PgJDBC e leai se tuusaunoaga i lenei tulaga; na te filifilia laina uma.

O loʻo i ai se fesuiaiga i luga o le FetchSize theme, o lona uiga e mafai ona e fai atu i le tulaga o se faʻamatalaga eseese o iinei, faʻamolemole filifili faʻamatalaga e 10, 50. Ae e le aoga lenei mea seʻia e tape le autoCommit. Tape le autoCommit - ua amata ona galue.

Ae o le alu i le code ma le seti setFetchSize i soo se mea e le faigofie. O le mea lea, na matou faia se faʻatulagaga o le a taʻu mai ai le tau faʻaletonu mo le fesoʻotaʻiga atoa.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le mea lena na matou fai atu ai. Ua uma ona fetuutuunai le parakalafa. Ma o le a le mea na tatou maua? Afai tatou te filifilia ni vaega laiti, pe afai, mo se faʻataʻitaʻiga, tatou te filifilia laina 10 i le taimi, ona tele ai lea o a tatou tau i luga ole ulu. O le mea lea, o lenei tau e tatau ona seti i le tusa ma le selau.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le mea lelei, ioe, e tatau lava ona e aʻoaʻoina pe faʻafefea ona faʻatapulaʻaina i bytes, ae o le fua o lenei: seti defaultRowFetchSize i le sili atu ma le selau ma fiafia.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Sei o tatou agai atu i le faaofiina o faamatalaga. E faigofie le faʻaofiina, e iai filifiliga eseese. Mo se fa'ata'ita'iga, INSERT, VALUES. O se filifiliga lelei lea. E mafai ona e fai atu “INSERT SELECT”. I le faatinoga o le mea lava lea e tasi. E leai se eseesega i le faatinoga.

Fai mai tusi e te manaʻomia le faʻatinoina o se faʻamatalaga o le Batch, o tusi e fai mai e mafai ona e faʻatinoina tulafono sili atu ona faigata ma le tele o puipui. Ma o Postgres e iai se uiga matagofie - e mafai ona e faia COPY, o lona uiga, fai vave.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Afai e te fuaina, e mafai ona e toe faia ni su'esu'ega manaia. E fa'afefea ona tatou manana'o e galue lenei mea? Matou te mananaʻo e aua neʻi faʻasalalau ma aua le faia ni faʻatonuga le manaʻomia.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

I le faʻatinoga, e le faʻatagaina i matou e le TCP e faia lenei mea. Afai o loʻo pisi le kalani ile lafoina o se talosaga, ona le faitauina lea e le database ia talosaga i le taumafai e lafo mai ia i matou tali. O le i'uga o le fa'atali lea o le kalani mo le database e faitau le talosaga, ae fa'atali le database mo le tagata o tausia e faitau le tali.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ma o le mea lea e faamalosia ai le tagata o tausia e lafo mai i lea taimi ma lea taimi se pusa faʻatasi. Fa'aopoopo feso'ota'iga feso'ota'iga, fa'ama'imau taimi.

PostgreSQL ma JDBC oomi uma le sua. Vladimir SitnikovMa o le tele tatou te faʻaopoopoina, o le sili atu ona leaga. O le avetaavale e matua le mautonu ma faʻaopoopoina i latou i le tele o taimi, pe a ma le tasi i le 200 laina, faʻatatau i le tele o laina, ma isi.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

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

E tupu e faʻasaʻo naʻo le tasi le laina ma o mea uma o le a faʻavaveina 10 taimi. E tupu. Aisea? E pei ona masani ai, ua uma ona faʻaaogaina se mea faifaipea i se mea. Ma o le tau "128" o lona uiga e le faʻaaogaina le faʻapipiʻiina.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Java microbenchmark fusi

E lelei ona e leʻi aofia ai i le lomiga aloaia. Na maua a'o le'i amataina le tatalaina. O faauigaga uma ou te tuuina atu e faavae i lomiga faaonaponei.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Tatou taumafai i ai. Matou te fuaina le InsertBatch faigofie. Matou te fuaina le InsertBatch i le tele o taimi, o lona uiga o le mea lava e tasi, ae e tele mea taua. Fai togafiti. E le mafai e tagata uma ona faia lenei mea, ae o se gaioiga faigofie, sili atu le faigofie nai lo COPY.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

E mafai ona e faia KOPI.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Ma e mafai ona e faia lenei mea i luga o fausaga. Fa'ailoa le ituaiga fa'aletonu a le tagata, pasi le laina ma INSERT sa'o ile laulau.

Afai e te tatalaina le fesoʻotaʻiga: pgjdbc/ubenchmsrk/InsertBatch.java, o loʻo iai le code lenei ile GitHub. E mafai ona e va'ai fa'apitoa po'o a talosaga o lo'o faia iina. Leai se mea o iai.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Sa matou tatalaina. Ma o le mea muamua na matou iloa o le le faʻaaogaina o le vaega e faigofie lava. O filifiliga fa'aputu uma e leai, o lona uiga o le taimi fa'atino e toetoe lava leai se fa'atusatusa i le fa'atinoina e tasi le taimi.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

Matou te tuʻuina faʻamaumauga. O se laulau faigofie tele. E tolu koluma. Ma o le a le mea ua tatou vaaia iinei? Matou te vaʻaia o nei filifiliga uma e tolu e faʻatusatusa. Ma o le COPY e sili atu.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le taimi lea matou te faʻapipiʻi ai fasipepa. Ina ua matou fai atu e tasi le taua o le VALUES, lua VALUES tau, tolu VALUES tau, pe na matou faʻaalia le 10 o latou e tuʻu eseese i se koma. Ua na'o le faalava i le taimi nei. 1, 2, 4, 128. E mafai ona iloa o le Batch Insert, lea e tusia i le lanumoana, e sili atu lona lagona. O lona uiga, a e fa'aofi tasi i le taimi po'o lou fa'aofiina fo'i i le taimi, e fa'aluaina le lelei, ona na tatou fa'apipi'i teisi i totonu ole VALUES. Fa'aitiitiga fa'atino fa'atinoga.

O le fa'aaogaina o le COPY i luga o voluma laiti e matua'i fa'atauva'a lava. Ou te le'i tusia foi le ata muamua e lua. Latou te o i le lagi, o lona uiga, o numera lanumeamata nei mo KOPI.

E tatau ona fa'aoga COPY pe a itiiti ifo ma le selau laina o fa'amaumauga. O le maualuga o le tatalaina o lenei fesoʻotaʻiga e tele. Ma, ia faʻamaoni, ou te leʻi eli i lenei itu. Na ou fa'aogaina le Batch, ae le o le COPY.

O le a le isi mea tatou te faia? Sa matou taumafai i ai. Matou te malamalama e manaʻomia le faʻaogaina o fausaga poʻo se bacth atamai e tuʻufaʻatasia le tele o uiga.

PostgreSQL ma JDBC oomi uma le sua. Vladimir Sitnikov

O le a se mea e tatau ona e ave'esea mai le lipoti o lenei aso?

  • PreparedStatement o a tatou mea uma lava. O lenei mea e maua ai le tele mo le gaosiga. E maua ai se pa'u tele i le suauu.
  • Ma e tatau ona e faia FA'AMANATU ILOILO 6 taimi.
  • Ma e manaʻomia ona faʻaitiitia le OFFSET 0, ma togafiti e pei o le +0 ina ia faʻasaʻo le pasene o totoe o a tatou faʻafitauli faʻafitauli.

puna: www.habr.com

Faaopoopo i ai se faamatalaga