Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅

πŸ› οΈ Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ снимки Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL: ΠΎΠΏΡ‹Ρ‚ pgstream

PostgreSQL Π΄Π°Π²Π½ΠΎ Π·Π°Π²ΠΎΠ΅Π²Π°Π» Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΡ‰Π½ΠΎΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ администраторы ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с постоянной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования ΠΈ восстановлСния (dump/restore)? На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ инструмСнт pgstream, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ рассказала ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ· Xata.io, подСлившись своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ускорСния процСсса снятия ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Β«ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ²Β» PostgreSQL. πŸš€ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ pgstream ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½? pgstream β€” это инструмСнт с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для логичСской Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (CDC β€” Change Data Capture) Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL. Он отличаСтся нСсколькими ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями: Но Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ стала оптимизация ΠΈΠΌΠ΅Π½Π½ΠΎ процСсса снятия снимков PostgreSQL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ³Π½Π°Ρ‚ΡŒ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π³Π½Π°Ρ‚ΡŒ ΠΏΠΎ скорости стандартныС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ pg_dump ΠΈ pg_restore. πŸ“Œ Как Π±Ρ‹Π»ΠΎ устроСно Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈ Π² Ρ‡Ρ‘ΠΌ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Π”ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ процСсс создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° состоял ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шагов: ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° послСднСм этапС β€” скор
Π‘Ρ‚ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ синий слон-Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ PostgreSQL мчится ΠΏΠΎ ΡΠΈΡΡŽΡ‰ΠΈΠΌ Β«Ρ‚Ρ€ΡƒΠ±Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…Β» с Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ускоритСлями, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ пСрСдавая Ρ€Π΅Π·ΠΊΠΈΠΉ рост скорости создания ΠΈ восстановлСния снимков Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
Π‘Ρ‚ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ синий слон-Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏ PostgreSQL мчится ΠΏΠΎ ΡΠΈΡΡŽΡ‰ΠΈΠΌ Β«Ρ‚Ρ€ΡƒΠ±Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…Β» с Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ускоритСлями, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ пСрСдавая Ρ€Π΅Π·ΠΊΠΈΠΉ рост скорости создания ΠΈ восстановлСния снимков Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

PostgreSQL Π΄Π°Π²Π½ΠΎ Π·Π°Π²ΠΎΠ΅Π²Π°Π» Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΡ‰Π½ΠΎΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ администраторы ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с постоянной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ: ΠΊΠ°ΠΊ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования ΠΈ восстановлСния (dump/restore)? На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ инструмСнт pgstream, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ рассказала ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ· Xata.io, подСлившись своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ускорСния процСсса снятия ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Β«ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ²Β» PostgreSQL.

πŸš€ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ pgstream ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

pgstream β€” это инструмСнт с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для логичСской Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (CDC β€” Change Data Capture) Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL. Он отличаСтся нСсколькими ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями:

  • 🧩 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° DDL-ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: схСма ΠΈ Π΅Ρ‘ измСнСния автоматичСски Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ вмСстС с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • πŸ“¬ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Kafka ΠΈ webhook: позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • πŸ“Έ Π‘Π½Π°ΠΏΡˆΠΎΡ‚Ρ‹: созданиС цСлостного снимка Π±Π°Π·Ρ‹ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • πŸ” Врансформации ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ: ΠΌΠΎΠΆΠ½ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» Π²ΠΎ врСмя Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚ΠΎΠ².

Но Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ стала оптимизация ΠΈΠΌΠ΅Π½Π½ΠΎ процСсса снятия снимков PostgreSQL, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ³Π½Π°Ρ‚ΡŒ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π³Π½Π°Ρ‚ΡŒ ΠΏΠΎ скорости стандартныС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ pg_dump ΠΈ pg_restore.

πŸ“Œ Как Π±Ρ‹Π»ΠΎ устроСно Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈ Π² Ρ‡Ρ‘ΠΌ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°?

Π”ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ процСсс создания ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π° состоял ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шагов:

  • πŸ“– ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ схСмы исходной Π±Π°Π·Ρ‹: использовали ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ PostgreSQL pg_dump/pg_restore.
  • πŸ—‚οΈ Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: примСняли встроСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ PostgreSQL с использованиСм snapshot-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ сканирования Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² ΠΏΠΎ физичСским адрСсам (ctid). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΉ DuckDB ΠΈ PeerDB, позволял ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π΅Π· нСобходимости использования индСксов.
  • ✍️ Π—Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: отправляли ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ INSERT-запросы ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Ρ‹Π»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° послСднСм этапС β€” ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ записи Π΄Π°Π½Π½Ρ‹Ρ… сущСствСнно отставала ΠΎΡ‚ Β«Ρ€ΠΎΠ΄Π½Ρ‹Ρ…Β» инструмСнтов PostgreSQL. πŸ” Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΡŒ (observability), Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π² Π²Π΅Ρ€ΡΠΈΡŽ pgstream 0.6.0, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ выявили ΡƒΠ·ΠΊΠΎΠ΅ мСсто β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи.

⚑️ РСшСниС: оптимизация вставки Π΄Π°Π½Π½Ρ‹Ρ…

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ для массовой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π»ΡƒΡ‡ΡˆΠ΅ всСго подходят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹:

  • 🐌 ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ INSERT: ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ).
  • 🐒 ΠŸΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ INSERT (Batch Insert): быстрСС, Π½ΠΎ всё Π΅Ρ‰Ρ‘ уступаСт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ.
  • πŸš„ Команда COPY FROM Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: максимально быстрая вставка Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ПослС сСрии тСстов Π½Π° Π±Π°Π·Π΅ IMDb (~9 Π“Π‘, 21 Ρ‚Π°Π±Π»ΠΈΡ†Π°) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ Π½Π° использовании Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ COPY FROM, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² сущСствСнный прирост скорости.

πŸ› οΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования COPY FROM Π² PostgreSQL:

COPY employees (first_name, last_name, position)
FROM stdin WITH BINARY;

🚩 ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ созданиС индСксов ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ (Deferred indexes)

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ Π² отсрочкС создания индСксов ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ основной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, вСдь PostgreSQL Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ индСксы ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ограничСния послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ INSERT.

πŸ”§ РСализуСтся это просто:

  • Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… с ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌΠΈ индСксами ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°ΠΌΠΈ (ALTER TABLE ... DISABLE TRIGGER ALL).
  • Массовая вставка Ρ‡Π΅Ρ€Π΅Π· COPY FROM.
  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ индСксов ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΡƒΠΆΠ΅ послС ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π­Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ»Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ pgstream ΠΊ уровням pg_dump/pg_restore, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π²Π·ΠΎΡˆΠ»Π° ΠΈΡ….

πŸ”„ АвтоматичСская конфигурация Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ стало автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° (batch) Π½Π° основС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ количСства строк. РаньшС это создавало дисбаланс, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с Ρ€Π°Π·Π½ΠΎΠΉ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°Π²Π°Π»ΠΈ Ρ€Π°Π·Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° равномСрная, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π΅Π΅.

πŸ“Š Π§Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈ?

ВСсты Π½Π° Π½Π°Π±ΠΎΡ€Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… IMDb, MusicBrainz ΠΈ Firenibble ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ:

  • 🎯 ИспользованиС COPY FROM ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… индСксов позволяСт ΠΎΠ±Π³ΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρƒ pg_dump/pg_restore.
  • βš–οΈ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡΠ½Π°ΠΏΡˆΠΎΡ‚Ρ‹ ΠΎΡ‚ pgstream стали ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΈ прСдсказуСмСС Π΄Π°ΠΆΠ΅ Π½Π° слоТных схСмах с большим количСством Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ индСксов.

πŸ’‘ Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΈ наблюдСния

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΠ»ΠΈ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽ ΠΊΠ°ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…: часто самыС эффСктивныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π»Π΅ΠΆΠ°Ρ‚ Π½Π° повСрхности. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ систСмы ΠΈΠ»ΠΈ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС, Π½ΠΎ малоизвСстныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π‘Π£Π‘Π”. COPY FROM β€” яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€: инструмСнт доступСн ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚, Π½ΠΎ Π΅Π³ΠΎ прСимущСства Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹.

Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ Β«ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΒ». ΠŸΠ΅Ρ€Π΅ΡΡ‡Ρ‘Ρ‚ индСксов ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… β€” это ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ, Π½ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ускорСния массовых Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ.

πŸ”‘ Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

Команда pgstream продСмонстрировала, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ способны ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ удобство использования инструмСнта. Мои Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π½Π° основС этого ΠΎΠΏΡ‹Ρ‚Π°:

  • πŸ” Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°ΠΉΡ‚Π΅ возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π°ΠΌΠΈ Π‘Π£Π‘Π” ΠΈ Π½Π΅ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ встроСнными ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ каТутся Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌΠΈ.
  • πŸ—ƒοΈ ΠœΠ°ΡΡΠΎΠ²Ρ‹Π΅ вставки всСгда быстрСС Ρ‡Π΅Ρ€Π΅Π· COPY FROM β€” Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ INSERT-запросы ΠΏΡ€ΠΈ большой Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.
  • πŸ›‘ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ индСксы ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ссли это позволяСт Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ сцСнарий.

pgstream Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ»ΠΈ срСдних ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½ΠΎ ΠΈ для ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… энтСрпрайз-Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ врСмя ΠΈ рСсурсы.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация:

πŸ”– ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° Xata.io
πŸ“˜
ДокумСнтация pgstream
🐘
Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° PostgreSQL ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ COPY

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти ΠΏΡ€ΠΈΡ‘ΠΌΡ‹, Π²Ρ‹ смоТСтС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ со ΡΠ½Π°ΠΏΡˆΠΎΡ‚Π°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL. πŸš€