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 милисСкунди – Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ. Ако ΠΈΠΌΠ°Ρ‚Π΅ стотици заявки, Π²ΠΈΠ΅ Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π² сСкунди, Π·Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π· Ρ‚Π΅Π·ΠΈ заявки, Ρ‚.Π΅. Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π½Π°ΠΏΡ€Π°Π·Π½ΠΎ.

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

PostgreSQL ΠΈ JDBC - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π°Ρ‚Π° заявка. Какво Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚? Π§Π΅ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ исканСто, ΠΈ Π½ΠΈΡ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅.

PostgreSQL ΠΈ JDBC - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

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

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

PostgreSQL ΠΈ JDBC - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ, Π΅ simple query ΠΈ extended query.

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

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

PostgreSQL ΠΈ JDBC - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

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 сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π½Π° ΠΏΠ΅Ρ‚ΠΎΡ‚ΠΎ изпълнСниС, Π·Π° Π΄Π° Π½Π΅ сС Ρ…Π°Ρ€Ρ‡ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π·Π° всяка Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π° заявка.

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. И Π² Ρ‚Π°ΠΊΡŠΠ² случай трябва ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° създадСм Π½Π°ΡˆΠ΅Ρ‚ΠΎ заявлСниС.

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 - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

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

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 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 – Π½Π΅.

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

PostgreSQL ΠΈ JDBC - ΠΈΠ·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ максимума. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ Π‘ΠΈΡ‚Π½ΠΈΠΊΠΎΠ²

Какво трябва Π΄Π° ΠΈΠ·Π²Π°Π΄ΠΈΠΌ ΠΎΡ‚ днСшния Π΄ΠΎΠΊΠ»Π°Π΄?

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

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

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