PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ с Ρ€Π°Π·ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° 2016 Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ² "PostgreSQL ΠΈ JDBC ΠΈΠ·Ρ†Π΅ΠΆΠ΄Π°ΠΌΠ΅ всичко"

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½! Аз съм Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ². Работя Π² компанията NetCracker ΠΎΡ‚ 10 Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Основно сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ с производитСлност. Всичко, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Java, всичко, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с SQL – Ρ‚ΠΎΠ²Π° Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ±ΠΈΡ‡Π°ΠΌ.

И днСс Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° Ρ‚ΠΎΠ²Π°, с ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ…ΠΌΠ΅ Π² компанията, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PostgreSQL ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. НиС основно Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Java. Но Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сподСля днСс, Π½Π΅ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ само с Java. ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π°, Ρ‚ΠΎΠ²Π° сС случва ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π·ΠΈΡ†ΠΈ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π©Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π°:

  • ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ.
  • ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ.
  • ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° производитСлността.
  • И Π·Π° ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΠΈΡ‚Π΅ камъни, ΠΊΠΎΠΈΡ‚ΠΎ са Ρ‚Π°ΠΌ Π·Π°Ρ€ΠΎΠ²Π΅Π½ΠΈ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с прост Π²ΡŠΠΏΡ€ΠΎΡ. Π˜Π·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ Π΅Π΄Π½Π° Ρ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ ΠΏΡŠΡ€Π²ΠΈΡ‡Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сС Π½Π°ΠΌΠΈΡ€Π° Π½Π° ΡΡŠΡ‰ΠΈΡ хост. И всичко Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½Π΅ΠΌΠ° 20 милисСкунди.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’Π΅Π·ΠΈ 20 милисСкунди са ΠΌΠ½ΠΎΠ³ΠΎ. Ако ΠΈΠΌΠ°Ρ‚Π΅ 100 Ρ‚Π°ΠΊΠΈΠ²Π° заявки, Ρ‚ΠΎΠ³Π°Π²Π° Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° сСкундата, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π· Ρ‚Π΅Π·ΠΈ заявки, Ρ‚.Π΅. Ρ…Π°Π±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π°ΠΏΡ€Π°Π·Π½ΠΎ.

НС ΠΎΠ±ΠΈΡ‡Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°. Π‘Π°Π·Π°Ρ‚Π° Π½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π·Π° изпълнСниС Π½Π° заявки.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Ρ‚ΠΎΠ²Π° Π΅ простата заявка. Какво Π΅ Ρ…ΡƒΠ±Π°Π²ΠΎΡ‚ΠΎ Π² нСя? Π’ΠΎΠ²Π°, Ρ‡Π΅ я Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ я ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅, ΠΈ Π½ΠΈΡ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Π‘Π°Π·Π°Ρ‚Π° ΠΈΠΌΠ° ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π° заявка, която Π΅ ΠΏΠΎ-ΡƒΠΌΠ½Π°, Π½ΠΎ с ΠΏΠΎΠ²Π΅Ρ‡Π΅ функционалности. МоТСм ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ заявка Π·Π° парсинг, изпълнСниС, ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Ρ‚.Π½.

Super extended query – Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°ΠΌΠ΅ Π² настоящия Π΄ΠΎΠΊΠ»Π°Π΄. МоТС Π±ΠΈ искамС Π½Π΅Ρ‰ΠΎ ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°ΠΊΡŠΠ² списък с ТСлания, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π°Π½, Ρ‚.Π΅. Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ искамС, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ Π΅ възмоТно ΠΈ Π² Π½Π°ΠΉ-скоро Π²Ρ€Π΅ΠΌΠ΅. Π—Π°Ρ‚ΠΎΠ²Π° просто Π³ΠΎ записахмС ΠΈ Ρ‰Π΅ Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Π° настоявамС основнитС Ρ…ΠΎΡ€Π°.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

А ΠΎΠ½ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ, Π΅ простата заявка ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½Π°Ρ‚Π° заявка.

Каква Π΅ особСността Π½Π° всСки ΠΏΠΎΠ΄Ρ…ΠΎΠ΄?

ΠŸΡ€ΠΎΡΡ‚Π°Ρ‚Π° заявка Π΅ Π΄ΠΎΠ±Ρ€Π° Π·Π° Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ изпълнСниС. ИзпълнявамС я вСднъТ ΠΈ забравямС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ тя Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½ΠΈ, Ρ‚.Π΅. Π·Π° някои високо ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π½ΠΈ систСми Π½Π΅ Π΅ подходяща.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΎΡ‚ΠΎ заявка – спСстява Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΈ парсинга. Π’ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. Π˜Π·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°. Π’Π°ΠΌ Π½Π΅ става Π²ΡŠΠΏΡ€ΠΎΡ само Π·Π° спСстяванС ΠΏΡ€ΠΈ парсинга. Има спСстяванС ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠŸΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ към ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π°. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. МоТС Π΄Π° бъдС Java ΠΈ Ρ‚.Π½.

Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ заявка. Π˜Π·ΠΏΡŠΠ»Π½ΠΈΡ…ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π‘ΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ close. КъдС Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Ρ‚ΡƒΠΊ? Π’ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Няма ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π’Π°ΠΊΠ° пишС във всички ΠΊΠ½ΠΈΠ³ΠΈ. Π’Π°ΠΊΠ° трябва Π΄Π° сС пишС. Ако искатС максимална производитСлност, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠ°.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Но ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π—Π°Ρ‰ΠΎ? Π—Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ "close". И ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡƒΡˆΠ°Ρ‡ с Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠšΠ°Π·Π°Ρ…ΠΌΠ΅ "PARSE EXECUTE DEALLOCATE".

Π—Π°Ρ‡Π΅ΠΌ Ρ‚Π΅Π·ΠΈ излишни създавания ΠΈ изтСгляния Π½Π° заявки? Π’Π΅ Π½Π° Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅ са Π½ΡƒΠΆΠ½ΠΈ. Но ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π² PreparedStatement Ρ‚Π°ΠΊΠ° ΠΈ става, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€ΠΈΠΌ, Ρ‚Π΅ затварят всичко Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ искамС.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ИскамС, ΠΊΠ°Ρ‚ΠΎ Π·Π΄Ρ€Π°Π²ΠΈ Ρ…ΠΎΡ€Π°, Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Π±Π°Π·Π°Ρ‚Π°. Π’Π·ΠΈΠΌΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΏΡŠΡ‚ ΠΈ подготвямС Π½Π°ΡˆΠ°Ρ‚Π° заявка, слСд Ρ‚ΠΎΠ²Π° я изпълнявамС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡŠΡ‚ΠΈ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡŠΡ‚ΠΈ – Ρ‚ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡŠΡ‚ Π·Π° цСлия ΠΆΠΈΠ²ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ парсим. И Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ REST ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡŠΡ‰ΠΈΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° заявката. Π’ΠΎΠ²Π° Π΅ Π½Π°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π».

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Как Π΄Π° постигнСм Ρ‚ΠΎΠ²Π°?

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Много Π΅ просто – Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° затварямС заявкитС. ПишСм Ρ‚Π°ΠΊΠ°: "prepare" "execute".

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Ако стартирамС Ρ‚ΠΎΠ²Π°, ясно Π΅, Ρ‡Π΅ някъдС Π½Π΅Ρ‰ΠΎ Ρ‰Π΅ сС ΠΏΡ€Π΅Π»Π΅Π΅. Ако Π½Π΅ Π΅ ясно, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ. Π’Π·Π΅ΠΌΠ°ΠΌΠ΅ ΠΈ пишСм Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² прост ΠΌΠ΅Ρ‚ΠΎΠ΄. БъздавамС заявка. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Π½Π° някаква вСрсия Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅, Ρ‡Π΅ ΠΏΠ°Π΄Π° доста Π±ΡŠΡ€Π·ΠΎ с Π·Π°Π³ΡƒΠ±Π° Π½Π° цялата ΠΏΠ°ΠΌΠ΅Ρ‚, която ΠΈΠΌΠ°ΠΌΠ΅.

Ясно Π΅, Ρ‡Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° Π³Ρ€Π΅ΡˆΠΊΠΈ лСсно сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚. Няма Π΄Π° говоря Π·Π° тях. Но Ρ‰Π΅ ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Π² Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π΅ бСзсмислСн, Π½ΠΎ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Как Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ? Какво трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π°?

Π’ рСалността прилоТСнията Π²ΠΈΠ½Π°Π³ΠΈ затварят заявкитС. Π’ΡŠΠ² всичкитС ΠΊΠ½ΠΈΠ³ΠΈ пишС, Ρ‡Π΅ трябва Π΄Π° сС затварят, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‰Π΅ ΠΈΠ·Ρ‚Π΅Ρ‡Π΅.

И PostgreSQL Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π° запитвания. НСобходимо Π΅ всяка сСсия сама Π΄Π° създава Ρ‚ΠΎΠ·ΠΈ кСш.

И Π²Ρ€Π΅ΠΌΠ΅ Π·Π° парсинг ΡΡŠΡ‰ΠΎ Π½Π΅ искамС Π΄Π° Π³ΡƒΠ±ΠΈΠΌ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

И ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ Π½Π΅ΠΊΠ° всичко Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π² PgSQL. Π’Π°ΠΌ ΠΈΠΌΠ° кСш. Π’ΠΎΠΉ всичко ΠΊΠ΅ΡˆΠΈΡ€Π°. Π©Π΅ станС прСкрасно. НиС Ρ‚Π°ΠΊΠ° Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅. ИмамС 100500 запитвания. НС Ρ€Π°Π±ΠΎΡ‚ΠΈ. НС смС съгласни Π΄Π° трансформирамС запитванията Ρ€ΡŠΡ‡Π½ΠΎ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈ. НС-Π½Π΅.

ИмамС Π²Ρ‚ΠΎΡ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ сами Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ. ΠžΡ‚Π²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ изходния ΠΊΠΎΠ΄, Π·Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ. Π Π°Π±ΠΎΡ‚ΠΈΠΌ, Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ. Оказа сС, Ρ‡Π΅ Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° слоТно Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Появи сС Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π· август 2015 Π³ΠΎΠ΄ΠΈΠ½Π°. Π‘Π΅Π³Π° Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° ΠΏΠΎ-ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Π° вСрсия. И всичко Π΅ супСр. Π Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€Π΅, Ρ‡Π΅ Π½Π΅ промСнямС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π”ΠΎΡ€ΠΈ спряхмС Π΄Π° мислим Π² посока PgSQL, Ρ‚.Π΅. Ρ‚ΠΎΠ²Π° Π½ΠΈ бСшС напълно Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ практичСски всички Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π΄ΠΎ Π½ΡƒΠ»Π°.

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Server-prepared statements сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚ Π½Π° ΠΏΠ΅Ρ‚ΠΎΡ‚ΠΎ изпълнСниС, Π·Π° Π΄Π° Π½Π΅ Ρ…Π°Ρ€Ρ‡ΠΈΠΌ ΠΏΠ°ΠΌΠ΅Ρ‚ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° всяко Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

МоТС Π΄Π° ΠΏΠΈΡ‚Π°Ρ‚Π΅ – къдС са Ρ†ΠΈΡ„Ρ€ΠΈΡ‚Π΅? Какво ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅? И Ρ‚ΡƒΠΊ няма Π΄Π° Π΄Π°ΠΌ Ρ†ΠΈΡ„Ρ€ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π·Π° всяко Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Ρ‚Π΅ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ.

Π˜ΠΌΠ°Ρ…ΠΌΠ΅ запитвания, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Π·Π° OLTP-запитванията Ρ…Π°Ρ€Ρ‡Π΅Ρ…ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 20 милисСкунди Π·Π° парсинг. ИмашС 0,5 милисСкунди Π·Π° изпълнСниС ΠΈ 20 милисСкунди Π·Π° парсинг. Π—Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ бСшС 10 ΠšΠΈΠ‘ тСкст ΠΈ 170 Ρ€Π΅Π΄Π° ΠΏΠ»Π°Π½. Π’ΠΎΠ²Π° Π΅ OLTP Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅. Π’ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° 1, 5, 10 Ρ€Π΅Π΄Π°, понякога ΠΏΠΎΠ²Π΅Ρ‡Π΅.

Но Π½Π° нас ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π½ΠΈ сС искашС Π΄Π° Ρ…Π°Ρ€Ρ‡ΠΈΠΌ 20 милисСкунди. НиС Π³ΠΎ свСдохмС Π΄ΠΎ 0. Всичко Π΅ страхотно.

Какво ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚Π΅ ΠΎΡ‚ Ρ‚ΡƒΠΊ? Ако ΠΈΠΌΠ°Ρ‚Π΅ Java, Π²Π·Π΅ΠΌΠ°Ρ‚Π΅ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ‚Π° вСрсия Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ сС Ρ€Π°Π΄Π²Π°Ρ‚Π΅.

Ако ΠΈΠΌΠ°Ρ‚Π΅ някакъв Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ, помислСтС – ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΈ вас Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ Π²ΠΈ трябва? Π—Π°Ρ‰ΠΎΡ‚ΠΎ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° крайния Π΅Π·ΠΈΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ Π΅ PL 8 ΠΈΠ»ΠΈ ΠΈΠΌΠ°Ρ‚Π΅ LibPQ, Π½Π΅ Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Π΅ Ρ…Π°Ρ€Ρ‡ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π΅ Π·Π° изпълнСниС, Π° Π·Π° парсинг ΠΈ Π΅ Π΄ΠΎΠ±Ρ€Π΅ Ρ‚ΠΎΠ²Π° Π΄Π° бъдС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ. Как? Всичко Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π‘ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠΈ, някакви особСности. И Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π° тях сСга Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ. Голямата част Ρ‰Π΅ бъдС Π·Π° ΠΏΡ€ΠΎΠΌΠΈΡˆΠ»Π΅Π½Π° архСология, Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅, Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ сС Π½Π°Ρ‚ΡŠΠΊΠ½Π°Ρ…ΠΌΠ΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Ако Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ. Π’Π°ΠΊΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ сС случва. Някой ΡΠ²ΡŠΡ€Π·Π²Π° Π½ΠΈΠ·ΠΎΠ²Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° SQL-Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅.

Π—Π°Ρ‰ΠΎ Π΅ лошо? Π›ΠΎΡˆΠΎ Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ всСки ΠΏΡŠΡ‚ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½ΠΈΠ·.

И Π·Π° Ρ‚Π°Π·ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° строка трябва ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° сС изчисли hashCode. Π’ΠΎΠ²Π° наистина Π΅ Π·Π°Π΄Π°Ρ‡Π° Π·Π° CPU – Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ дълъг тСкст Π½Π° заявка Π² Π΄ΠΎΡ€ΠΈ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ hash Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто. Π—Π°Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΎΠ΄ΡŠΡ‚ Π΅ прост – Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ заявки. Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ Π³ΠΈ Π² някаква Π΅Π΄Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°. И сС Ρ€Π°Π΄Π²Π°ΠΉΡ‚Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

БлСдващият ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ са Π²Π°ΠΆΠ½ΠΈ. Има ORM, ΠΊΠΎΠΈΡ‚ΠΎ ΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ какъв Π΅ NULL, Π½Π΅ΠΊΠ° бъдС какъв Π΄Π° Π΅. Ако Π΅ Int, Ρ‚ΠΎ Π½ΠΈΠ΅ ΠΊΠ°Π·Π²Π°ΠΌΠ΅ setInt. А Π°ΠΊΠΎ Π΅ NULL, Π½Π΅ΠΊΠ° бъдС VARCHAR Π²ΠΈΠ½Π°Π³ΠΈ. И ΠΊΠ°ΠΊΠ²Π° Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π°, Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка, какъв Ρ‚Π°ΠΌ Π΅ NULL? Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сама всичко Ρ‰Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅. И Ρ‚Π°ΠΊΡŠΠ² сцСнарий Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ ΠΉ ΠΏΡƒΠΊΠ°. Ако Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚ ΠΊΠ°Π·Π²Π°Ρ‚Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ число, Π° Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡŠΡ‚ ΠΊΠ°Π·Π²Π°Ρ‚Π΅, Ρ‡Π΅ Π΅ VARCHAR, Ρ‚ΠΎ Π΅ нСвъзмоТно Π΄Π° сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Server-prepared statements. И Π² Ρ‚Π°ΠΊΡŠΠ² случай сС Π½Π°Π»Π°Π³Π° Π΄Π° сС създадС Π½Π°ΡˆΠΈΡΡ‚ statement ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Ако ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ заявки, слСдСтС Π΄Π° Π½Π΅ сС ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ Π² ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π°. Врябва Π΄Π° Π²Π½ΠΈΠΌΠ°Π²Π°Ρ‚Π΅ с NULL. Π’ΠΎΠ²Π° Π΅ чСста Π³Ρ€Π΅ΡˆΠΊΠ°, която ΠΈΠΌΠ°Ρ…ΠΌΠ΅ слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ PreparedStatements.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π”ΠΎΠ±Ρ€Π΅, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ…ΠΌΠ΅. Π’Π·Π΅Ρ…ΠΌΠ΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. И производитСлността ΠΏΠ°Π΄Π½Π°. Всичко стана лошо.

Как Ρ‚Π°ΠΊΠ°? Π’ΠΎΠ²Π° бъг Π»ΠΈ Π΅ ΠΈΠ»ΠΈ функция? Π—Π° съТалСниС, Π½Π΅ успяхмС Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ – бъг Π»ΠΈ Π΅ ΠΈΠ»ΠΈ функция. Но ΠΈΠΌΠ° напълно прост сцСнарий Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ΠΎΠΉ Π½ΠΈ ΠΈΠ·Π½Π΅Π½Π°Π΄Π° напълно. И става Π΄ΡƒΠΌΠ° Π·Π° ΠΈΠ·Π±ΠΎΡ€ ΠΎΡ‚ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ Π΅Π΄Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°. НиС, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, ΠΈΠΌΠ°Ρ…ΠΌΠ΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° заявки. Π’Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ…Π° Π΄Π²Π΅-Ρ‚Ρ€ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π½ΠΎ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² сцСнарий Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅. Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π±Π°Π·Π° с ΠΊΠ°ΠΊΠ²Π°Ρ‚ΠΎ ΠΈ Π΄Π° Π΅ вСрсия ΠΈ Π³ΠΎ Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Π‘ΠΌΠΈΡΡŠΠ»ΡŠΡ‚ Π΅, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, всяка ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Π΅ индСксирана. Π’ Π΅Π΄Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΏΠΎ стойността NULL ΠΈΠΌΠ° ΠΌΠΈΠ»ΠΈΠΎΠ½ Ρ€Π΅Π΄Π°. А във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈΠΌΠ° само 20 Ρ€Π΅Π΄Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ изпълнявамС Π±Π΅Π· ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅.

Ако Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° изпълнявамС със ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Ρ‚.Π΅. изпълнявамС Π·Π½Π°ΠΊ Β«?Β» ΠΈΠ»ΠΈ Β«$1Β» Π·Π° Π½Π°ΡˆΠ°Ρ‚Π° заявка, ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅?

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ изпълнСниС – ΠΊΠ°ΠΊΡ‚ΠΎ трябва. Π’Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ – ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. НСщо Π΅ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΎ. Π’Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ-Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΎΡ‚ΠΎ-ΠΏΠ΅Ρ‚ΠΎΡ‚ΠΎ. ПослС Ρ…ΠΎΠΏ – ΠΈ ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ Ρ‚Π°ΠΊΠ°. И Π½Π°ΠΉ-Π»ΠΎΡˆΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° сС случва ΠΏΡ€ΠΈ ΡˆΠ΅ΡΡ‚ΠΎΡ‚ΠΎ изпълнСниС. Кой знаСшС, Ρ‡Π΅ трябва Π΄Π° сС направят Ρ‚ΠΎΡ‡Π½ΠΎ ΡˆΠ΅ΡΡ‚ изпълнСния, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ какъв Π΅ наистина ΠΏΠ»Π°Π½ΡŠΡ‚ Π·Π° изпълнСниС?

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Кой Π΅ Π²ΠΈΠ½ΠΎΠ²Π΅Π½? Какво сС Π΅ случило? Π‘Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° оптимизация. И тя Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Π·Π° общия случай. И, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΎΡ‚ някакъв ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π½Π° ΠΎΠ±Ρ‰ ΠΏΠ»Π°Π½, ΠΊΠΎΠΉΡ‚ΠΎ, Π·Π° съТалСниС, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½. МоТС Π΄Π° бъдС ΡΡŠΡ‰ΠΈΡ, Π° ΠΌΠΎΠΆΠ΅ ΠΈ Π΄Π° Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½. И Ρ‚Π°ΠΌ ΠΈΠΌΠ° някаква ΠΏΡ€Π°Π³ΠΎΠ²Π°Ρ‚Π° стойност, която Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Какво ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ²Π°? Π’ΡƒΠΊ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΅ ΠΏΠΎ-слоТно Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° Π½Π΅Ρ‰ΠΎ. Има простото Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅. Π’ΠΎΠ²Π° Π΅ +0, OFFSET 0. Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠŸΡ€ΠΎΡΡ‚ΠΎ добавямС Β«+0Β» Π² заявката ΠΈ всичко Π΅ Π½Π°Ρ€Π΅Π΄. Π©Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΏΠΎ-късно.

И ΠΈΠΌΠ° ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅Ρ‚Π΅. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ трябва Π½Π΅ само Π΄Π° напишС заявката, Π½ΠΎ ΠΈ 6 ΠΏΡŠΡ‚ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ΅ Β«explain analyzeΒ». Ако ΠΊΠ°Π·Π²Π° само 5, няма Π΄Π° ΡΠ²ΡŠΡ€ΡˆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°.

И ΠΈΠΌΠ° ΠΈ трСтият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅ΠΉΠ» Π² pgsql-hackers. Написах, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ясно – Π΄Π°Π»ΠΈ Π΅ бъг ΠΈΠ»ΠΈ функция.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Π”ΠΎΠΊΠ°Ρ‚ΠΎ мислим – бъг Π»ΠΈ Π΅ ΠΈΠ»ΠΈ функция, Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ. Π’Π·Π΅ΠΌΠ°ΠΌΠ΅ Π½Π°ΡˆΠ°Ρ‚Π° заявка ΠΈ добавямС Β«+0Β». Всичко Π΅ Π½Π°Ρ€Π΅Π΄. Π”Π²Π° символа ΠΈ Π΄ΠΎΡ€ΠΈ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° мислим ΠΊΠ°ΠΊΠ²ΠΎ сС случва. Много просто. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π°Π±Ρ€Π°Π½ΠΈΡ…ΠΌΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° индСкс ΠΏΠΎ Ρ‚Π°Π·ΠΈ ΠΊΠΎΠ»ΠΎΠ½Π°. НямамС индСкс ΠΏΠΎ ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° Β«+0Β» ΠΈ всичко, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° индСкс, всичко Π΅ Π½Π°Ρ€Π΅Π΄.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π•Ρ‚ΠΎ Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π·Π° 6 explain-ΠΊΠ°. Π’ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ вСрсии трябва Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ 6 ΠΏΡŠΡ‚ΠΈ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Ако няматС ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°. И накрая ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°Π·ΠΈ заявка сС проваля. Нищо слоТно.

ИзглСТда, ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅? Π’ΡƒΠΊ Π΅ бъг, Ρ‚Π°ΠΌ Π΅ бъг. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ бъг навсякъдС.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

НСка Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ. НапримСр, ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ схСми. Π‘Ρ…Π΅ΠΌΠ° А с Ρ‚Π°Π±Π»ΠΈΡ†Π° Π« ΠΈ схСма Π‘ с Ρ‚Π°Π±Π»ΠΈΡ†Π° Π«. Заявката – Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°. Какво Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π² Ρ‚ΠΎΠ·ΠΈ случай? Π©Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π³Ρ€Π΅ΡˆΠΊΠ°. Всичко ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅ Ρ‰Π΅ сС случи. ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΡ‚ΠΎ Π΅ Ρ‚Π°ΠΊΠΎΠ²Π° – бъг навсякъдС, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всичко ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π‘Π΅Π³Π° Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅: Β«Π—Π°Ρ‰ΠΎ?Β». ИзглСТда, ΠΈΠΌΠ° докумСнтация, Ρ‡Π΅, Π°ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ схСма, Ρ‚ΠΎ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Β«search_pathΒ», която ΡƒΠΊΠ°Π·Π²Π° къдС Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°. ИзглСТда, Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°.

Π’ Ρ‡Π΅ΠΌ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ server-prepared statements Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΠΈΡ€Π°Ρ‚, Ρ‡Π΅ search_path ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС промСнян. Π’ΠΎΠ²Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ остава константно Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. И някои части ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΠΏΠΎΠ΄Ρ…Π²Π°Π½Π°Ρ‚ Π½ΠΎΠ²ΠΈΡ‚Π΅ стойности.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° зависи ΠΎΡ‚ вСрсията, Π½Π° която тСстватС. Зависи ΡΡŠΡ‰ΠΎ ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ сСриозно сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ Π²ΠΈ. А вСрсия 9.1 просто Ρ‰Π΅ изпълни старитС заявки. НовитС вСрсии ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° засСкат ΡƒΠ»ΠΎΠ²ΠΊΠ°Ρ‚Π° ΠΈ Π΄Π° ΠΊΠ°ΠΆΠ°Ρ‚, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Set search_path + server-prepared statements =
ΠΊΠ΅ΡˆΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΏΠ»Π°Π½ Π½Π΅ трябва Π΄Π° промСня Ρ‚ΠΈΠΏΠ° Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°

Как Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌ? Има проста Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° – Π½Π΅ Π³ΠΎ ΠΏΡ€Π°Π²Π΅Ρ‚Π΅. НС промСняйтС search_path Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Ако промСнятС, ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΠ²ΠΎ соСдинСниС.

МоТС Π΄Π° обсъдим, Ρ‚. Π΅. Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ, Π΄Π° обсъдим, Π΄Π° допишСм. МоТС Π±ΠΈ Ρ‰Π΅ ΡƒΠ±Π΅Π΄ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Ρ‡Π΅ Π² случай, Ρ‡Π΅ някой промСня стойност, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ трябва Π΄Π° увСдомява ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с: β€žΠ’ΠΈΠΆΡ‚Π΅, Ρ‚ΡƒΠΊ стойността сС Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»Π°. МоТС Π±ΠΈ трябва Π΄Π° Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚Π΅ statements, Π΄Π° Π³ΠΈ ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅?β€œ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ сС Π΄ΡŠΡ€ΠΆΠΈ Ρ‚Π°ΠΉΠ½ΠΎ ΠΈ Π½Π΅ ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½, Ρ‡Π΅ някъдС Π²ΡŠΡ‚Ρ€Π΅ Π² statements сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΎ.

И ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°ΠΌ – Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎ Π·Π° Java. Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π² PL/pgSQL Π΅Π΄ΠΈΠ½ Π½Π° Π΅Π΄ΠΈΠ½. Но Ρ‚Π°ΠΌ Ρ‰Π΅ сС Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

НСка ΠΏΡ€ΠΎΠ±Π²Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Π΄Π°Π½Π½ΠΈ. Π˜Π·Π±ΠΈΡ€Π°ΠΌΠ΅, ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅. ИмамС Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΌΠΈΠ»ΠΈΠΎΠ½ Ρ€Π΅Π΄Π°. ВсСки Ρ€Π΅Π΄ Π΅ ΠΏΠΎ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚. Около Π΅Π΄ΠΈΠ½ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ Π΄Π°Π½Π½ΠΈ. И ΠΈΠΌΠ°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π² Java ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° ΠΎΡ‚ 128 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°.

НиС, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π½ΠΎ във всички ΠΊΠ½ΠΈΠ³ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π’. Π΅. отварямС resultSet ΠΈ Ρ‡Π΅Ρ‚Π΅ΠΌ ΠΎΡ‚ Ρ‚Π°ΠΌ Π΄Π°Π½Π½ΠΈ Π½Π° части. Π©Π΅ сработи Π»ΠΈ Ρ‚ΠΎΠ²Π°? Няма Π»ΠΈ Π΄Π° ΠΏΠ°Π΄Π½Π΅ ΠΏΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚? Π©Π΅ Ρ‡Π΅Ρ‚Π΅ Π»ΠΈ ΠΏΠΎ ΠΌΠ°Π»ΠΊΠΎ? НСка вярвамС Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, вярвамС Π² Postgres. НС вярвамС. Π©Π΅ ΠΏΠ°Π΄Π½Π΅ΠΌ OutOfMemory? Кого Π΅ Ρ‡ΠΎΠ²ΡŠΡ€ΠΊΠ°Π»ΠΎ OutOfMemory? А ΠΊΠΎΠΉ успя Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈ слСд Ρ‚ΠΎΠ²Π°? Някой успя Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈ.

Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠΈΠ»ΠΈΠΎΠ½ Ρ€Π΅Π΄Π°, Π½Π΅ ΠΌΠΎΠΆΠ΅ просто Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅. Π—Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ OFFSET/LIMIT. Кой Π΅ Π·Π° Ρ‚Π°ΠΊΡŠΠ² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚? И ΠΊΠΎΠΉ Π΅ Π·Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‡Π΅ трябва Π΄Π° сС ΠΈΠ³Ρ€Π°Π΅ с autoCommit?

Π’ΡƒΠΊ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π½Π°ΠΉ-нСочакваният Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сС ΠΎΠΊΠ°Π·Π²Π° правилният. И Π°ΠΊΠΎ извСднъТ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ autoCommit, Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅. Π—Π°Ρ‰ΠΎ Ρ‚Π°ΠΊΠ°? Науката Π½Π΅ Π·Π½Π°Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Но ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ всички ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‰ΠΈ сС с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Postgres, ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. PgJDBC Π² Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΠ·Π±ΠΈΡ€Π° всички Ρ€Π΅Π΄ΠΎΠ²Π΅.

Има вариация Π½Π° Ρ‚Π΅ΠΌΠ° FetchSize, Ρ‚. Π΅. ΠΌΠΎΠΆΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ statement Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Ρ‡Π΅ Ρ‚ΡƒΠΊ, моля, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ 10, 50. Но Ρ‚ΠΎΠ²Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ autoCommit. Π˜Π·ΠΊΠ»ΡŽΡ‡ΠΈΡ…Ρ‚Π΅ autoCommit – Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.

Но Ρ…ΠΎΠ΄Π΅Π½Π΅Ρ‚ΠΎ ΠΏΠΎ ΠΊΠΎΠ΄Π° ΠΈ навсякъдС Π²ΠΊΠ°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° setFetchSize Π΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Ρ‚Π°ΠΊΠ°Π²Π° настройка, която Π΄Π° Π·Π°Π΄Π°Π²Π° стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° цялото ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π•Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° ΠΊΠ°Π·Π°Ρ…ΠΌΠ΅. НастроихмС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°. И ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅? ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎ ΠΌΠ°Π»ΠΊΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ 10 Ρ€Π΅Π΄Π°, ΠΈΠΌΠ°ΠΌΠ΅ доста Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ стойността ΠΎΠΊΠΎΠ»ΠΎ сто.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’ идСалния случай, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, трябва Π΄Π° Π½Π°ΡƒΡ‡ΠΈΠΌ Π΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ ΠΈ Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Π½ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ‚Π° Π΅ слСдната: Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ defaultRowFetchSize Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ сто ΠΈ сС Ρ€Π°Π΄Π²Π°ΠΌΠ΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

НСка ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Π²ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-просто, ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ. НапримСр, INSERT, VALUES. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡŠΡ€ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. МоТС Π΄Π° сС ΠΊΠ°ΠΆΠ΅ ΠΈ 'INSERT SELECT'. Π’ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° Ρ‚ΠΎΠ²Π° Π΅ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ. Няма Ρ€Π°Π·Π»ΠΈΠΊΠ° Π² производитСлността.

ΠšΠ½ΠΈΠ³ΠΈΡ‚Π΅ ΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ трябва Π΄Π° изпълнявамС Batch statement, ΠΊΠ½ΠΈΠ³ΠΈΡ‚Π΅ ΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° изпълнявамС ΠΏΠΎ-слоТни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ скоби. И Π² Postgres ΠΈΠΌΠ° чудСсна функция – ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ COPY, Ρ‚.Π΅. Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Ако ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ, ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ някои интСрСсни открития. Как искамС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ²Π°? ИскамС Π΄Π° Π½Π΅ парсвамС ΠΈ Π΄Π° Π½Π΅ изпълнявамС излишни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Ρ‚Π° TCP Π½Π΅ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°. Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ Π·Π°Π΅Ρ‚ с ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° заявка, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° Π½ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ, Π½Π΅ Ρ‡Π΅Ρ‚Π΅ заявкитС. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Ρ‡Π°ΠΊΠ° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ заявката, Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ‡Π°ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π°.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

И Π·Π°Ρ‚ΠΎΠ²Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄Π΅Π½ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π° синхронизация. Излишни ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ взаимодСйствия, излишна Π·Π°Π³ΡƒΠ±Π° Π½Π° Π²Ρ€Π΅ΠΌΠ΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²Π˜ ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ добавямС, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-лошо става. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ΡŠΡ‚ Π΅ доста пСсимистичСн ΠΈ Π³ΠΈ добавя доста чСсто, ΠΎΠΊΠΎΠ»ΠΎ Π½Π° всСки 200 Ρ€Π΅Π΄Π°, Π² зависимост ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Ρ‚.Π½.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Понякога, Π°ΠΊΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡˆ само Π΅Π΄ΠΈΠ½ Ρ€Π΅Π΄, всичко сС ускори дСсСтократно. Π‘Ρ‚Π°Π²Π° Ρ‚Π°ΠΊΠ°. Π—Π°Ρ‰ΠΎ? ΠšΠ°ΠΊΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, константа бСшС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° някъдС. А стойността '128' ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΡˆΠ΅ – Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ batching.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Java microbenchmark harness

Π”ΠΎΠ±Ρ€Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π° Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° вСрсия. ΠžΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅ Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ Ρ€Π΅Π»ΠΈΠ·Π°. Всички стойности, ΠΊΠΎΠΈΡ‚ΠΎ спомСнавам, сС основават Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ вСрсии.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

НСка ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ. ΠœΠ΅Ρ€ΠΈΠΈΠΌ InsertBatch просто. ΠœΠ΅Ρ€ΠΈΠΌ InsertBatch ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, Ρ‚.Π΅. ΡΡŠΡ‰ΠΎΡ‚ΠΎ, Π½ΠΎ с ΠΌΠ½ΠΎΠ³ΠΎ values. Π₯ΠΈΡ‚ΡŠΡ€ Ρ…ΠΎΠ΄. НС всСки Π³ΠΎ Π·Π½Π°Π΅, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π°ΠΊΡŠΠ² прост Ρ…ΠΎΠ΄, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ COPY.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

МоТС Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ COPY.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° със структури. ΠžΠ±ΡΠ²Π΅Ρ‚Π΅ Ρ‚ΠΈΠΏ User default, ΠΏΡ€Π΅Π΄Π°ΠΉΡ‚Π΅ масив ΠΈ INSERT Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°.

Ако ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ Π»ΠΈΠ½ΠΊΠ°: pgjdbc/ubenchmsrk/InsertBatch.java, Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π΅ Π½Π° GitHub. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ заявки Ρ‚Π°ΠΌ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚. НС Π΅ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ…ΠΌΠ΅. И ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Π΅, Ρ‡Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ batch - просто Π½Π΅ Π΅ възмоТно. Всички Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π½Π° batching са Ρ€Π°Π²Π½ΠΈ Π½Π° Π½ΡƒΠ»Π°, Ρ‚.Π΅. Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π΅ практичСски Ρ€Π°Π²Π½ΠΎ Π½Π° Π½ΡƒΠ»Π° Π² сравнСниС с Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ изпълнСниС.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’ΠΌΡŠΠΊΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ. Π’Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π΅ доста проста. Π’Ρ€ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ. И ΠΊΠ°ΠΊΠ²ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΡƒΠΊ? Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ всичкитС Ρ‚Ρ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° са относитСлно сравними. И COPY ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’ΠΎΠ²Π° Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ вмъквамС Π½Π° ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ…ΠΌΠ΅ Π·Π° Π΅Π΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VALUES, Π΄Π²Π΅ стойности VALUES, Ρ‚Ρ€ΠΈ стойности VALUES ΠΈΠ»ΠΈ ΠΈΠ·Ρ€Π΅Π΄ΠΈΡ…ΠΌΠ΅ 10 с запСтая. Π’ΠΎΠ²Π° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ сСга ΠΏΠΎ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π°. 1, 2, 4, 128. Ясно Π΅, Ρ‡Π΅ Batch Insert, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ нарисуван Π² синьо, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΠ±Π»Π΅ΠΊΡ‡Π°Π²Π° ситуацията. Π’.Π΅. ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΌΡŠΠΊΠ²Π°Ρ‚Π΅ ΠΏΠΎ Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ, става Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, просто Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² VALUES смС Π²ΠΊΠ°Ρ€Π°Π»ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅. По-ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ EXECUTE.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° COPY Π·Π° ΠΌΠ°Π»ΠΊΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π΅ ΠΊΡ€Π°ΠΉΠ½ΠΎ Π½Π΅Ρ†Π΅Π»Π΅ΡΡŠΠΎΠ±Ρ€Π°Π·Π½ΠΎ. НС нарисувах Π΄ΠΎΡ€ΠΈ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π°. Π’Π΅ ΠΎΡ‚ΠΈΠ²Π°Ρ‚ Π² нСбСсата, Ρ‚.Π΅. Ρ‚Π΅Π·ΠΈ Π·Π΅Π»Π΅Π½ΠΈ Ρ†ΠΈΡ„Ρ€ΠΈ Π·Π° COPY.

COPY трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΠ±Π΅ΠΌΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΅ ΠΏΠΎΠ½Π΅ Π½Π°Π΄ сто Ρ€Π΅Π΄Π°. Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° отварянС Π½Π° Ρ‚ΠΎΠ²Π° съСдинСниС са Π³ΠΎΠ»Π΅ΠΌΠΈ. И, чСстно ΠΊΠ°Π·Π°Π½ΠΎ, Π½Π΅ съм задълбавал Π² Ρ‚Π°Π·ΠΈ посока. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ… batch, COPY - Π½Π΅.

Какво ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ? Π˜Π·ΠΌΠ΅Ρ€Π²Π°ΠΌΠ΅. Π Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ структури, ΠΈΠ»ΠΈ слоТСн batch, обСдиняващ няколко стойности.

PostgreSQL ΠΈ JDBC изстисквамС всичко. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Какво трябва Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΎΡ‚ Π΄Π½Π΅ΡˆΠ½Π°Ρ‚Π° лСкция?

  • PreparedStatement - Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΡˆΠ΅Ρ‚ΠΎ всичко. Π’ΠΎ Π΄Π°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π·Π° производитСлността. ΠžΠ±Π°Ρ‡Π΅ Π΄Π°Π²Π° ΠΈ голяма Π±ΠΎΡ‡ΠΊΠ° с ΠΊΠ°Ρ‚Ρ€Π°Π½.
  • И трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ EXPLAIN ANALYZE 6 ΠΏΡŠΡ‚ΠΈ.
  • И трябва Π΄Π° Ρ€Π°Π·Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ OFFSET 0 ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ +0, Π·Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ останалия ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΈ заявки.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster