{"id":79893,"date":"2020-05-01T13:43:12","date_gmt":"2020-05-01T11:43:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov"},"modified":"2020-05-01T13:43:12","modified_gmt":"2020-05-01T11:43:12","slug":"postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov","title":{"rendered":"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2016 \u0433\u043e\u0434\u0430 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432\u0430 &quot;PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438&quot;<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/9d94c8a024bd2821e431c525aae0127d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/030666abda53aa388b1cb1d0c46a7524.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mir\u00ebm\u00ebngjes! Emri im \u00ebsht\u00eb Vladimir Sitnikov. Kam punuar p\u00ebr 10 vjet n\u00eb kompanin\u00eb NetCracker. Kryesisht merrem me performanc\u00ebn. Gjith\u00e7ka q\u00eb ka t\u00eb b\u00ebj\u00eb me Java-n, gjith\u00e7ka q\u00eb ka t\u00eb b\u00ebj\u00eb me SQL - \u00ebsht\u00eb ajo q\u00eb dua. <\/p>\n<p><\/p>\n<p>Sot do t\u00eb flas p\u00ebr sfidat me t\u00eb cilat u p\u00ebrball\u00ebm n\u00eb kompani kur filluam t\u00eb p\u00ebrdorim PostgreSQL si server t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Kryesisht punojm\u00eb me Java-n. Por ajo q\u00eb do t\u00eb ndaj sot nuk \u00ebsht\u00eb e lidhur vet\u00ebm me Java-n. Si\u00e7 tregojn\u00eb praktikat, kjo ndodh edhe n\u00eb gjuh\u00eb t\u00eb tjera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/b01a214d782c7e32797a6c6466457979.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Do t\u00eb flasim p\u00ebr:<\/p>\n<p><\/p>\n<ul>\n<li>shkarkimin e t\u00eb dh\u00ebnave. <\/li>\n<li>Ruajtjen e t\u00eb dh\u00ebnave. <\/li>\n<li>Dhe p\u00ebr performanc\u00ebn. <\/li>\n<li>Po ashtu dhe p\u00ebr pengesat q\u00eb mund t\u00eb hasim. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/57da0c6aa4bb62e1beb77160f5aee7e7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb fillojm\u00eb me nj\u00eb pyetje t\u00eb thjesht\u00eb. Ne marrim nj\u00eb rresht nga tabela sipas \u00e7el\u00ebsit primar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/d5fcb1172aef402a87064498bf8a5218.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Baza ndodhet n\u00eb t\u00eb nj\u00ebjtin host. T\u00eb gjitha k\u00ebto marrin 20 milisekonda.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/103b7f9736b82a3313491b2f0d2a5824.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebto 20 milisekonda jan\u00eb shum\u00eb. N\u00ebse keni 100 k\u00ebrkesa t\u00eb tilla, keni kaluar nj\u00eb moment t\u00eb \u00e7muar duke i procesuar ato, pra, po humbni koh\u00eb.<\/p>\n<p><\/p>\n<p>Ne nuk duam t\u00eb b\u00ebjm\u00eb k\u00ebt\u00eb dhe shohim \u00e7far\u00eb na ofron baza p\u00ebr k\u00ebt\u00eb. Ajo na ofron dy variante p\u00ebr t\u00eb ekzekutuar k\u00ebrkesat. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/b467e86a0f8c4c32cea182fe27a28e6e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E para \u00ebsht\u00eb nj\u00eb k\u00ebrkes\u00eb e thjesht\u00eb. Pse \u00ebsht\u00eb e mir\u00eb? Sepse e marrim dhe e d\u00ebrgojm\u00eb, dhe asgj\u00eb m\u00eb shum\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/7e333a62ba68feb0781ff96e39486591.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/478\">https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/478<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Baza ka gjithashtu nj\u00eb k\u00ebrkes\u00eb t\u00eb avancuar, q\u00eb \u00ebsht\u00eb m\u00eb e sofistikuar por m\u00eb funksionale. Mund t\u00eb d\u00ebrgoni ve\u00e7mas k\u00ebrkesat p\u00ebr analizim, ekzekutim, lidhjen e variablave etj. <\/p>\n<p><\/p>\n<p>Super extended query \u2013 kjo \u00ebsht\u00eb di\u00e7ka q\u00eb nuk do ta mbulojm\u00eb n\u00eb k\u00ebt\u00eb raport. Mund t\u00eb kemi disa k\u00ebrkesa nga baza e t\u00eb dh\u00ebnave dhe kemi nj\u00eb list\u00eb t\u00eb d\u00ebshirave q\u00eb \u00ebsht\u00eb formuar n\u00eb nj\u00eb far\u00eb m\u00ebnyre, dometh\u00ebn\u00eb k\u00ebto jan\u00eb gj\u00ebrat q\u00eb duam, por momentalisht nuk mundemi dhe as n\u00eb vitin e ardhsh\u00ebm. Prandaj, thjesht e kemi regjistruar dhe do t\u00eb shkojm\u00eb t\u00eb bisedojm\u00eb me njer\u00ebzit kryesor\u00eb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/19094729074fd28c5b9f236833a9a266.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por ajo q\u00eb mund t\u00eb b\u00ebjm\u00eb \u00ebsht\u00eb k\u00ebrkesa e thjesht\u00eb dhe k\u00ebrkesa e avancuar.<\/p>\n<p><\/p>\n<p>Cili \u00ebsht\u00eb karakteri i secilit qasje? <\/p>\n<p><\/p>\n<p>K\u00ebrkesa e thjesht\u00eb \u00ebsht\u00eb e mir\u00eb p\u00ebr ekzekutim t\u00eb nj\u00ebhersh\u00ebm. E b\u00ebjm\u00eb nj\u00eb her\u00eb dhe harrojm\u00eb. Por problemi \u00ebsht\u00eb se ajo nuk mb\u00ebshtet formatin binar t\u00eb t\u00eb dh\u00ebnave, q\u00eb do t\u00eb thot\u00eb se p\u00ebr disa sisteme me performanc\u00eb t\u00eb lart\u00eb nuk \u00ebsht\u00eb e p\u00ebrshtatshme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/062c0e45cefd91ece331a306a7651bde.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00ebrkesa e avancuar \u2013 ju lejon t\u00eb kurseni koh\u00eb n\u00eb analizim. Kjo \u00ebsht\u00eb ajo q\u00eb b\u00ebm\u00eb dhe filluam ta p\u00ebrdorim. Ndofta na ndihmoi shum\u00eb. Ajo ka jo vet\u00ebm kursime n\u00eb analizim, por edhe n\u00eb transferimin e t\u00eb dh\u00ebnave. T\u00eb d\u00ebrgosh t\u00eb dh\u00ebna n\u00eb formatin binar \u00ebsht\u00eb shum\u00eb m\u00eb efektive. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/6df83a2f3736568668cf9d74de5d9758.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tani kalojm\u00eb n\u00eb praktik\u00eb. K\u00ebshtu duket nj\u00eb aplikacion tipik. Mund t\u00eb jet\u00eb Java etj. <\/p>\n<p><\/p>\n<p>Kemi krijuar nj\u00eb statement. E kemi ekzekutuar urdh\u00ebrin. Kemi krijuar nj\u00eb close. Ku \u00ebsht\u00eb gabimi k\u00ebtu? Nuk ka problem. K\u00ebshtu shkruhet n\u00eb t\u00eb gjith\u00eb librat. K\u00ebshtu \u00ebsht\u00eb e duhur t\u00eb shkruhet. N\u00ebse d\u00ebshironi performanc\u00ebn maksimale, shkruani k\u00ebshtu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/6923293946dec45b3fd508235728ab95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por praktika tregon se kjo nuk funksionon. Pse? Sepse kemi metod\u00ebn \"close\". Dhe kur e b\u00ebjm\u00eb k\u00ebshtu, p\u00ebr baz\u00ebn e t\u00eb dh\u00ebnave, kjo \u00ebsht\u00eb si puna e nj\u00eb duhani me t\u00eb dh\u00ebnat. Ne tham\u00eb \"PARSE EXECUTE DEALLOCATE\".<\/p>\n<p><\/p>\n<p>Pse k\u00ebto krijime dhe shkarkim statements? Askush nuk ka nevoj\u00eb p\u00ebr to. Por zakonisht n\u00eb PreparedStatement ndodh q\u00eb kur i mbyllim, ato mbyllin gjith\u00e7ka n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave. Kjo nuk \u00ebsht\u00eb ajo q\u00eb duam. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/5a357a209e414024c437d042f600f251.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne duam t\u00eb punojm\u00eb si njer\u00ebz normal\u00eb me baz\u00ebn. E p\u00ebrgatitim nj\u00eb her\u00eb statement-in ton\u00eb dhe m\u00eb pas e ekzekutojm\u00eb shum\u00eb her\u00eb. N\u00eb t\u00eb v\u00ebrtet\u00eb shum\u00eb her\u00eb \u2013 kjo \u00ebsht\u00eb nj\u00eb her\u00eb gjat\u00eb gjith\u00eb jet\u00ebs s\u00eb aplikacionit dhe p\u00ebrdorim t\u00eb nj\u00ebjtin id t\u00eb statement p\u00ebr REST t\u00eb ndryshme. Kjo \u00ebsht\u00eb q\u00ebllimi yn\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/ac4aed702a624ad9f9addc4362daf760.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si mund ta arrijm\u00eb k\u00ebt\u00eb? <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/0f101d890d1a2af8e99f8a3a8a06fd5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Shum\u00eb thjesht\u00eb \u2013 nuk duhet t\u00eb mbyllim statements. Shkruajm\u00eb k\u00ebshtu: \"prepare\" \"execute\". <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/0b3fd8fd4f5861d4a76cad5a8421ddad.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/724646bfc55b5e2b611b1584ca8ba6aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse e ekzekutojm\u00eb k\u00ebt\u00eb, \u00ebsht\u00eb e qart\u00eb se diku do t\u00eb ket\u00eb mbingarkes\u00eb. N\u00ebse nuk \u00ebsht\u00eb e qart\u00eb, mund ta masim. T\u00eb b\u00ebjm\u00eb nj\u00eb benchmark, n\u00eb t\u00eb cilin kemi nj\u00eb metod\u00eb t\u00eb till\u00eb t\u00eb thjesht\u00eb. Krijojm\u00eb nj\u00eb statement. E ekzekutojm\u00eb n\u00eb nj\u00eb version t\u00eb caktuar t\u00eb driver-it dhe gjejm\u00eb se ai bie mjaft shpejt me humbje t\u00eb gjith\u00eb memories q\u00eb kemi. <\/p>\n<p><\/p>\n<p>E qart\u00eb se k\u00ebto gabime jan\u00eb leht\u00ebsisht t\u00eb zgjidhshme. Nuk do t\u00eb flas p\u00ebr to. Por do t\u00eb them se n\u00eb versionin e ri funksionon shum\u00eb m\u00eb shpejt. Metoda \u00ebsht\u00eb e padobishme, por megjithat\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/b232a6205e708c70f52be0024bbe9980.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si t\u00eb punojm\u00eb si duhet? \u00c7far\u00eb duhet t\u00eb b\u00ebjm\u00eb p\u00ebr k\u00ebt\u00eb?<\/p>\n<p><\/p>\n<p>N\u00eb t\u00eb v\u00ebrtet\u00eb aplikacionet gjithmon\u00eb e mbyllin statements. N\u00eb t\u00eb gjith\u00eb librat shkruhet q\u00eb t\u00eb mbyllen, p\u00ebrndryshe do t\u00eb ket\u00eb humbje t\u00eb memories. <\/p>\n<p><\/p>\n<p>Dhe PostgreSQL nuk e di si t\u00eb ndaj\u00eb k\u00ebrkesat. \u00c7do sesion duhet t\u00eb krijoj\u00eb vet\u00eb k\u00ebt\u00eb cache. <\/p>\n<p><\/p>\n<p>Gjithashtu nuk duam t\u00eb humbim koh\u00eb n\u00eb analizim. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/85b9574938aa6e6bf59c956e3728bdc3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si zakonisht ne kemi dy mund\u00ebsi. <\/p>\n<p><\/p>\n<p>Mund\u00ebsia e par\u00eb \u2013 t\u00eb marrim dhe t\u00eb themi se le t\u00eb paketojm\u00eb gjith\u00e7ka n\u00eb PgSQL. Aty ka cache. Ai \u00e7do gj\u00eb e mb\u00ebshtjell. Kjo do t\u00eb ishte e shk\u00eblqyer. E kemi par\u00eb. Kemi 100500 k\u00ebrkesa. Nuk punon. Ne nuk pajtohemi - t\u00eb kthejm\u00eb manualisht k\u00ebrkesat n\u00eb procedura. Jo, jo. <\/p>\n<p><\/p>\n<p>Ne kemi nj\u00eb opsion t\u00eb dyt\u00eb - ta b\u00ebjm\u00eb vet\u00eb. Hapur kodin burimor, fillojm\u00eb t\u00eb p\u00ebrshtasim. P\u00ebrshtasim-p\u00ebrshtasim. Doli se nuk \u00ebsht\u00eb kaq e v\u00ebshtir\u00eb t\u00eb b\u00ebhet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/501620b014800406167d20668baef709.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/319\">https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/319<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Kjo u shfaq n\u00eb gusht 2015. Tani ka nj\u00eb version m\u00eb modern. Dhe gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Punon kaq mir\u00eb, saq\u00eb ne nuk po b\u00ebjm\u00eb asnj\u00eb ndryshim n\u00eb aplikacion. Dhe madje kemi ndaluar s\u00eb menduari p\u00ebr PgSQL, dmth. kjo ishte m\u00ebse e mjaftueshme p\u00ebr t\u00eb reduktuar shpenzimet praktike pothuajse n\u00eb zero. <\/p>\n<p><\/p>\n<p>P\u00ebr rrjedhoj\u00eb, Server-prepared statements aktivizohet n\u00eb ekzekutimin e pest\u00eb p\u00ebr t\u00eb mos shpenzuar memorie n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave p\u00ebr \u00e7do k\u00ebrkes\u00eb t\u00eb pakonsoliduar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/8ee95e71f92187941989ad0c18ece0c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mund t\u00eb pyesni - ku jan\u00eb numrat? \u00c7far\u00eb merrni? Dhe k\u00ebtu nuk mund t\u00eb jap numra, sepse \u00e7do k\u00ebrkes\u00eb ka numrat e saj.<\/p>\n<p><\/p>\n<p>K\u00ebtu k\u00ebrkesat tona ishin t\u00eb tilla, q\u00eb ne n\u00eb k\u00ebrkesat OLTP shpenzonim rreth 20 milisekonda p\u00ebr analiz\u00eb. Kishte 0,5 milisekonda p\u00ebr ekzekutim, 20 milisekonda p\u00ebr analiz\u00eb. K\u00ebrkesa - 10 KiB tekst, 170 rreshta plani. Kjo \u00ebsht\u00eb nj\u00eb k\u00ebrkes\u00eb OLTP. Ajo k\u00ebrkon 1, 5, 10 rreshta, ndonj\u00ebher\u00eb m\u00eb shum\u00eb. <\/p>\n<p><\/p>\n<p>Por ne aspak nuk donim t\u00eb shpenzonim 20 milisekonda. E kemi sjell\u00eb n\u00eb 0. Gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. <\/p>\n<p><\/p>\n<p>\u00c7far\u00eb mund t\u00eb nxirrni prej k\u00ebtu? N\u00ebse keni Java, merrni versionin e fundit t\u00eb driver-it dhe g\u00ebzohuni. <\/p>\n<p><\/p>\n<p>N\u00ebse keni ndonj\u00eb gjuh\u00eb tjet\u00ebr, mendoni - ndoshta ju nevojitet gjithashtu? Sepse nga k\u00ebndv\u00ebshtrimi i gjuh\u00ebs p\u00ebrfundimtare, p\u00ebr shembull, n\u00ebse PL 8 ose keni LibPQ, nuk \u00ebsht\u00eb e qart\u00eb se po shpenzoni koh\u00eb jo n\u00eb ekzekutim, por n\u00eb analiz\u00eb dhe kjo duhet kontrolluar. Si? Gjith\u00e7ka \u00ebsht\u00eb falas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/fda6b1c1b126cb85c970e42335e1dc24.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 faktit se ka gabime, disa ve\u00e7ori. Dhe p\u00ebr to do t\u00eb flasim tani. Pjesa m\u00eb e madhe do t\u00eb jet\u00eb p\u00ebr arkeologjin\u00eb industriale, p\u00ebr at\u00eb q\u00eb kemi gjetur, p\u00ebr \u00e7far\u00eb kemi hasur. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/9a3b383f83c5e227cd02952c5825b64f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse k\u00ebrkesa krijohet dinamikisht. Kjo ndodh. Disa p\u00ebrzgjidhin rreshtat, q\u00eb ndodhet nj\u00eb k\u00ebrkes\u00eb SQL.<\/p>\n<p><\/p>\n<p>\u00c7far\u00eb \u00ebsht\u00eb e keqe me t\u00eb? E keqe \u00ebsht\u00eb se \u00e7do her\u00eb kemi nj\u00eb rresht t\u00eb ndrysh\u00ebm n\u00eb fund.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebt\u00eb rresht t\u00eb ndrysh\u00ebm duhet ta llogarisim p\u00ebrs\u00ebri hashCode. Kjo \u00ebsht\u00eb me t\u00eb v\u00ebrtet\u00eb nj\u00eb detyr\u00eb e CPU-s\u00eb - t\u00eb gjej\u00eb tekstin e gjat\u00eb t\u00eb k\u00ebrkes\u00ebs n\u00eb nj\u00eb hash t\u00eb pranish\u00ebm nuk \u00ebsht\u00eb aq e leht\u00eb. Prandaj, p\u00ebrfundimi \u00ebsht\u00eb i thjesht\u00eb - mos krijoni k\u00ebrkesa. Ruani ato n\u00eb nj\u00eb variab\u00ebl t\u00eb vetme. Dhe g\u00ebzohuni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/bcd4f729204cecdb572a98f357bcc33f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Problemi tjet\u00ebr. Tipet e t\u00eb dh\u00ebnave jan\u00eb t\u00eb r\u00ebnd\u00ebsishme. Ndodhin ORM q\u00eb thon\u00eb, se nuk ka r\u00ebnd\u00ebsi cila NULL, le t\u00eb jet\u00eb ndonj\u00ebher\u00eb. N\u00ebse \u00ebsht\u00eb Int, ne themi setInt. Nd\u00ebrsa n\u00ebse \u00ebsht\u00eb NULL, le t\u00eb jet\u00eb gjithmon\u00eb VARCHAR. Dhe \u00e7far\u00eb r\u00ebnd\u00ebsie ka n\u00eb fund t\u00eb fundit cila \u00ebsht\u00eb atje NULL? Baza e t\u00eb dh\u00ebnave do ta kuptoj\u00eb gjith\u00e7ka vet\u00eb. Dhe ky skenar nuk funksionon. <\/p>\n<p><\/p>\n<p>N\u00eb praktik\u00eb, baza e t\u00eb dh\u00ebnave nuk e ka aspak t\u00eb qart\u00eb. <strong>N\u00ebse p\u00ebr her\u00eb t\u00eb par\u00eb that\u00eb se keni nj\u00eb num\u00ebr, dhe her\u00ebn e dyt\u00eb that\u00eb se \u00ebsht\u00eb VARCHAR, at\u00ebher\u00eb nuk \u00ebsht\u00eb e mundur t\u00eb rilagni Server-prepared statements. Dhe n\u00eb k\u00ebt\u00eb rast duhet t\u00eb krijoni p\u00ebrs\u00ebri statement-in tuaj.<\/strong><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/552d9c2e25cf9abbdfef12c98d027740.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse ekzekutoni t\u00eb nj\u00ebjt\u00ebn k\u00ebrkes\u00eb, tregoni kujdes q\u00eb tipet e t\u00eb dh\u00ebnave n\u00eb kolon\u00eb t\u00eb mos ngat\u00ebrrohen. Duhet t\u00eb jeni vigjilent p\u00ebr NULL. Kjo \u00ebsht\u00eb nj\u00eb gabim i zakonsh\u00ebm q\u00eb kemi pasur pasi filluam t\u00eb p\u00ebrdorim PreparedStatements.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/5d73c8f5dfa281c3bda962fc3e5edd84.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I mir\u00eb, e aktivizuam. Mor\u00ebm, ndoshta, driver-in. Dhe performanca ra. Gjith\u00e7ka u b\u00eb keq. <\/p>\n<p><\/p>\n<p>Si ndodh kjo? \u00cbsht\u00eb nj\u00eb bug apo nj\u00eb ve\u00e7ori? Fatkeq\u00ebsisht, nuk arrit\u00ebm t\u00eb kuptojm\u00eb - \u00ebsht\u00eb nj\u00eb bug apo nj\u00eb ve\u00e7ori. Por ka nj\u00eb skenar shum\u00eb t\u00eb thjesht\u00eb p\u00ebr t\u00eb riprodhuar k\u00ebt\u00eb problem. Ai na ka kapur papritur. Dhe p\u00ebrfshin nj\u00eb seleksion pik\u00ebrisht nga nj\u00eb tabel\u00eb. Sigurisht, kemi pasur m\u00eb shum\u00eb k\u00ebrkesa t\u00eb tilla. Ato zakonisht p\u00ebrfshinin dy-tre tabela, por ka nj\u00eb skenar p\u00ebr riprodhim. Merrni n\u00eb baz\u00ebn tuaj t\u00eb \u00e7do versioni dhe riprodhoni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/fa0fdd037c2eaa31667d5a527bb71f9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1\">https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Kuptimi \u00ebsht\u00eb se kemi dy kolona, secila e indeksuar. N\u00eb nj\u00eb kolon\u00eb ka nj\u00eb milion rreshta me vler\u00ebn NULL. Nd\u00ebrsa n\u00eb kolon\u00ebn tjet\u00ebr ka vet\u00ebm 20 rreshta. Kur e ekzekutojm\u00eb pa variablat e lidhur, gjith\u00e7ka funksionon mir\u00eb. <\/p>\n<p><\/p>\n<p>N\u00ebse fillojm\u00eb t\u00eb ekzekutojm\u00eb me variablat e lidhur, dmth. ne ekzekutojm\u00eb shenj\u00ebn \"?\" ose \"$1\" p\u00ebr k\u00ebrkes\u00ebn ton\u00eb, at\u00ebher\u00eb \u00e7far\u00eb marrim n\u00eb fund?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/e91c397796c7ddcbade3bc090719e9d1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1\">https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ekzekutimi i par\u00eb - si\u00e7 duhet. I dyti - pak m\u00eb shpejt. Di\u00e7ka u ruajt. T\u00eb tretat-t\u00eb kat\u00ebrtat-t\u00eb pestat. Pastaj, hop - dhe ashtu. Dhe m\u00eb e keqja, kjo ndodh n\u00eb ekzekutimin e gjasht\u00eb. Kush e dinte se duhet t\u00eb b\u00ebsh pik\u00ebrisht gjasht\u00eb ekzekutime p\u00ebr t\u00eb kuptuar se cili \u00ebsht\u00eb plani i ekzekutimit?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/893c955bc1e2e15a6986690e516f72a9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kush \u00ebsht\u00eb fajtor? \u00c7far\u00eb ndodhi? Baza e t\u00eb dh\u00ebnave p\u00ebrmban optimizimin. Dhe ajo \u00ebsht\u00eb si\u00e7 duket optimizuar p\u00ebr rastin e p\u00ebrgjithsh\u00ebm. Dhe, p\u00ebr rrjedhoj\u00eb, duke filluar nga nj\u00eb pik\u00eb e caktuar, ajo kalon n\u00eb planin e p\u00ebrgjithsh\u00ebm, q\u00eb, fatkeq\u00ebsisht, mund t\u00eb rezultoj\u00eb t\u00eb jet\u00eb ndryshe. Ai mund t\u00eb rezultoj\u00eb t\u00eb jet\u00eb i nj\u00ebjt\u00eb, ose mund t\u00eb jet\u00eb ndryshe. Dhe atje ka nj\u00eb vler\u00eb prag q\u00eb sjell n\u00eb k\u00ebt\u00eb sjellje. <\/p>\n<p><\/p>\n<p>\u00c7far\u00eb mund t\u00eb b\u00ebhet me k\u00ebt\u00eb? K\u00ebtu, sigurisht, \u00ebsht\u00eb m\u00eb e komplikuar t\u00eb supozosh di\u00e7ka. Ka nj\u00eb zgjidhje t\u00eb thjesht\u00eb q\u00eb ne p\u00ebrdorim. \u00cbsht\u00eb +0, OFFSET 0. Me siguri, ju i njihni k\u00ebto zgjidhje. Thjesht e marrim dhe e shtojm\u00eb \u00ab+0\u00bb n\u00eb k\u00ebrkes\u00eb dhe gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Do ta tregoj m\u00eb von\u00eb. <\/p>\n<p><\/p>\n<p>Dhe ka nj\u00eb variant tjet\u00ebr \u2013 t\u00eb shikoni m\u00eb me kujdes planet. Zhvilluesi duhet jo vet\u00ebm t\u00eb shkruaj\u00eb k\u00ebrkes\u00ebn, por edhe t\u00eb thot\u00eb 6 her\u00eb \u00abexplain analyze\u00bb. N\u00ebse 5, at\u00ebher\u00eb nuk do t\u00eb funksionoj\u00eb. <\/p>\n<p><\/p>\n<p>Dhe ka edhe nj\u00eb variant t\u00eb tret\u00eb \u2013 t\u00eb shkruani nj\u00eb let\u00ebr n\u00eb pgsql-hackers. Un\u00eb shkrova, por akoma nuk \u00ebsht\u00eb e qart\u00eb \u2013 \u00ebsht\u00eb nj\u00eb gabim apo nj\u00eb tipar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/8dc8d3a78e0b794e1ceba20f6ca914ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1\">https:\/\/gist.github.com\/vlsi\/df08cbef370b2e86a5c1<\/a><\/noindex><\/p>\n<p><\/p>\n<p>P\u00ebrsa koh\u00eb jemi duke menduar \u2013 \u00ebsht\u00eb nj\u00eb gabim apo nj\u00eb tipar, le t\u00eb eci p\u00ebrpara. Do t\u00eb marrim k\u00ebrkes\u00ebn ton\u00eb dhe do t\u00eb shtojm\u00eb \u00ab+0\u00bb. Gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Dy simbole dhe madje nuk \u00ebsht\u00eb nevoja t\u00eb mendojm\u00eb se si \u00ebsht\u00eb pra dhe \u00e7far\u00eb. Shum\u00eb e thjesht\u00eb. Ne thjesht i ndaluam databaz\u00ebs t\u00eb p\u00ebrdor\u00eb indeksin n\u00eb k\u00ebt\u00eb kolon\u00eb. S'kemi indeks n\u00eb kolon\u00ebn \u00ab+0\u00bb dhe \u00e7do gj\u00eb \u00ebsht\u00eb n\u00eb rregull. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/5261d80d084786a15b9764f6367014cd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb rregulla e 6 explain\u2019ave. Tani n\u00eb versionet aktuale duhet t\u00eb b\u00ebni 6 her\u00eb, n\u00ebse keni variabla t\u00eb lidhur. N\u00ebse s'keni variabla t\u00eb lidhur, at\u00ebher\u00eb veprojm\u00eb k\u00ebshtu. Dhe n\u00eb fund, pik\u00ebrisht kjo k\u00ebrkes\u00eb bie. \u00c7\u00ebshtja nuk \u00ebsht\u00eb e komplikuar.<\/p>\n<p><\/p>\n<p>Duket se, sa mund t\u00eb jet\u00eb? Ka gabime k\u00ebtu, ka gabime atje. N\u00eb realitet, gabimi \u00ebsht\u00eb kudo. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/674dc7e7b4624baa5c79eee9e1e89db0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb shohim edhe nj\u00eb her\u00eb. P\u00ebr shembull, kemi dy skema. Skema A me tabel\u00ebn Y dhe skema B me tabel\u00ebn Y. K\u00ebrkesa \u00ebsht\u00eb \u2013 zgjedhni t\u00eb dh\u00ebnat nga tabela. \u00c7far\u00eb do t\u00eb kemi gjat\u00eb k\u00ebsaj? Do t\u00eb kemi nj\u00eb gabim. Do t\u00eb kemi gjith\u00e7ka t\u00eb p\u00ebrmendur m\u00eb lart. Rregulli \u00ebsht\u00eb k\u00ebshtu \u2013 gabimi \u00ebsht\u00eb kudo, do t\u00eb kemi gjith\u00e7ka t\u00eb p\u00ebrmendur m\u00eb lart.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/dd6f544bb9e930c39e36523c9afe6003.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tani pyetja: \u00abPse?\u00bb. Duket se, ka dokumentacion, q\u00eb, n\u00ebse kemi nj\u00eb skem\u00eb, ka variablin \u00absearch_path\u00bb, i cili tregon ku duhet t\u00eb k\u00ebrkohet tabela. Duket se, variabli \u00ebsht\u00eb aty.<\/p>\n<p><\/p>\n<p>Cila \u00ebsht\u00eb problemi? Problemi \u00ebsht\u00eb se server-prepared statements nuk dyshojn\u00eb se dikush mund ta ndryshoj\u00eb search_path. Ky vler\u00ebsim mbetet si nj\u00eb konstant p\u00ebr databaz\u00ebn. Dhe disa pjes\u00eb mund t\u00eb mos kapin vlerat e reja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/f738301606d84d72bfa7cc5b568c0df8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sigurisht, kjo varet nga versioni n\u00eb t\u00eb cilin po testoni. Varet se sa ndryshe jan\u00eb tabelat tuaja. Dhe versioni 9.1 thjesht do t\u00eb ekzekutoj\u00eb k\u00ebrkesat e vjetra. Versionet e reja mund t\u00eb zbulojn\u00eb t\u00eb fshehtat dhe t\u00eb thon\u00eb se keni nj\u00eb gabim.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/4761cd92835b94acbf9d6c9d21817316.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/CAB=Je-GQOW7kU9Hn3AqP1vhaZg_wE9Lz6F4jSp-7cm9_M6DyVA@mail.gmail.com\">Set search_path + server-prepared statements =<br \/>\nplani i ruajtur nuk duhet t\u00eb ndryshoj\u00eb tipin e rezultatit<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Si e trajtojm\u00eb k\u00ebt\u00eb? Ka nj\u00eb recet\u00eb t\u00eb thjesht\u00eb \u2013 mos e b\u00ebni k\u00ebshtu. Mos e ndryshoni search_path n\u00eb pun\u00ebn e aplikacionit. N\u00ebse e ndryshoni, m\u00eb mir\u00eb krijoni nj\u00eb lidhje t\u00eb re.<\/p>\n<p><\/p>\n<p>Mund t\u00eb diskutojm\u00eb, pra, hapni, diskutojm\u00eb, shtojm\u00eb. Ndoshta, dhe do t\u00eb bindim zhvilluesit e databaz\u00ebs se, n\u00eb rast se dikush ndryshon vler\u00ebn, databaza duhet t'i thot\u00eb klientit: \u00abShikoni, k\u00ebtu vlera \u00ebsht\u00eb p\u00ebrdit\u00ebsuar. Ndoshta, duhet t\u00eb shfuqizoni dhe t\u00eb krijoni p\u00ebrs\u00ebri statementet?\u00bb. Tani databaza sillet fshehurazi dhe nuk njofton n\u00eb asnj\u00eb m\u00ebnyr\u00eb se di\u00e7ka ka ndryshuar brenda declaration. <\/p>\n<p><\/p>\n<p>Dhe p\u00ebrs\u00ebri do t\u00eb theksoj \u2013 kjo \u00ebsht\u00eb di\u00e7ka q\u00eb nuk \u00ebsht\u00eb tipike p\u00ebr Java. Ne do ta shohim t\u00eb nj\u00ebjt\u00ebn gj\u00eb n\u00eb PL\/pgSQL nj\u00eb p\u00ebr nj\u00eb. Por atje do t\u00eb ri-prodhohet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/a4e7b201d0c0aa4a0092d2b6ff152df7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb provojm\u00eb t\u00eb zgjedhim t\u00eb dh\u00ebna. Zgjedhim dhe zgjedhim. Kemi nj\u00eb tabel\u00eb me nj\u00eb milion rreshta. \u00c7do rresht \u00ebsht\u00eb nj\u00eb kilobajt. Rreth nj\u00eb gigabajt t\u00eb dh\u00ebnash. Dhe kemi nj\u00eb memorie operative n\u00eb makin\u00eb n\u00eb Java prej 128 megabajt. <\/p>\n<p><\/p>\n<p>Ne, si\u00e7 rekomandohet n\u00eb t\u00eb gjitha librat, p\u00ebrdorim procesimin e rrjedh\u00ebs. Pra, hapim resultSet dhe lexojm\u00eb t\u00eb dh\u00ebnat ngadal\u00eb. A do t\u00eb funksionoj\u00eb kjo? A do t\u00eb ra mbi memorie? A do t\u00eb lexoj\u00eb pak nga pak? Le t\u00eb besojm\u00eb n\u00eb databaz\u00ebn, besojm\u00eb n\u00eb Postgres. Nuk besojm\u00eb. A do t\u00eb na ra OutOFMemory? Kush ka r\u00ebn\u00eb n\u00eb OutOfMemory? Dhe kush \u00ebsht\u00eb n\u00eb gjendje ta rregulloj\u00eb pas k\u00ebsaj? Disa nga ata kan\u00eb arritur. <\/p>\n<p><\/p>\n<p>N\u00ebse keni nj\u00eb milion rreshta, at\u00ebher\u00eb nuk mund t\u00eb zgjedhni thjesht k\u00ebshtu. Duhet domosdoshm\u00ebrisht OFFSET\/LIMIT. Kush \u00ebsht\u00eb p\u00ebr k\u00ebt\u00eb variant? Dhe kush \u00ebsht\u00eb p\u00ebr variantin, se duhet t\u00eb luajm\u00eb me autoCommit? <\/p>\n<p><\/p>\n<p>K\u00ebtu, si zakonisht, varianti m\u00eb i papritur rezulton t\u00eb jet\u00eb i sakt\u00eb. Dhe n\u00ebse ndonj\u00ebher\u00eb e fikni autoCommit, at\u00ebher\u00eb kjo do t\u00eb ndihmoj\u00eb. Pse k\u00ebshtu? Shkenca nuk e di k\u00ebt\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/2e5d9d2a8450a9069155de86a8ec387a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por p\u00ebr default, t\u00eb gjitha klient\u00ebt q\u00eb lidhen me databaz\u00ebn Postgres e zgjedhin t\u00eb dh\u00ebnat p\u00ebr t\u00ebr\u00eb. PgJDBC n\u00eb k\u00ebt\u00eb aspekt nuk \u00ebsht\u00eb p\u00ebrjashtim, zgjedh t\u00eb gjitha rreshtat.<\/p>\n<p><\/p>\n<p>Ka nj\u00eb variacion mbi tem\u00ebn FetchSize, q\u00eb do t\u00eb thot\u00eb, mund t\u00eb thuash n\u00eb nivelin e nj\u00eb deklarate t\u00eb ve\u00e7ant\u00eb, q\u00eb k\u00ebtu, ju lutem, zgjidhni t\u00eb dh\u00ebnat me 10, 50. Por kjo nuk funksionon derisa t\u00eb fikni autoCommit. E fik\u00ebt autoCommit \u2013 fillon t\u00eb funksionoj\u00eb. <\/p>\n<p><\/p>\n<p>Por t\u00eb kalosh n\u00ebp\u00ebr kod dhe t\u00eb vendos\u00ebsh gjithandej setFetchSize \u2013 \u00ebsht\u00eb jo komode. Prandaj ne b\u00ebm\u00eb nj\u00eb konfigurim, i cili p\u00ebr t\u00ebr\u00eb lidhjen do t\u00eb thot\u00eb vler\u00ebn e paracaktuar.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/c9ac8e483dc6bfdbbc300972ee1ab1e0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tani e tham\u00eb k\u00ebt\u00eb. E konfiguram parametrin. Dhe \u00e7far\u00eb mor\u00ebm? N\u00ebse zgjedhim pak, n\u00ebse, p\u00ebr shembull, zgjedhim 10 rreshta, at\u00ebher\u00eb kemi shpenzime shum\u00eb t\u00eb m\u00ebdha. Prandaj duhet t\u00eb vendosni k\u00ebt\u00eb vler\u00eb rreth nj\u00ebqind. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/073e7a4af63688396eefe332ba8261d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb m\u00ebnyr\u00eb ideale, sigurisht, t\u00eb m\u00ebsojm\u00eb t\u00eb kufizojm\u00eb edhe n\u00eb byte, por receta \u00ebsht\u00eb e till\u00eb: vendosim defaultRowFetchSize m\u00eb shum\u00eb se nj\u00ebqind dhe g\u00ebzohemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/e3078faf2078fcaec10d6d99872a9990.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb kalojm\u00eb te futja e t\u00eb dh\u00ebnave. Futja \u2013 \u00ebsht\u00eb m\u00eb e leht\u00eb, ka variante t\u00eb ndryshme. P\u00ebr shembull, INSERT, VALUES. Ky \u00ebsht\u00eb nj\u00eb variant i mir\u00eb. Mund ta themi \"INSERT SELECT\". N\u00eb praktik\u00eb, kjo \u00ebsht\u00eb e nj\u00ebjta gj\u00eb. Nuk ka asnj\u00eb diferenc\u00eb n\u00eb performanc\u00eb. <\/p>\n<p><\/p>\n<p>Libra thon\u00eb se duhen realizuar deklarata Batch, libra thon\u00eb se mund t\u00eb kryhen komanda m\u00eb t\u00eb nd\u00ebrlikuara me disa kllap\u00eb. Dhe n\u00eb Postgres ka nj\u00eb funksion t\u00eb shk\u00eblqyer \u2013 mund t\u00eb b\u00ebsh COPY, pra, ta b\u00ebsh m\u00eb shpejt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/4d281c9515bdf8de7fbf1e9922d192d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse matim, mund t\u00eb zbulojm\u00eb disa gj\u00ebra interesante. Si d\u00ebshirojm\u00eb q\u00eb kjo t\u00eb funksionoj\u00eb? Duam t\u00eb mos p\u00ebrpunojm\u00eb dhe t\u00eb mos kryejm\u00eb komanda t\u00eb panevojshme. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/7b2e4343c51dab3ddb6919bf0f117c4d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb praktik\u00eb, TCP nuk na lejon ta b\u00ebjm\u00eb k\u00ebt\u00eb. N\u00ebse klienti \u00ebsht\u00eb i z\u00ebn\u00eb duke d\u00ebrguar nj\u00eb k\u00ebrkes\u00eb, baza e t\u00eb dh\u00ebnave, n\u00eb p\u00ebrpjekje p\u00ebr t\u00eb na d\u00ebrguar p\u00ebrgjigje, nuk lexon k\u00ebrkesat. N\u00eb fund, klienti po pret q\u00eb baza e t\u00eb dh\u00ebnave t\u00eb lexoj\u00eb k\u00ebrkes\u00ebn, dhe baza e t\u00eb dh\u00ebnave po pret klientin t\u00eb lexoj\u00eb p\u00ebrgjigjen. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/17a062c30ddd83cb890775ec1722044f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe k\u00ebshtu, klienti \u00ebsht\u00eb i detyruar t\u00eb d\u00ebrgoj\u00eb periodikisht nj\u00eb paket\u00eb sinkronizimi. Nd\u00ebrveprime t\u00eb panevojshme n\u00eb rrjet, humbje e koh\u00ebs.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/ae7a4f32e2949c1d0550da051937de02.jpg\" style=\"display:block;margin: 0 auto;\" \/>Dhe sa m\u00eb shum\u00eb q\u00eb i shtojm\u00eb, aq m\u00eb keq b\u00ebhet. Driver-i \u00ebsht\u00eb mjaft pesimist dhe i shton ato mjaft shpesh, rreth nj\u00eb her\u00eb n\u00eb 200 rreshta, n\u00eb var\u00ebsi t\u00eb madh\u00ebsis\u00eb s\u00eb rreshtave etj. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/82b1d597986633a8c4b7952517ca6477.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/380\">https:\/\/github.com\/pgjdbc\/pgjdbc\/pull\/380<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ndonj\u00ebher\u00eb ndodh q\u00eb ndryshon vet\u00ebm nj\u00eb rresht dhe gjith\u00e7ka p\u00ebrshpejtohet 10 her\u00eb. Kjo ndodh. P\u00ebrse? Si zakonisht, nj\u00eb konstante ishte p\u00ebrdorur diku. Dhe vlera \"128\" do t\u00eb thot\u00eb \u2013 mos p\u00ebrdor batching.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/7b6bcd95591b36441037b4c4631d2ad0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/openjdk.java.net\/projects\/code-tools\/jmh\/\">Java microbenchmark harness<\/a><\/noindex><\/p>\n<p><\/p>\n<p>\u00cbsht\u00eb mir\u00eb q\u00eb kjo nuk e ndodhi n\u00eb versionin zyrtar. E zbuluan para se t\u00eb fillonin publikimin e versionit. T\u00eb gjitha vlerat q\u00eb po i citoj, bazohen n\u00eb versionet moderne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/28c82d9e11f6bdaf3cf62b49fc074d68.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb matim. Ne po masim InsertBatch t\u00eb thjesht\u00eb. Ne po masim InsertBatch t\u00eb shum\u00ebfisht\u00eb, pra, t\u00eb nj\u00ebjt\u00ebn gj\u00eb, por me shum\u00eb vlera. Nj\u00eb l\u00ebvizje e zgjuar. Nuk e din\u00eb t\u00eb gjith\u00eb si ta b\u00ebjn\u00eb, por \u00ebsht\u00eb nj\u00eb l\u00ebvizje e thjesht\u00eb, m\u00eb e leht\u00eb se COPY.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/72f7cf6c3b9d9175d3e5a6d5410fe209.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mund t\u00eb b\u00ebsh COPY.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/2b0d8bbcc50f1293c9a8a1eb8eb70d2e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe mund ta b\u00ebsh k\u00ebt\u00eb n\u00eb struktura. T\u00eb shpall\u00ebsh User default type, t\u00eb kalosh nj\u00eb array dhe t\u00eb INSERT direkt n\u00eb tabel\u00eb. <\/p>\n<p><\/p>\n<p>N\u00ebse e hapni lidhjen: pgjdbc\/ubenchmsrk\/InsertBatch.java, ky kod \u00ebsht\u00eb n\u00eb GitHub. Mund ta shihni konkretisht se cilat k\u00ebrkesa aty gjenerohen. Nuk ka r\u00ebnd\u00ebsi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/28dede211fe401286685ca62081453de.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E kemi nisur. Dhe e para q\u00eb kuptuam, \u00ebsht\u00eb se mos p\u00ebrdorimi i batch-it \u2013 thjesht nuk mund t\u00eb b\u00ebhet. T\u00eb gjitha variantet e batching jan\u00eb t\u00eb barabarta me zero, pra, koha e ekzekutimit \u00ebsht\u00eb pothuajse e barabart\u00eb me zero krahasuar me ekzekutimin e vet\u00ebm. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/4ea68f712bbdeadd35f5baa4ddaeff33.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne po fusim t\u00eb dh\u00ebna. \u00cbsht\u00eb nj\u00eb tabel\u00eb mjaft e thjesht\u00eb. Tre kolona. Dhe \u00e7far\u00eb shohim k\u00ebtu? Shohim se t\u00eb gjith\u00eb k\u00ebto tre variante jan\u00eb af\u00ebrsisht t\u00eb barabarta. Dhe COPY, sigurisht, \u00ebsht\u00eb m\u00eb e mir\u00eb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/2686f1d7eea347a839ac23aef2a27e53.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb kur ne po fusim copa cope. Kur tham\u00eb, nj\u00eb vler\u00eb VALUES, dy vlera VALUES, tri vlera VALUES, ose i kemi shtuar atje 10 me presje. Kjo \u00ebsht\u00eb pik\u00ebrisht tani horizontalisht. 1, 2, 4, 128. \u00cbsht\u00eb e dukshme se Batch Insert, q\u00eb \u00ebsht\u00eb vizatuar me blu, leht\u00ebsohet shum\u00eb nga kjo. Pra, kur e fusni nj\u00eb nga nj\u00eb ose madje kur e fusni kat\u00ebr, b\u00ebhet dy her\u00eb m\u00eb mir\u00eb, thjesht nga fakti se kemi shtuar pak m\u00eb shum\u00eb n\u00eb VALUES. M\u00eb pak operacione EXECUTE.<\/p>\n<p><\/p>\n<p>T\u00eb p\u00ebrdor\u00ebsh COPY p\u00ebr sasi t\u00eb vogla \u2013 \u00ebsht\u00eb jasht\u00ebzakonisht e paqart\u00eb. Un\u00eb nuk e kam vizatuar as p\u00ebr dy t\u00eb parat. Ato shkojn\u00eb n\u00eb qiell, pra, k\u00ebto numra t\u00eb gjelb\u00ebrta p\u00ebr COPY.<\/p>\n<p><\/p>\n<p>COPY duhet p\u00ebrdorur kur ke t\u00eb dh\u00ebna, t\u00eb pakt\u00ebn m\u00eb shum\u00eb se nj\u00ebqind rreshta. Shpenzimet p\u00ebr hapjen e k\u00ebsaj lidhjeje jan\u00eb t\u00eb m\u00ebdha. Dhe, sinqerisht, nuk kam g\u00ebrmuar n\u00eb k\u00ebt\u00eb drejtim. Un\u00eb kam optimizuar batch-in, COPY \u2013 jo. <\/p>\n<p><\/p>\n<p>\u00c7far\u00eb b\u00ebjm\u00eb m\u00eb pas? E mat\u00ebm. Kuptojm\u00eb se duhet t\u00eb p\u00ebrdorim ose struktura, ose nj\u00eb batch t\u00eb zgjuar, q\u00eb bashkon disa vlera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL dhe JDBC nxjerrim gjith\u00eb potencialin. Vladimir Sitnikov\" src=\"\/wp-content\/uploads\/2020\/05\/e02fa2574e2d1b678382db15064610d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb duhet t\u00eb nxjerrim nga raporti i sot\u00ebm?<\/p>\n<p><\/p>\n<ul>\n<li>PreparedStatement \u2013 \u00ebsht\u00eb gjith\u00e7ka p\u00ebr ne. Kjo ofron shum\u00eb p\u00ebr performanc\u00ebn. Ajo sjell nj\u00eb sasi t\u00eb madhe t\u00eb prishjes. <\/li>\n<li>Dhe duhet b\u00ebr\u00eb EXPLAIN ANALYZE 6 her\u00eb.<\/li>\n<li>Dhe duhet t\u00eb p\u00ebrzihet OFFSET 0, dhe trika si +0 p\u00ebr t\u00eb rregulluar p\u00ebrqindjen e mbetur nga k\u00ebrkesat tona problematike.<\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499794\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2016 \u0433\u043e\u0434\u0430 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432\u0430 &quot;PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438&quot; \u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e 10 \u043b\u0435\u0442 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 NetCracker. \u0418 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0412\u0441\u0435, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 Java, \u0432\u0441\u0435, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 SQL \u2013 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u044f \u043b\u044e\u0431\u043b\u044e. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79894,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79893","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2016 \u0433\u043e\u0434\u0430 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432\u0430 &quot;PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438&quot;\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438. \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2016 \u0433\u043e\u0434\u0430 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432\u0430 &quot;PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438&quot;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-01T11:43:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-01T11:43:12+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47PostgreSQL dhe JDBC shtrydhim \u00e7do pik\u00eb. Vladimir Sitnikov | ProHoster","description":"Ju lutem shfletoni p\u00ebrmbledhjen e raportit t\u00eb fillimit t\u00eb vitit 2016 nga Vladimir Sitnikov \"PostgreSQL dhe JDBC nxjerrim gjith\u00e7ka nga to\"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438. \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 2016 \u0433\u043e\u0434\u0430 \u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440\u0430 \u0421\u0438\u0442\u043d\u0438\u043a\u043e\u0432\u0430 &quot;PostgreSQL \u0438 JDBC \u0432\u044b\u0436\u0438\u043c\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u043e\u043a\u0438&quot;","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/postgresql-i-jdbc-vyzhimaem-vse-soki-vladimir-sitnikov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-01T11:43:12+00:00","article:modified_time":"2020-05-01T11:43:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79893","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:29:39","updated":"2022-10-10 00:32:43","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/79893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=79893"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/79893\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/79894"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=79893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=79893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=79893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}