PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

M na-atụ aro ka ị gụọ transcript nke Vladimir Sitnikov's mmalite 2016 akụkọ "PostgreSQL na JDBC na-amịpụ ihe ọṅụṅụ niile"

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ehihie ọma Aha m bụ Vladimir Sitnikov. Anọ m na-arụ ọrụ maka NetCracker afọ 10. Na m na-akasị na arụpụtaghị ihe. Ihe niile metụtara Java, ihe niile metụtara SQL bụ ihe m hụrụ n'anya.

Ma taa, m ga-ekwu maka ihe anyị zutere na ụlọ ọrụ ahụ mgbe anyị malitere iji PostgreSQL dị ka ihe nkesa nchekwa data. Anyị na-ejikarị Java arụ ọrụ. Mana ihe m ga-agwa gị taa abụghị naanị Java. Dịka omume gosiri, nke a na-apụtakwa n'asụsụ ndị ọzọ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Anyị ga-ekwu:

  • banyere data sample.
  • Banyere ịchekwa data.
  • Na kwa gbasara arụmọrụ.
  • Na banyere rakes n'okpuru mmiri na-eli n'ebe ahụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị jiri ajụjụ dị mfe bido. Anyị na-ahọrọ otu ahịrị site na tebụl dabere na igodo isi.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ebe nchekwa data dị n'otu nnabata ahụ. Na ọrụ ugbo a niile na-ewe millisekọs 20.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

milisek 20 ndị a dị ọtụtụ. Ọ bụrụ na ị nwere 100 dị otú ahụ arịrịọ, mgbe ahụ ị na-etinye oge kwa sekọnd pịgharịa site na arịrịọ ndị a, i.e. anyị na-egbu oge.

Anyị adịghị amasị ime nke a ma lelee ihe isi na-enye anyị maka nke a. Ebe nchekwa data na-enye anyị nhọrọ abụọ maka ime ajụjụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Nhọrọ nke mbụ bụ arịrịọ dị mfe. Kedu ihe dị mma na ya? Eziokwu ahụ bụ na anyị na-ewere ya na-eziga ya, na ọ dịghị ihe ọzọ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Ebe nchekwa data nwekwara ajụjụ dị elu, nke dị aghụghọ karịa, mana ọ na-arụ ọrụ karịa. Ị nwere ike izipu arịrịọ iche iche maka ntule, mkpochapụ, njide agbanwe agbanwe, wdg.

Ajuju ogologo ogologo bụ ihe anyị agaghị ekpuchi n'ime akụkọ dị ugbu a. Anyị, ma eleghị anya, chọrọ ihe site na nchekwa data na e nwere ndepụta ọchịchọ nke e guzobere n'ụdị ụfọdụ, ya bụ nke a bụ ihe anyị chọrọ, ma ọ gaghị ekwe omume ugbu a na n'afọ ọzọ. Yabụ na anyị dekọtara ya, anyị ga-agagharị na-ama jijiji ndị isi.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Na ihe anyị nwere ike ime bụ ajụjụ dị mfe na ajụjụ gbatịa.

Kedu ihe pụrụ iche gbasara ụzọ ọ bụla?

Ajụjụ dị mfe dị mma maka igbu otu oge. Ozugbo emechara ma chefuo. Na nsogbu bụ na ọ naghị akwado usoro data ọnụọgụ abụọ, ya bụ na ọ dịghị adabara ụfọdụ usoro arụmọrụ dị elu.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ajụjụ agbatịkwuru - na-enye gị ohere ịchekwa oge na ntule. Nke a bụ ihe anyị mere wee malite iji. Nke a nyeere anyị aka n'ezie. Enwere ọ bụghị naanị ego na ntule. Enwere ego na mbufe data. Ịnyefe data na usoro ọnụọgụ abụọ na-arụ ọrụ nke ọma karị.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị gaa n'ihu n'omume. Nke a bụ ihe ngwa ngwa dị ka. Ọ nwere ike ịbụ Java, wdg.

Anyị mepụtara nkwupụta. Emere iwu ahụ. Emepụtara nso. Ebee ka mmejọ dị ebe a? Kedu ihe bụ nsogbu? Nsogbu adịghị. Nke a bụ ihe ọ na-ekwu n'akwụkwọ niile. Otu a ka ekwesịrị isi dee ya. Ọ bụrụ na ịchọrọ ịrụ ọrụ kachasị, dee otu a.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Mana omume egosila na nke a anaghị arụ ọrụ. Gịnị kpatara? N'ihi na anyị nwere usoro " nso". Ma mgbe anyị na-eme nke a, site na ebe nchekwa data ọ na-apụta na ọ dị ka onye na-ese anwụrụ ọkụ na-arụ ọrụ na nchekwa data. Anyị kwuru "PARSE EXECUTE DEALLOCATE".

Gịnị kpatara ihe a niile na-ekepụta na nbudata nkwupụta? Ọ dịghị onye chọrọ ha. Mana ihe na-emekarị na PreparedStatements bụ na mgbe anyị mechiri ha, ha na-emechi ihe niile dị na nchekwa data. Nke a abụghị ihe anyị chọrọ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Anyị chọrọ, dị ka ndị ahụ ike, na-arụ ọrụ na isi. Anyị were ma dozie nkwupụta anyị otu ugboro, mgbe ahụ anyị na-egbu ya ọtụtụ ugboro. N'ezie, ọtụtụ oge - nke a bụ otu ugboro na ndụ ngwa ngwa - a na-atụgharị ha. Anyị na-ejikwa otu nkwupụta id na REST dị iche iche. Nke a bụ ebumnuche anyị.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Olee otú anyị ga-esi nweta nke a?

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ dị nnọọ mfe - ọ dịghị mkpa imechi nkwupụta. Anyị na-ede ya dị ka nke a: "kwadebe" "execute".

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ bụrụ na anyị amalite ihe dị ka nke a, mgbe ahụ, o doro anya na ihe ga-ejupụta ebe. Ọ bụrụ na o doghị anya, ị nwere ike ịnwale ya. Ka anyị dee akara nrịbama nke na-eji usoro a dị mfe. Mepụta nkwupụta. Anyị na-amalite ya na ụfọdụ ụdị nke ọkwọ ụgbọ ala wee chọpụta na ọ na-ada ngwa ngwa na ọnwụ nke ebe nchekwa niile ọ nwere.

O doro anya na a na-edozi njehie dị otú ahụ ngwa ngwa. Agaghị m ekwu banyere ha. Mana m ga-ekwu na ụdị ọhụrụ ahụ na-arụ ọrụ ngwa ngwa. Usoro ahụ bụ nzuzu, mana ka.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Kedu ka esi arụ ọrụ nke ọma? Gịnị ka anyị kwesịrị ime maka nke a?

N'ezie, ngwa na-emechi okwu mgbe niile. N'akwụkwọ niile ha na-ekwu ka mechie ya, ma ọ bụghị na ebe nchekwa ga-ada.

Na PostgreSQL amaghị ka esi echekwa ajụjụ. Ọ dị mkpa na nnọkọ ọ bụla na-emepụta cache a maka onwe ya.

Ma anyị achọghị igbu oge n'ịtụle ya.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Na dị ka ọ dị na mbụ anyị nwere nhọrọ abụọ.

Nhọrọ nke mbụ bụ na anyị were ya wee sị ka anyị kechie ihe niile na PgSQL. Enwere oghere ebe ahụ. Ọ na-echekwa ihe niile. Ọ ga-adị mma. Anyị hụrụ nke a. Anyị nwere arịrịọ 100500. Adịghị arụ ọrụ. Anyị ekwenyeghị iji aka tụgharịa arịrịọ ka ọ bụrụ usoro. Mba mba.

Anyị nwere nhọrọ nke abụọ - were ya bee ya n'onwe anyị. Anyị na-emeghe isi mmalite ma malite ịcha. Anyị hụrụ ma hụ. Ọ tụgharịrị na ọ bụghị ihe siri ike ime.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Nke a pụtara na August 2015. Ugbu a enwere ụdị nke ọgbara ọhụrụ. Na ihe niile dị mma. Ọ na-arụ ọrụ nke ọma na anyị anaghị agbanwe ihe ọ bụla na ngwa. Ma anyị kwụsịrị iche echiche n'ụzọ PgSQL, ya bụ, nke a ezuola anyị iji belata ụgwọ niile dị n'elu ka ọ fọrọ nke nta ka ọ bụrụ efu.

N'ihi ya, a na-eme ka nkwupụta ndị akwadoro nke sava rụọ ọrụ na njedebe nke ise iji zere imefusị ebe nchekwa na nchekwa data na arịrịọ ọ bụla otu oge.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ị nwere ike ịjụ - olee ebe ọnụọgụgụ dị? Kedu ihe ị na-enweta? Na ebe a, agaghị m enye ọnụọgụgụ, n'ihi na arịrịọ ọ bụla nwere nke ya.

Ajuju anyị mere nke mere na anyị ji ihe dị ka milliseconds 20 mee nyocha na ajụjụ OLTP. Enwere millisekọnd 0,5 maka ogbugbu, milliseconds 20 maka nyocha. Arịrịọ - 10 KiB nke ederede, ahịrị 170 nke atụmatụ. Nke a bụ arịrịọ OLTP. Ọ na-arịọ ahịrị 1, 5, 10, mgbe ụfọdụ karịa.

Mana anyị achọghị ịla n'iyi 20 millise seconds ma ọlị. Anyị wedara ya ka ọ bụrụ 0. Ihe niile dị mma.

Kedu ihe ị ga-ewepụ ebe a? Ọ bụrụ na ị nwere Java, ị ga-ewere ụdị ọkwọ ụgbọ ala nke oge a ma ṅụrịa ọṅụ.

Ọ bụrụ na ị na-asụ asụsụ dị iche, chee echiche - ikekwe ị chọkwara nke a? N'ihi na site n'echiche nke asụsụ ikpeazụ, dịka ọmụmaatụ, ọ bụrụ na PL 8 ma ọ bụ ị nwere LibPQ, mgbe ahụ, ọ bụghị ihe doro anya na ị na-etinye oge na-adịghị egbu egbu, na-atụgharị, na nke a kwesịrị ịlele. Kedu? Ihe niile bụ n'efu.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ewezuga na enwere mmejọ na ụfọdụ peculiarities. Anyị ga-ekwukwa banyere ha ugbu a. Ọtụtụ n'ime ya ga-abụ banyere nkà mmụta ihe ochie nke ụlọ ọrụ mmepụta ihe, banyere ihe anyị chọtara, ihe anyị zutere.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ bụrụ na ewepụtara arịrịọ a n'ike. Ọ na-eme. Onye na-ejikọta eriri ọnụ, na-ebute ajụjụ SQL.

Gịnị mere o ji dị njọ? Ọ dị njọ n'ihi na oge ọ bụla anyị na-eji eriri dị iche ejedebe.

Na hashCode nke eriri dị iche a kwesịrị ịgụ ọzọ. Nke a bụ ọrụ CPU n'ezie - ịchọta ederede arịrịọ ogologo na ọbụna hash dị adị adịghị mfe. Ya mere, nkwubi okwu dị mfe - emela arịrịọ. Chekwaa ha n'otu mgbanwe. Na-aṅụrịkwa ọṅụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Nsogbu na-esote. Ụdị data dị mkpa. Enwere ORM na-ekwu na ọ dịghị mkpa ụdị NULL dị, ka e nwee ụdị ụfọdụ. Ọ bụrụ Int, anyị na-ekwu setInt. Ma ọ bụrụ NULL, yabụ ka ọ bụrụ VARCHAR mgbe niile. Kedu ihe dị iche ọ na-eme na njedebe ihe NULL dị? Ebe nchekwa data n'onwe ya ga-aghọta ihe niile. Na foto a anaghị arụ ọrụ.

Na omume, nchekwa data anaghị eche ma ọlị. Ọ bụrụ na ị kwuru na nke mbụ na nke a bụ ọnụọgụ, na nke abụọ ị na-ekwu na ọ bụ VARCHAR, mgbe ahụ ọ gaghị ekwe omume ijikwa okwu ndị akwadoro nke sava. Na nke a, anyị ga-emepụtaghachi nkwupụta anyị.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ bụrụ na ị na-eme otu ajụjụ ahụ, gbaa mbọ hụ na ụdị data dị na kọlụm gị enweghị mgbagwoju anya. Ịkwesịrị ịkpachara anya maka NULL. Nke a bụ njehie nkịtị anyị nwere mgbe anyị malitere iji PreparedStatements

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ dị mma, gbanye Ma eleghị anya, ha buuru onye ọkwọ ụgbọala ahụ. Na arụpụtaghị ihe dara. Ihe dara njọ.

Kedu ka nke a si eme? Nke a ọ bụ ahụhụ ma ọ bụ atụmatụ? N'ụzọ dị mwute, ọ gaghị ekwe omume ịghọta ma nke a ọ bụ ahụhụ ma ọ bụ atụmatụ. Mana enwere ọnọdụ dị mfe maka imepụtaghachi nsogbu a. O zoro anyị kpamkpam na mberede. Ọ na-agụnye ịlele n'ụzọ nkịtị site na otu tebụl. Anyị, n'ezie, nwere ọtụtụ ụdị arịrịọ ahụ. Dị ka a na-achị, ha gụnyere tebụl abụọ ma ọ bụ atọ, mana enwere ụdị egwu egwu dị otú ahụ. Were ụdị ọ bụla na nchekwa data gị wee kpọọ ya.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Isi ihe bụ na anyị nwere ogidi abụọ, nke ọ bụla n'ime ha na-edepụta aha. Enwere ahịrị nde n'otu kọlụm NULL. Na kọlụm nke abụọ nwere naanị ahịrị 20. Mgbe anyị na-eme ihe na-enweghị mgbanwe mgbanwe, ihe niile na-arụ ọrụ nke ọma.

Ọ bụrụ na anyị na-amalite na-eme ihe na bound variables, i.e. anyị na-eme "?" ma ọ bụ "$1" maka arịrịọ anyị, gịnị ka anyị ga-enweta?

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Ogbugbu nke mbụ dị ka a tụrụ anya ya. Nke abụọ dị ntakịrị ngwa ngwa. Edebere ihe. Nke atọ, anọ, ise. Mgbe ahụ bang - na ihe dị otú ahụ. Na ihe kasị njọ bụ na nke a na-eme na nke isii ogbugbu. Ònye maara na ọ dị mkpa ime kpọmkwem igbu mmadụ isii ka o wee ghọta ihe atụmatụ igbu ya bụ n'ezie?

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Kedu onye ikpe mara? Kedu ihe mere? Ebe nchekwa data nwere njikarịcha. Ma ọ dị ka ọ kachasị mma maka ikpe ikpe. Ma, ya mere, malite n'oge ụfọdụ, ọ na-agbanye na atụmatụ ọnyà, nke, ọ dị mwute ikwu, nwere ike ịdị iche. Ọ nwere ike ịpụta otu, ma ọ bụ ọ nwere ike ịdị iche. Ma enwere ụfọdụ uru ọnụ ụzọ na-eduga na omume a.

Kedu ihe ị ga-eme maka ya? N'ebe a, n'ezie, ọ na-esiri ike iche ihe ọ bụla. Enwere ngwọta dị mfe nke anyị na-eji. Nke a bụ +0, OFFSET 0. N'ezie ị maara ihe ngwọta dị otú ahụ. Anyị na-ewere ya naanị tinye "+0" na arịrịọ ahụ na ihe niile dị mma. Aga m egosi gị ma emechaa.

Ma enwere nhọrọ ọzọ - lelee atụmatụ ndị ahụ nke ọma. Onye nrụpụta ga-enwerịrị ọ bụghị naanị dee arịrịọ, kamakwa kwuo “nyocha nkọwa” ugboro 6. Ọ bụrụ na ọ bụ 5, ọ gaghị arụ ọrụ.

Ma enwere nhọrọ nke atọ - dee akwụkwọ ozi na pgsql-hackers. M dere, Otú ọ dị, amabeghị ma nke a bụ ahụhụ ma ọ bụ atụmatụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Ka anyị na-eche ma nke a ọ bụ ahụhụ ma ọ bụ njirimara, ka anyị dozie ya. Ka anyị were arịrịọ anyị tinye "+0". Ihe niile dị mma. Abụọ akara na ị na-adịghị ọbụna na-eche banyere otú ọ bụ ma ọ bụ ihe ọ bụ. Dị mfe. Naanị machibidoro nchekwa data ka ọ ghara iji ndeksi dị na kọlụm a. Anyị enweghị ndeksi na kọlụm "+0" na nke ahụ bụ ya, nchekwa data anaghị eji ndeksi, ihe niile dị mma.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Nke a bụ iwu nke 6 kọwara. Ugbu a na nsụgharị dị ugbu a, ị ga-eme ya ugboro 6 ma ọ bụrụ na ị nwere mgbanwe mgbanwe. Ọ bụrụ na ị nweghị bound variables, nke a bụ ihe anyị na-eme. Na n'ikpeazụ ọ bụ kpọmkwem arịrịọ a na-ada. Ọ bụghị ihe aghụghọ.

Ọ ga-adị ka, ole ga-ekwe omume? Ahụhụ ebe a, ahụhụ n'ebe ahụ. N'ezie, ahụhụ dị ebe niile.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị lebakwuo anya. Dịka ọmụmaatụ, anyị nwere schema abụọ. Atụmatụ A nwere tebụl S na eserese B nwere tebụl S. Ajụjụ – họrọ data site na tebụl. Kedu ihe anyị ga-enweta na nke a? Anyị ga-enwe mperi. Anyị ga-enwe ihe niile dị n'elu. Iwu bụ - ahụhụ dị ebe niile, anyị ga-enwe ihe niile dị n'elu.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ugbu a ajụjụ bụ: "Gịnị mere?" Ọ ga-adị ka enwere akwụkwọ na ọ bụrụ na anyị nwere schema, mgbe ahụ enwere mgbanwe "search_path" nke na-agwa anyị ebe anyị ga-achọ tebụl. Ọ ga-adị ka enwere mgbanwe.

Kedu ihe bụ nsogbu? Nsogbu a bụ na nkwupụta ndị akwadoro nkesa anaghị eche na mmadụ nwere ike ịgbanwe search_path. Uru a na-anọgide, dị ka a pụrụ isi kwuo ya, na-adịgide adịgide maka nchekwa data. Ma akụkụ ụfọdụ nwere ike ọ gaghị ewelite nkọwa ọhụrụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

N'ezie, nke a dabere na ụdị nke ị na-anwale. Ọ dabere n'otú tebụl gị si dị iche. Na ụdị 9.1 ga-emezu ajụjụ ochie. Ụdị ọhụrụ nwere ike ijide ahụhụ ahụ wee gwa gị na ị nwere ahụhụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Tọọ ụzọ search_path + nkwupụta akwadoro nkesa =
Atụmatụ echekwara agaghị agbanwe ụdị nsonaazụ

Kedu ka esi emeso ya? Enwere uzommeputa dị mfe - emela ya. Ọ dịghị mkpa ịgbanwe search_path mgbe ngwa na-agba ọsọ. Ọ bụrụ na ị gbanwee, ọ ka mma ịmepụta njikọ ọhụrụ.

Ị nwere ike ịkparịta ụka, ya bụ imeghe, kparịta ụka, tinye. Ikekwe anyị nwere ike ime ka ndị nrụpụta nchekwa data kwenye na mgbe mmadụ gbanwere uru, nchekwa data kwesịrị ịgwa onye ahịa banyere nke a: "Lee, emelitela uru gị ebe a. Ma eleghị anya, ọ dị gị mkpa ịtọgharịa nkwupụta ma megharịa ha? Ugbu a nchekwa data na-akpa àgwà na nzuzo na ọ naghị ekwupụta n'ụzọ ọ bụla na nkwupụta agbanweela ebe n'ime.

M ga-ekwusi ike ọzọ - nke a bụ ihe na-adịghị ahụkarị maka Java. Anyị ga-ahụ otu ihe ahụ na PL/pgSQL otu na otu. Ma a ga-ebipụtagharị ya n'ebe ahụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị nwaa nhọrọ data ọzọ. Anyị na-ahọrọ na-ahọrọ. Anyị nwere okpokoro nwere ahịrị nde. Ahịrị ọ bụla bụ kilobyte. Ihe dị ka gigabyte data. Ma anyị nwere ebe nchekwa na-arụ ọrụ na igwe Java nke 128 megabyte.

Anyị, dị ka akwadoro n'akwụkwọ niile, na-eji nhazi iyi. Ya bụ, anyị na-emepe resultSet wee gụọ data si ebe ahụ nke nta nke nta. Ọ ga-arụ ọrụ? Ọ ga-ada site na ncheta? Ị ga-agụ ntakịrị? Ka anyị tụkwasị obi na nchekwa data, ka anyị tụkwasị obi na Postgres. Anyị ekweghị ya. Anyị ga-ada OutOFMemory? Kedu onye nwetara OutOfMemory? Kedu onye jisiri ike dozie ya mgbe nke ahụ gasịrị? Onye jisiri ike dozie ya.

Ọ bụrụ na ị nwere ahịrị nde, ị nweghị ike ịhọrọ ma họrọ. OffsET/LIMIT chọrọ. Onye bụ maka nhọrọ a? Ma onye na-akwado iji autoCommit egwu egwu?

N'ebe a, dị ka ọ dị na mbụ, nhọrọ a na-atụghị anya ya ga-abụ nke ziri ezi. Ma ọ bụrụ na ị gbanyụọ autoCommit na mberede, ọ ga-enyere aka. Gịnị kpatara nke ahụ? Sayensị amaghị maka nke a.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Mana na ndabara, ndị ahịa niile na-ejikọ na nchekwa data Postgres na-enweta data niile. PgJDBC abụghị ihe dị iche na nke a; ọ na-ahọrọ ahịrị niile.

Enwere mgbanwe na isiokwu FetchSize, i.e. ị nwere ike ikwu na ọkwa nke nkwupụta dị iche na ebe a, biko họrọ data site na 10, 50. Mana nke a anaghị arụ ọrụ ruo mgbe ị gbanyụọ autoCommit. Gbanyụọ autoCommit - ọ na-amalite ịrụ ọrụ.

Mana ịgafe koodu na ịtọlite ​​​​FetchSize ebe niile adịghị mma. Ya mere, anyị mere ntọala ga-ekwu uru ndabara maka njikọ niile.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Nke ahụ bụ ihe anyị kwuru. Ahaziri oke. Gịnịkwa ka anyị nwetara? Ọ bụrụ na anyị họrọ obere ego, ma ọ bụrụ na, dịka ọmụmaatụ, anyị na-ahọrọ ahịrị 10 n'otu oge, mgbe ahụ anyị nwere nnukwu ego n'elu. Ya mere, ekwesịrị ịtọ uru a ka ọ bụrụ ihe dị ka otu narị.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

N'ezie, n'ezie, ị ka ga-amụta ka esi amachi ya na bytes, mana uzommeputa bụ nke a: tọọ defaultRowFetchSize na ihe karịrị otu narị ma nwee obi ụtọ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị gaa n'ihu na ntinye data. Ntinye dị mfe, enwere nhọrọ dị iche iche. Dịka ọmụmaatụ, INSERT, VALUES. Nke a bụ ezigbo nhọrọ. Ị nwere ike ịsị "ịbanye ahọpụtara". Na omume ọ bụ otu ihe ahụ. Ọ dịghị ihe dị iche na arụmọrụ.

Akwụkwọ na-ekwu na ị ga-emerịrị nkwupụta Batch, akwụkwọ na-ekwu na ị nwere ike iji ọtụtụ akara aka mee iwu ndị dị mgbagwoju anya. Na Postgres nwere ọmarịcha atụmatụ - ị nwere ike ịme COPY, ya bụ mee ya ngwa ngwa.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ọ bụrụ na ị tụọ ya, ị nwere ike ọzọ ime ụfọdụ ihe na-akpali nchoputa. Olee otú anyị chọrọ ka nke a na-arụ ọrụ? Anyị achọghị ịtụgharị ma ghara ime iwu na-enweghị isi.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Na omume, TCP anaghị ekwe ka anyị mee nke a. Ọ bụrụ na onye ahịa na-arụsi ọrụ ike na izipu arịrịọ, mgbe ahụ, nchekwa data anaghị agụ arịrịọ ndị ahụ na mbọ iji zipu anyị nzaghachi. Ihe njedebe bụ na onye ahịa na-echere ka nchekwa data gụọ arịrịọ ahụ, na nchekwa data na-echere onye ahịa ka ọ gụọ nzaghachi.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ya mere, a na-amanye onye ahịa izipu ngwugwu mmekọrịta kwa oge. Mgbakwunye netwọk mmekọrịta, oge igbu oge.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir SitnikovNa ka anyị na-agbakwunye ha, ka ọ na-akawanye njọ. Onye ọkwọ ụgbọ ala na-enweghị atụ ma na-agbakwunye ha ọtụtụ mgbe, ihe dị ka otu ugboro n'ahịrị 200 ọ bụla, dabere na nha ahịrị, wdg.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

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

Ọ na-eme na ị na-edozi naanị otu ahịrị na ihe niile ga-agba ọsọ ugboro 10. Ọ na-eme. Gịnị kpatara? Dị ka ọ dị na mbụ, a na-eji ya eme ihe mgbe niile. Na uru "128" pụtara ịghara iji batching.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Java microbenchmark njikota

Ọ dị mma na etinyeghị nke a na ụdị gọọmentị. Achọpụtara tupu ntọhapụ amalite. Nsụgharị niile m na-enye dabere na nsụgharị ọgbara ọhụrụ.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ka anyị nwaa ya. Anyị na-atụ InsertBatch dị mfe. Anyị na-atụ InsertBatch ọtụtụ ugboro, ya bụ otu ihe ahụ, mana enwere ọtụtụ ụkpụrụ. Ntugharị aghụghọ. Ọ bụghị onye ọ bụla nwere ike ime nke a, mana ọ bụ mmegharị ahụ dị mfe, dị mfe karịa COPY.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ị nwere ike ime COPY.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Ma ị nwere ike ime nke a na nhazi. Kwuwapụta ụdị ndabara nke onye ọrụ, gafere n'usoro wee tinye ozugbo na tebụl.

Ọ bụrụ na imepe njikọ ahụ: pgjdbc/ubenchmsrk/InsertBatch.java, mgbe ahụ koodu a dị na GitHub. Ị nwere ike ịhụ kpọmkwem arịrịọ ndị a na-eme n'ebe ahụ. Ọ baghị uru.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Anyị malitere. Ihe mbụ anyị chọpụtara bụ na iji ogbe eme ihe bụ ihe agaghị ekwe omume. Nhọrọ batching niile bụ efu, ya bụ, oge igbu ya fọrọ nke nta ka ọ bụrụ efu ma e jiri ya tụnyere igbu otu oge.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Anyị na-etinye data. Ọ bụ tebụl dị nnọọ mfe. Ogidi atọ. Gịnịkwa ka anyị na-ahụ ebe a? Anyị na-ahụ na nhọrọ atọ ndị a nwere ike ijikọ. Na COPY, n'ezie, ka mma.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Nke a bụ mgbe anyị na-etinye iberibe. Mgbe anyị kwuru na otu VALUES uru, ụkpụrụ abụọ VALUES, ụkpụrụ atọ VALUES, ma ọ bụ anyị gosiri 10 n'ime ha kewapụrụ site na rikoma. Nke a bụ kwụ ọtọ ugbu a. 1, 2, 4, 128. Enwere ike ịhụ na Batch Insert, nke a na-ese na-acha anụnụ anụnụ, na-eme ka ọ dịkwuo mma. Ya bụ, mgbe itinye otu n'otu ma ọ bụ ọbụna mgbe itinye anọ n'otu oge, ọ ga-adị mma okpukpu abụọ, nanị n'ihi na anyị na-agbanyekwu ntakịrị na VALUES. Ọrụ EXECUTE dị obere.

Iji COPY n'obere mpịakọta adịghị mma nke ukwuu. Adịghị m eserese na abụọ mbụ. Ha na-aga eluigwe, ya bụ, nọmba akwụkwọ ndụ akwụkwọ ndụ ndị a maka COPY.

Ekwesịrị iji COPY mee ihe mgbe ị nwere opekata mpe ahịrị data. Isi mmalite nke imepe njikọ a buru ibu. Na, n'eziokwu, anaghị m gwuo na ntụziaka a. Emelitere m Batch, mana ọ bụghị COPY.

Gịnị ka anyị ga-eme ọzọ? Anyị nwara ya. Anyị na-aghọta na anyị kwesịrị iji ma owuwu ma ọ bụ a nkọ bac nke na-agwakọta ọtụtụ pụtara.

PostgreSQL na JDBC wepụrụ ihe ọṅụṅụ niile. Vladimir Sitnikov

Kedu ihe ị ga-ewepụ na akụkọ taa?

  • PreparedStatement bụ ihe niile anyị. Nke a na-enye ọtụtụ ihe maka nrụpụta. Ọ na-emepụta nnukwu flop na ude.
  • Na ịkwesịrị ịme kọwapụta ugboro 6.
  • Ma anyị kwesịrị itughari OFFSET 0, na aghụghọ dị ka +0 iji mezie pasent fọdụrụnụ nke ajụjụ nsogbu anyị.

isi: www.habr.com

Tinye a comment