PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π°Ρ‡Π°Π»Π° 2016 Π³ΠΎΠ΄Π° Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€Π° Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²Π° "PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки"

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь! МСня Π·ΠΎΠ²ΡƒΡ‚ Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ². Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ 10 Π»Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ NetCracker. И Π² основном я занимаюсь ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ВсС, Ρ‡Ρ‚ΠΎ связано с 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 Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

А Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ – это simple query ΠΈ extended query.

Π’ Ρ‡Π΅ΠΌ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°?

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ запрос Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ выполнСния. Π Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΈ Π·Π°Π±Ρ‹Π»ΠΈ. И ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚. Π΅. для ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Extended query – позволяСт ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя Π½Π° парсингС. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали ΠΈ Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Нам это ΠΊΡ€Π°ΠΉΠ½Π΅-ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ экономия Π½Π° парсингС. Π•ΡΡ‚ΡŒ экономия Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Java ΠΈ Ρ‚. Π΄.

ΠœΡ‹ создали statement. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ. Π‘ΠΎΠ·Π΄Π°Π»ΠΈ close. Π“Π΄Π΅ здСсь ошибка? Π’ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? НСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π’Π°ΠΊ Π²ΠΎ всСх ΠΊΠ½ΠΈΠ³Π°Ρ… написано. Π’Π°ΠΊ Π½Π°Π΄ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ‚Π°ΠΊ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Но ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«closeΒ». И ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π΅ΠΌ, Ρ‚ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… получаСтся – это ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΡƒΡ€ΠΈΠ»ΡŒΡ‰ΠΈΠΊΠ° с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ сказали Β«PARSE EXECUTE DEALLOCATEΒ».

Π—Π°Ρ‡Π΅ΠΌ эти лишниС создания ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° statements? Они Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² PreparedStatement Ρ‚Π°ΠΊ ΠΈ получаСтся, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡ… Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ, ΠΎΠ½ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ всС Π½Π° Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, ΠΊΠ°ΠΊ Π·Π΄ΠΎΡ€ΠΎΠ²Ρ‹Π΅ люди, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±Π°Π·ΠΎΠΉ. Один Ρ€Π°Π· взяли ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ наш statement, ΠΏΠΎΡ‚ΠΎΠΌ Π΅Π³ΠΎ выполняСм ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·. На самом Π΄Π΅Π»Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· – это ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π·Π° всю Тизнь прилоТСния запарсили. И Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… REST ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ statement id. Π’ΠΎΡ‚ это наша Ρ†Π΅Π»ΡŒ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Как Π½Π°ΠΌ этого Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ?

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠžΡ‡Π΅Π½ΡŒ просто – Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ statements. ПишСм Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: Β«prepareΒ» Β«executeΒ».

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Если ΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ΅ запустим, Ρ‚ΠΎ понятно, Ρ‡Ρ‚ΠΎ Ρƒ нас Π³Π΄Π΅-Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пСрСполнится. Если Π½Π΅ понятно, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΈ напишСм Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΉ простой ΠΌΠ΅Ρ‚ΠΎΠ΄. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ statement. ЗапускаСм Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ вСрсии Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ довольно быстро валится с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ всСй памяти, которая Ρƒ Π½Π° сбыла.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ошибки Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΎ Π½ΠΈΡ… Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ. Но я скаТу, Ρ‡Ρ‚ΠΎ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС. ΠœΠ΅Ρ‚ΠΎΠ΄ бСстолковый, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Как Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ? Π§Ρ‚ΠΎ Π½Π°ΠΌ для этого Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния всСгда Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ statements. Π’ΠΎ всСх ΠΊΠ½ΠΈΠΆΠΊΠ°Ρ… ΠΏΠΈΡˆΡƒΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅Ρ‚.

И PostgreSQL Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запросы. Надо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая сСссия сама для сСбя создавала этот кэш.

И врСмя Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π° парсинг ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

И ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ всС Π·Π°Π²Π΅Ρ€Π½Π΅ΠΌ Π² PgSQL. Π’Π°ΠΌ Π΅ΡΡ‚ΡŒ кэш. Он всС ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠœΡ‹ Ρ‚Π°ΠΊΠΎΠ΅ посмотрСли. Π£ нас 100500 запросов. НС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠœΡ‹ Π½Π΅ согласны – Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ запросы. НСт-Π½Π΅Ρ‚.

Π£ нас Π΅ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – Π²Π·ΡΡ‚ΡŒ ΠΈ самим Π·Π°ΠΏΠΈΠ»ΠΈΡ‚ΡŒ. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ исходники, Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠΈΠ»ΠΈΡ‚ΡŒ. Пилим-ΠΏΠΈΠ»ΠΈΠΌ. Оказалось, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ это слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

Появилось это Π² августС 2015 Π³ΠΎΠ΄Π°. БСйчас ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ соврСмСнная вСрсия. И всС Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ мСняСм Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. И ΠΌΡ‹ Π΄Π°ΠΆΠ΅ пСрСстали Π΄ΡƒΠΌΠ°Ρ‚ΡŒ Π² сторону PgSQL, Ρ‚. Π΅. Π½Π°ΠΌ этого Π²ΠΏΠΎΠ»Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ практичСски Π΄ΠΎ нуля.

БоотвСтствСнно Server-prepared statements активируСтся Π½Π° 5-ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ запрос.

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 Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠšΡ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚? Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ? Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… содСрТит ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. И ΠΎΠ½Π° ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄ generic случай. И, соотвСтствСнно, начиная с ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ€Π°Π·Π° ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° generic ΠΏΠ»Π°Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊ соТалСнию, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. И Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ повСдСнию.

Π§Ρ‚ΠΎ с этим ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ? Π—Π΄Π΅ΡΡŒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ слоТно Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ. Π•ΡΡ‚ΡŒ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ. Π­Ρ‚ΠΎ +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 =
cached plan must not change result type

Как это Π»Π΅Ρ‡ΠΈΡ‚ΡŒ? Π•ΡΡ‚ΡŒ простой Ρ€Π΅Ρ†Π΅ΠΏΡ‚ – Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ. НС Π½Π°Π΄ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ 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

Π‘Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строчку ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡˆΡŒ ΠΎΠ΄Π½Ρƒ всСго ΠΈ Π² 10 Ρ€Π°Π· всС ускорится. Π’Π°ΠΊΠΎΠ΅ Π±Ρ‹Π²Π°Π΅Ρ‚. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, константа Π³Π΄Π΅-Ρ‚ΠΎ такая ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° использована. И Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«128Β» ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ – Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ batching.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Java microbenchmark harness

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅Π»ΠΈΠ·. ВсС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π°Π·Ρ‹Π²Π°ΡŽ, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° соврСмСнных вСрсиях.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ€ΠΈΠΌ. ΠœΡ‹ ΠΌΠ΅Ρ€ΠΈΠΌ InsertBatch простой. ΠœΡ‹ ΠΌΠ΅Ρ€ΠΈΠΌ InsertBatch ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΉ, Ρ‚. Π΅. Ρ‚ΠΎΠΆΠ΅ самоС, Π½ΠΎ values ΠΌΠ½ΠΎΠ³ΠΎ. Π₯ΠΈΡ‚Ρ€Ρ‹ΠΉ Ρ…ΠΎΠ΄. НС всС Ρ‚Π°ΠΊ ΡƒΠΌΠ΅ΡŽΡ‚, Π½ΠΎ это Ρ‚Π°ΠΊΠΎΠΉ простой Ρ…ΠΎΠ΄, Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ COPY.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

МоТно Π΄Π΅Π»Π°Ρ‚ΡŒ COPY.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

И ΠΌΠΎΠΆΠ½ΠΎ это Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° структурах. ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ User default type, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ массив ΠΈ 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 – Π½Π΅Ρ‚.

Π§Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ дальшС? ΠŸΠΎΠΌΠ΅Ρ€ΠΈΠ»ΠΈ. ПонимаСм, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ структуры, ΠΈΠ»ΠΈ Ρ…ΠΈΡ‚Ρ€ΠΎΡƒΠΌΠ½Ρ‹ΠΉ bacth, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

PostgreSQL ΠΈ JDBC Π²Ρ‹ΠΆΠΈΠΌΠ°Π΅ΠΌ всС соки. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ вынСсти ΠΈΠ· сСгодняшнСго Π΄ΠΎΠΊΠ»Π°Π΄Π°?

  • PreparedStatement – это нашС всС. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π΅Ρ‚ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Оно Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±ΠΎΡ‡ΠΊΡƒ дСгтя.
  • И Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ EXPLAIN ANALYZE 6 Ρ€Π°Π·.
  • И Π½Π°Π΄ΠΎ Ρ€Π°Π·Π±Π°Π²Π»ΡΡ‚ΡŒ OFFSET 0, ΠΈ Ρ‚Ρ€ΡŽΠΊΠ°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° +0 для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ Ρ‚Π°ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… запросов.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ