Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° подобрСния Π½Π° API Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ Π½Π° PostgreSQL

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° нискоуровнСвото API, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡΡ‚Π° Π΄ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ индСкситС Π² PostgreSQL (Table/Index Access Method (AM) API), ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° подобряванС. ΠžΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° появата Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° API Π² PostgreSQL 12, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ²Π° API ΠΈ извСстнитС ограничСния Π½Π° вградСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, всС ΠΎΡ‰Π΅ Π½Π΅ са сС появили напълно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ СдинствСно ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Най-Ρ‚ΡŠΡ€ΡΠ΅Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΈ Π΄Π²ΠΈΠΆΠ΅Ρ‰ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° PostgreSQL са:

  • АлтСрнативни Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° MVCC, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° Π±Π°Π·Π° Π½Π° ΠΆΡƒΡ€Π½Π°Π»Π° UNDO.
  • ИндСксно-ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡŠΡ‚ Π½Π΅ Π΅ допълнСниС към Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ускорява запитванията, Π° прСдставлява основната структура ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π² която сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°.

ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π² API Table/Index AM Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° MVCC, сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ с ΠΎΠ³Π»Π΅Π΄ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ OrioleDB, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ с Ρ†Π΅Π» Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° извСстнитС Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ Π½Π° вградСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° PostgreSQL. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ Π·Π° ΠΏΡŠΠ»Π½Π°Ρ‚Π° интСграция Π½Π° OrioleDB с PostgreSQL са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ измСнСния Π² ΠΊΠΎΠ΄Π° Π½Π° PostgreSQL, ΠΊΠΎΠ΅Ρ‚ΠΎ услоТнява Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π° нСобходимостта ΠΎΡ‚ модСрнизация Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ API Table AM.

API Table AM Π½Π΅ Π½Π°Π»Π°Π³Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π° Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° MVCC. ВсС ΠΏΠ°ΠΊ, API Table AM ΠΈ API Index AM правят слСдното ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: всСки TID (Tuple/row Identifier) ΠΈΠ»ΠΈ сС индСксира ΠΎΡ‚ всички индСкси, ΠΈΠ»ΠΈ Π½Π΅ сС индСксира ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ. Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ Index AM ΠΈΠΌΠ° няколко ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ към Π΅Π΄ΠΈΠ½ TID (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GIN), всички Ρ‚Π΅Π·ΠΈ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ трябва Π΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ индСксируСмо Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° подобрСния Π½Π° API Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ Π½Π° PostgreSQL

Π’ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ бСшС ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΠ²Π°Π½ Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° броя Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ записванС (β€žwrite amplificationβ€œ) β€” Π°ΠΊΠΎ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π΅Π΄ΠΈΠ½ индСксниран Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° всСки индСкс Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°. Π—Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ напълно прСдимствата Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ UNDO ΠΈΠ»ΠΈ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π΄Ρ€ΡƒΠ³ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π±Π΅Π· β€žΡƒΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠ°β€œ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ WARM), Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π½Π°Ρ€ΡƒΡˆΠΈ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° подобрСния Π½Π° API Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ Π½Π° PostgreSQL

Π’Π°Π±Π»ΠΈΡ†Π° AM, основанная Π½Π° UNDO, Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ HOT (Heap-Only Tuples), Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ старыС вСрсии строк ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ UNDO ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚Ρƒ ΠΆΠ΅ страницу. Однако, ΠΏΠΎ мнСнию Π°Π²Ρ‚ΠΎΡ€ΠΎΠ², этого прСимущСства нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π°Π²Π΄Π°Ρ‚ΡŒ сущСствованиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π’Π°Π±Π»ΠΈΡ†Ρ‹ AM.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ограничСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ API:

  • По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° актуализацията Π½Π° Ρ€Π΅Π΄Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° индСкситС сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° β€žΠ²ΡΠΈΡ‡ΠΊΠΎ ΠΈΠ»ΠΈ Π½ΠΈΡ‰ΠΎβ€œ.
  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π² API Index AM возмоТности Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ³ΠΎ удалСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ. Π’ настоящСС врСмя ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΈΠ· индСксов массово с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ambulkdelete ΠΈ amvacuumcleanup. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· этот API ΠΏΡ€ΠΈΠ²Π΅Π»Π° Π±Ρ‹ ΠΊ Π½ΠΈΠ·ΠΊΠΎΠΉ эффСктивности, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь индСкс. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, API Π½Π΅ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ TID, слСдуСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ… всС.
  • Π˜Π½Π΄Π΅ΠΊΡΠΈΡ‚Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сочат към Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Π±Π»ΠΎΠΊΠ° (32 Π±ΠΈΡ‚Π°) ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π½Π°offset (16 Π±ΠΈΡ‚Π°). И само 11 Π±ΠΈΡ‚Π° Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π·Π° offset ΠΌΠΎΠ³Π°Ρ‚ бСзопасно Π΄Π° сС ΠΏΡ€Π΅Π΄Π°Π΄Π°Ρ‚ ΠΎΡ‚ TID Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° Π½Π° всички ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ индСкс. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° MVCC ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ Ρ‚ΠΎΠ²Π°Ρ€ (payload) Π·Π°Π΅Π΄Π½ΠΎ с TID. НапримСр, Π² OrioleDB Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ няколко Π±ΠΈΡ‚Π° Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° индСкситС β€ždelete-markingβ€œ ΠΈΠ»ΠΈ цялата информация Π·Π° видимост.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΄Π²Π° способа ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ ограничСния Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

    ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 1: API Index AM прСдоставляСт возмоТности для Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ MVCC.

    Π”ΠΎΠΊΠ°Ρ‚ΠΎ Table AM ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° отговаря Π·Π° всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π½Π° MVCC, Index AM прСдоставя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π° рСализация Π½Π° MVCC, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° потрСбитСлски ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ²Π°Ρ€ (payload) Π·Π°Π΅Π΄Π½ΠΎ с TID, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΎΠ²Π° актуализация (Π°ΠΊΠΎ TID Π² индСкса Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½, потрСбитСлският ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚ΠΎΠ²Π°Ρ€ – ΠΌΠΎΠΆΠ΅). ОсвСн Ρ‚ΠΎΠ²Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ Π½Π° няколко ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΎΡ‚ индСкса Π΄Π° сочат към Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ TID, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° API, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ ΠΏΡ€ΠΈ сканиранСто Π½Π° индСкса, ΡΡŠΡ‰ΠΎ сС нуТдаят ΠΎΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅.

    ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ 2: Π˜Π½Π΄Π΅ΠΊΡΡ‹, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ MVCC.

    АлтСрнативата Π±ΠΈ Π±ΠΈΠ»Π° Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ Π½Π° индСкситС Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ MVCC. ВоСст β€žexecutorβ€œ (ΠΈΠ»ΠΈ, възмоТно, Table AM) просто ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ insert() ΠΈ delete() Π² Index AM, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Index AM прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° сканиранС с ΠΎΠ³Π»Π΅Π΄ Π½Π° MVCC. Π’ΠΎΠ²Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π±ΠΈ опростило сканиранСто, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ само индСкси (index-only). Π”ΠΎΡ€ΠΈ цСлият Table AM Π² Ρ‚Π°ΠΊΡŠΠ² случай Π±ΠΈ могъл Π΄Π° станС ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ слой, съ храняващ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² индСкса.

    На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Бтойността Π½Π° индСкс 2 сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° ΠΎΡ‚ транзакция 11 ΠΎΡ‚ стойност "A" Π½Π° стойност "B". ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° стойността "A" Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π° ΠΊΠ°Ρ‚ΠΎ xmax == 11, Π° стойността "B" Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π° ΠΊΠ°Ρ‚ΠΎ xmin == 11. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅ Π΄Π° сС сканира индСкс 2 ΠΈ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ само Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с MVCC Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π° (heap). Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ° Π½Π° индСкс 2 ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°.

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° подобрСния Π½Π° API Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ Π½Π° PostgreSQL

    ΠŸΡ€ΠΈ внСдряванС Π½Π° всички ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ нововъвСдСния Π² API ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° индСкситС, Π΅Π΄Π²Π° Π»ΠΈ Ρ‰Π΅ успССм Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°ΠΌΠ΅ всички индСкси Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° всички Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. По-рСалистично Π΅ Π΄Π° сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ няколко Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° Π΅Π΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ индСкс. НапримСр, Π² допълнСниС към обикновСния B-tree, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ B-tree с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° MVCC Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° индСкса ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° записи с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° дълТина.

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° OrioleDB ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ…Π° подобрСния Π½Π° API Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΠΈ Π½Π° PostgreSQL

    Π’Π°ΠΊΠ° сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π΄Π° сС ΠΏΡ€Π΅Ρ€Π°Π·Π³Π»Π΅Π΄Π° Π½Π΅ само API Table AM, Π½ΠΎ ΠΈ API Index AM, ΠΊΠΎΠΉΡ‚ΠΎ вярно Π΅ обслуТвал общността Π½Π° PostgreSQL ΠΏΡ€Π΅Π· Π³ΠΎΠ΄ΠΈΠ½ΠΈΡ‚Π΅. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΏΡ€Π΅Π΄Π»Π°Π³Π° сС раздСлянСто Π½Π° Index AM Π½Π° логичСски слой ΠΈ слой Π½Π° рСализация. Π’Π°Π·ΠΈ прСосмислСна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° PostgreSQL Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.

    Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

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