Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite. ΠžΠΏΠΈΡ‚ Π½Π° Π‘Π±Π΅Ρ€Π°

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite. ΠžΠΏΠΈΡ‚ Π½Π° Π‘Π±Π΅Ρ€Π°ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈ понякога ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС ΠΎΡΡ‚ΡŠΡ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ пространство Π½Π° дисковСтС. Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ компрСсията, Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° която, Π½Π° ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ ΠΎΠ±Π΅ΠΌΠΈΡ‚Π΅ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ компрСсията Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite. Π’ статията Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ описани само Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° компрСсия Π½Π° диска. Π”Ρ€ΡƒΠ³ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° компрСсия Π½Π° Π΄Π°Π½Π½ΠΈ (ΠΏΠΎ ΠΌΡ€Π΅ΠΆΠ°, Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°) ΠΊΠ°ΠΊΡ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π΅ остават извън обсСга.

И Ρ‚Π°ΠΊΠ°, ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° постоянство, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° промяна Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅, Ignite Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° записва Π½Π° диск:

  1. Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅
  2. Π–ΡƒΡ€Π½Π°Π» Π·Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ запис (Write Ahead Log, ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ просто WAL)

Π—Π° компрСсия Π½Π° WAL ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°Ρ€ΠΈΡ‡Π° WAL компрСсия. Π’ наскоро излСзлия Apache Ignite 2.8 сС появиха ΠΎΡ‰Π΅ Π΄Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊΠΎΠΈΡ‚ΠΎ позволяват Π΄Π° сС компрСсират Π΄Π°Π½Π½ΠΈ Π½Π° диска, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ компрСсия Π½Π° страници Π½Π° диска Π·Π° компрСсия Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅ ΠΈ компрСсия Π½Π° снимки Π½Π° страници Π½Π° WAL Π·Π° компрСсия Π½Π° някои записи ΠΎΡ‚ WAL. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ Π½Π° страници Π½Π° диска

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ

ΠŸΡŠΡ€Π²ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ‰Π΅ сС спрём Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ignite ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈ. Π—Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° странична ΠΏΠ°ΠΌΠ΅Ρ‚. Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата сС Π·Π°Π΄Π°Π²Π° ΠΏΡ€ΠΈ стартиранС Π½Π° възСла ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС промСнян Π² ΠΏΠΎ-ΠΊΡŠΡΠ½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ, ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата трябва Π΄Π° бъдС стСпСн Π½Π° Π΄Π²Π΅ ΠΈ ΠΊΡ€Π°Ρ‚Π΅Π½ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ Π² RAM ΠΎΡ‚ диска ΠΏΡ€ΠΈ нСобходимост, Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° диска ΠΌΠΎΠΆΠ΅ Π΄Π° надвишава ΠΎΠ±Π΅ΠΌΠ° Π½Π° прСдоставСната RAM. Π’ случай Π½Π° нСдостиг Π½Π° място Π² RAM Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° страница ΠΎΡ‚ диска, стари, Π²Π΅Ρ‡Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΈ страници Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π³ΠΎΠ½Π΅Π½ΠΈ ΠΎΡ‚ RAM.

На диска Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: Π·Π° всяка партиция Π½Π° всяка кСш Π³Ρ€ΡƒΠΏΠ° сС създава ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΠΉΡ‚ΠΎ, ΠΏΠΎ Ρ€Π΅Π΄ Π½Π° нарастващ индСкс, Π΅Π΄Π½Π° слСд Π΄Ρ€ΡƒΠ³Π° слСдват страницитС. ΠŸΡŠΠ»Π½ΠΈΡΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° страницата ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° кСш Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°, Π½ΠΎΠΌΠ΅Ρ€ Π½Π° партиция ΠΈ индСкс Π½Π° страницата Π² Ρ„Π°ΠΉΠ»Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, ΠΏΠΎ пълния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° страницата ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„Π°ΠΉΠ»Π° ΠΈ офсСта Π² Π½Π΅Π³ΠΎ Π·Π° всяка страница. По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° устройството Π½Π° страничната ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² статията Π½Π° Apache Ignite Wiki: Ignite Persistent Store β€” ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ disk page compression, ΠΊΠ°ΠΊΡ‚ΠΎ подсказва ΠΈΠΌΠ΅Ρ‚ΠΎ, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° странично Π½ΠΈΠ²ΠΎ. ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΄Π°Π½Π½ΠΈ Π² RAM сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π±Π΅Π· компрСсия, Π½ΠΎ ΠΏΡ€ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° страницитС ΠΎΡ‚ RAM Π½Π° диск сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° тяхното компрСсиранС.

Но компрСсиранСто Π½Π° всяка страница ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ Π½Π΅ Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°; Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° крайния Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½ΠΈ. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата спрС Π΄Π° бъдС фиксиран, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° записвамС страницитС Π² Ρ„Π°ΠΉΠ» Π΅Π΄Π½Π° слСд Π΄Ρ€ΡƒΠ³Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • Няма Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡Ρ€Π΅Π· индСкса Π½Π° страницата Π΄Π° изчислим оффсСта, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ тя сС Π½Π°ΠΌΠΈΡ€Π° Π² Ρ„Π°ΠΉΠ»Π°.
  • НС Π΅ ясно ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ със страницитС, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π² края Π½Π° Ρ„Π°ΠΉΠ»Π° ΠΈ промСнят Ρ€Π°Π·ΠΌΠ΅Ρ€Π° си. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата Π½Π°ΠΌΠ°Π»Π΅Π΅, мястото, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ освободила, сС Π³ΡƒΠ±ΠΈ. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата сС ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ, Π·Π° нСя Ρ‰Π΅ трябва Π΄Π° сС Ρ‚ΡŠΡ€ΡΠΈ Π½ΠΎΠ²ΠΎ място Π² Ρ„Π°ΠΉΠ»Π°.
  • Ако страницата сС прСмСсти Π½Π° Π½Π΅ ΠΊΡ€Π°Ρ‚Π½ΠΎ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма число Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ Π·Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈΠ»ΠΈ запис Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС засяга Π΅Π΄ΠΈΠ½ Π±Π»ΠΎΠΊ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ спад Π² производитСлността.

Π—Π° Π΄Π° Π½Π΅ сС Π½Π°Π»Π°Π³Π° Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ самостоятСлно, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π·Π° компрСсиранС Π½Π° страницитС Π² Apache Ignite ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ Ρ€Π°Π·Ρ€Π΅Π΄Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π Π°Π·Ρ€Π΅Π΄Π΅Π½ Ρ„Π°ΠΉΠ» Π΅ Ρ‚Π°ΠΊΡŠΠ² Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΠΉΡ‚ΠΎ някои запълнСни с Π½ΡƒΠ»ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ отбСлязани ΠΊΠ°Ρ‚ΠΎ "Π΄ΡƒΠΏΠΊΠΈ". ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅Π·ΠΈ Π΄ΡƒΠΏΠΊΠΈ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π΄Π΅Π»Π΅Π½ΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ сС постига икономия Π½Π° място Π½Π° диска.

Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΅, Ρ‡Π΅ Π·Π° Π΄Π° сС освободи Π±Π»ΠΎΠΊ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π΄ΡƒΠΏΠΊΠ°Ρ‚Π° трябва Π΄Π° бъдС Ρ€Π°Π²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎ-голям ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, ΠΊΠΎΠ΅Ρ‚ΠΎ поставя Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ограничСния Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° страницитС Π² Apache Ignite: Π·Π° Π΄Π° ΠΈΠΌΠ° компрСсията осСзаСм Π΅Ρ„Π΅ΠΊΡ‚, Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата трябва Π΄Π° бъдС строго ΠΏΠΎ-голям ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ°, Π½ΠΈΠΊΠΎΠ³Π° няма Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° освободим Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ Π±Π»ΠΎΠΊ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° Π΄Π° освободим СдинствСн Π±Π»ΠΎΠΊ, стиснатата страница трябва Π΄Π° Π·Π°Π΅ΠΌΠ° 0 Π±Π°ΠΉΡ‚Π°. А Π°ΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата Π΅ Ρ€Π°Π²Π΅Π½ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° 2 ΠΈΠ»ΠΈ 4 Π±Π»ΠΎΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° освободим ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π±Π»ΠΎΠΊ, Π°ΠΊΠΎ Π½Π°ΡˆΠ°Ρ‚Π° страница сС компрСсира Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 50% ΠΈΠ»ΠΈ 75% ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ описаниС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°: ΠŸΡ€ΠΈ запис Π½Π° страницата Π½Π° диска, сС ΠΏΡ€Π°Π²ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° компрСсиранС Π½Π° страницата. Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° компрСсираната страница позволява освобоТдаванСто Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, Ρ‚ΠΎ страницата сС записва Π² компрСсирано ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, Π½Π° мястото Π½Π° освободСнитС Π±Π»ΠΎΠΊΠΎΠ²Π΅ сС ΠΏΡ€ΠΎΠ±ΠΈΠ²Π° β€žΠ΄ΡƒΠΏΠΊΠ°β€œ (ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° сС систСмСн ΠΏΠΎΠ²ΠΈΠΊ) fallocate() с Ρ„Π»Π°Π³Π° β€žpunch holeβ€œ). Ако Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° компрСсираната страница Π½Π΅ позволява освобоТдаванСто Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅, страницата сС Π·Π°ΠΏΠ°Π·Π²Π° Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅, Π² нСкопрСсирано ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. Всички офсСти Π½Π° страницитС сС изчисляват ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π±Π΅Π· компрСсия, Ρ‡Ρ€Π΅Π· ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° индСкса Π½Π° страницата ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° страницата. Никакво прСмСстванС Π½Π° страницитС Π½Π΅ сС изисква. ΠžΡ„ΡΠ΅Ρ‚ΠΈΡ‚Π΅ Π½Π° страницитС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π±Π΅Π· компрСсия, ΠΏΠΎΠΏΠ°Π΄Π°Π½ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite. ΠžΠΏΠΈΡ‚ Π½Π° Π‘Π±Π΅Ρ€Π°

Π’ настоящата рСализация Ignite ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ със sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ само ΠΏΠΎΠ΄ ОБ Linux, слСдоватСлно компрСсията Π½Π° дисковитС страници ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° само ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ignite Π½Π° Ρ‚Π°Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма.

АлгоритмитС Π·Π° компрСсия, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° компрСсия Π½Π° дисковитС страници: ZSTD, LZ4, Snappy. ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° (SKIP_GARBAGE), ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ просто сС ΠΈΠ·Ρ…Π²ΡŠΡ€Π»Ρ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎΡ‚ΠΎ пространство Π² страницата Π±Π΅Π· ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° компрСсия към останалитС Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° CPU Π² сравнСниС с ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠΎ-Ρ€Π°Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ.

ВлияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността

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

Π—Π° Ρ‚ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° си спомним ΠΊΠ°ΠΊ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ ΠΈ записванСто Π½Π° страницитС ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ тях:

  • ΠŸΡ€ΠΈ изпълнСниС Π½Π° опСрацията ΠΏΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅, ΠΏΡŠΡ€Π²ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π² RAM, Π°ΠΊΠΎ Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ Π±Π΅Π· успСх, страницата сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π² RAM ΠΎΡ‚ диска със ΡΡŠΡ‰ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ.
  • ΠŸΡ€ΠΈ изпълнСниС Π½Π° опСрацията ΠΏΠΎ запис, страницата Π² RAM сС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π° ΠΊΠ°Ρ‚ΠΎ ΠΌΡ€ΡŠΡΠ½Π°, ΠΊΠ°Ρ‚ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ физичСското Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° страницата Π½Π° диска Π½Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π²Π΅Π΄Π½Π°Π³Π° Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° записа. Всички ΠΌΡ€ΡŠΡΠ½ΠΈ страници сС Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ Π½Π° диска ΠΏΠΎ-късно Π² процСса Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° ΠΎΡ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, влияниС Π²ΡŠΡ€Ρ…Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅:

  • ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ (дисков IO), Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° намаляванС Π½Π° броя Π½Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ (CPU), Π·Π°Ρ€Π°Π΄ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‚ΡƒΠΊ нСявно Π΄Π° сС появят Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ IO ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎ-слоТната структура Π½Π° sparse Ρ„Π°ΠΉΠ»Π° (с всички Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ относно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ съм Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚).
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ (CPU), Π·Π°Ρ€Π°Π΄ΠΈ нСобходимостта ΠΎΡ‚ дСкомпрСсиранС Π½Π° страницитС.
  • Няма влияниС Π²ΡŠΡ€Ρ…Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ запис.
  • ВлияниС Π²ΡŠΡ€Ρ…Ρƒ процСса Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚ (Ρ‚ΡƒΠΊ всичко Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅):
  • ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ (disk IO), Π·Π°Ρ€Π°Π΄ΠΈ намаляванСто Π½Π° количСството записани Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ (CPU, възмоТно disk IO), Π·Π°Ρ€Π°Π΄ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° със sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
  • ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ (CPU), Π·Π°Ρ€Π°Π΄ΠΈ нСобходимостта ΠΎΡ‚ компрСсиранС Π½Π° страницитС.

Коя Ρ‡Π°ΡˆΠ° Π½Π° Π²Π΅Π·Π½Π°Ρ‚Π° Ρ‰Π΅ Π½Π°Π΄Π²ΠΈΠ΅? Всичко зависи ΠΎΡ‚ срСдата, Π½ΠΎ склонявам сС към ΠΌΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ компрСсията Π½Π° дискови страници Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ ΠΏΠΎ-скоро Π΄ΠΎ влошаванС Π½Π° производитСлността Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ систСми. ОсобСно Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ тСстовСтС Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Π‘Π£Π‘Π”, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ със sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ ΠΏΠ°Π΄Π°Π½Π΅ Π½Π° производитСлността ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°Ρ‚Π° компрСсия.

Как Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅

ΠšΠ°ΠΊΡ‚ΠΎ Π²Π΅Ρ‡Π΅ бСшС спомСнато, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° вСрсия Π½Π° Apache Ignite, която ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° компрСсия Π½Π° дискови страници: 2.8 ΠΈ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма Linux. Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • Π’ class-path трябва Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» ignite-compression. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠΉ сС Π½Π°ΠΌΠΈΡ€Π° Π² дистрибуцията Π½Π° Apache Ignite Π² дирСктория libs/optional ΠΈ Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² class-path. ΠœΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° прСмСститС дирСкторията Π½Π° Π΅Π΄ΠΈΠ½ Π½ΠΈΠ²ΠΎ Π½Π°Π³ΠΎΡ€Π΅ Π² libs ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€ΠΈ стартиранС Ρ‡Ρ€Π΅Π· ignite.sh Ρ‚ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.
  • Persistence трябва Π΄Π° бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° (Π²ΠΊΠ»ΡŽΡ‡Π²Π° сС Ρ‡Ρ€Π΅Π· DataRegionConfiguration.setPersistenceEnabled(true)).
  • Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° страницата трябва Π΄Π° бъдС ΠΏΠΎ-голям ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π±Π»ΠΎΠΊΠ° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°Π΄Π°Π΄Π΅Π½ с DataStorageConfiguration.setPageSize() ).
  • Π—Π° всСки кСш, Ρ‡ΠΈΠΉΡ‚ΠΎ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ компрСсирани, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² конфигурацията Π΄Π° сС настрои ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Π½Π° компрСсия ΠΈ (ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅) Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° компрСсия (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ CacheConfiguration.setDiskPageCompression(), CacheConfiguration.setDiskPageCompressionLevel()).

WAL компрСсия

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ

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

Записи Π² WAL сС дСлят Π½Π° логичСски ΠΈ физичСски. ЛогичСскитС – Ρ‚ΠΎΠ²Π° са самитС ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ стойности. ЀизичСскитС – отразяват ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π° страницитС Π² страничното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Если логичСскитС записи ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΡ‰Π΅ Π·Π° някакви случаи, физичСскитС записи са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ само Π·Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π² случай Π½Π° срив ΠΈ сС изискват записи само ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° послСдния ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚. Π’ΡƒΠΊ няма Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌΠ΅ Π² подробности ΠΈ Π΄Π° обяснявамС Π·Π°Ρ‰ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°, Π½ΠΎ Π½Π° заинтСрСсованитС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π΄Π° сС запознаят с Π²Π΅Ρ‡Π΅ спомСнатата статия Π² Apache Ignite Wiki: Ignite Persistent Store β€” ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°.

На Π΅Π΄Π½Π° логичСска записка чСсто сС ΠΏΠ°Π΄Π°Ρ‚ няколко физичСски записки. ВоСст, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π΄Π½Π° опСрация put Π² кСша засяга няколко страници Π² страничната ΠΏΠ°ΠΌΠ΅Ρ‚ (страница с самитС Π΄Π°Π½Π½ΠΈ, страници с индСкси, страници с free-list’и). На някои синтСтични тСстовС установих, Ρ‡Π΅ физичСскитС записи Π·Π°Π΅ΠΌΠ°Ρ‚ Π΄ΠΎ 90% ΠΎΡ‚ ΠΎΠ±Π΅ΠΌΠ° Π½Π° WAL Ρ„Π°ΠΉΠ»Π°. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‚Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ само Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΡŠΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚ΠΈΡ‚Π΅ – 3 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ). Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° сС ΠΎΡ‚ΡŠΡ€Π²Π΅ΠΌ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ слСд Π·Π°Π³ΡƒΠ±Π°Ρ‚Π° ΠΈΠΌ Π½Π° актуалност. ИмСнно Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ WAL compaction, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΎΡ‚ΡŠΡ€Π²Π°Π²Π° ΠΎΡ‚ физичСскитС записи ΠΈ компрСсира останалитС логичСски записи с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° zip, ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Ρ„Π°ΠΉΠ»Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ сС намалява (понякога дСсСтки ΠΏΡŠΡ‚ΠΈ).

ЀизичСският WAL сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ няколко сСгмСнта (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ 10) с фиксиран Ρ€Π°Π·ΠΌΠ΅Ρ€ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ 64Мб), ΠΊΠΎΠΈΡ‚ΠΎ сС прСзаписват Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎ. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ тСкущият сСгмСнт сС запълни, тСкущият сСктор ΠΏΡ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Π²Π° слСдващия слСд Π½Π΅Π³ΠΎ сСгмСнт, Π° Π·Π°ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡΡ‚ сСгмСнт сС Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π° с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ. WAL компакция Π²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° сСгмСнтитС. ОсвСн Ρ‚ΠΎΠ²Π°, с ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ тя слСди ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π° компрСсия Π½Π° Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ‚Π΅, физичСскитС записи Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ са Π½ΡƒΠΆΠ½ΠΈ.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite. ΠžΠΏΠΈΡ‚ Π½Π° Π‘Π±Π΅Ρ€Π°

ВлияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността

Въй ΠΊΠ°Ρ‚ΠΎ WAL компакцията Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ, тя Π½Π΅ Π±ΠΈ трябвало Π΄Π° ΠΎΠΊΠ°Π·Π²Π° пряко влияниС Π²ΡŠΡ€Ρ…Ρƒ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Но тя всС ΠΏΠ°ΠΊ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° CPU (компрСсия) ΠΈ Π½Π° диска (Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° всСки WAL сСгмСнт ΠΎΡ‚ Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ запис Π½Π° компрСсиранитС сСгмСнти), Π·Π°Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ систСмата Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅, тя ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ влошаванС Π½Π° производитСлността.

Как Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅

WAL компакцията ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° свойството WalCompactionEnabled Π² DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalCompactionLevel() ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ стСпСнта Π½Π° компрСсия, Π°ΠΊΠΎ стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (BEST_SPEED) Π½Π΅ Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»Π½Π°.

ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки Π½Π° WAL страници

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ

Π’Π΅Ρ‡Π΅ установихмС, Ρ‡Π΅ WAL записитС сС раздСлят Π½Π° логичСски ΠΈ физичСски. Π—Π° всяка промяна Π½Π° всяка страница Π² страничната ΠΏΠ°ΠΌΠ΅Ρ‚ сС създава физичСски запис Π½Π° WAL. ЀизичСскитС записи ΡΡŠΡ‰ΠΎ сС раздСлят Π½Π° Π΄Π²Π° ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ°: page snapshot record ΠΈ delta record. ВсСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ промСнямС Π½Π΅Ρ‰ΠΎ Π½Π° страницата ΠΈ я ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ ΠΎΡ‚ чисто Π² ΠΌΡ€ΡŠΡΠ½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, Π² WAL сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° пълна копия Π½Π° Ρ‚Π°Π·ΠΈ страница (page snapshot record β€” ΡΠ½ΡΠΏΡˆΠΎΡ‚ Π½Π° страницата). Π”ΠΎΡ€ΠΈ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ само Π΅Π΄ΠΈΠ½ Π±Π°ΠΉΡ‚, Π² WAL Ρ‰Π΅ сС Π·Π°ΠΏΠ°Π·ΠΈ запис с Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-голям ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° страницата. Ако ΠΎΠ±Π°Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Π½Π΅Ρ‰ΠΎ Π½Π° Π²Π΅Ρ‡Π΅ ΠΌΡ€ΡŠΡΠ½Π°Ρ‚Π° страница, Π² WAL сС Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° delta record, Π² която са ΠΎΡ‚Ρ€Π°Π·Π΅Π½ΠΈ само ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² сравнСниС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° страницата, Π½ΠΎ Π½Π΅ ΠΈ цялата страница. Въй ΠΊΠ°Ρ‚ΠΎ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° страницитС ΠΎΡ‚ ΠΌΡ€ΡŠΡΠ½ΠΎ Π½Π° чисто сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π² процСса Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚, Π²Π΅Π΄Π½Π°Π³Π° слСд Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° практичСски всички физичСски записи Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ само ΡΠ½ΡΠΏΡˆΠΎΡ‚ΠΈ Π½Π° страницитС (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ всички страници Π²Π΅Π΄Π½Π°Π³Π° слСд Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π° са чисти), слСд Ρ‚ΠΎΠ²Π°, с Π½Π°ΠΏΡ€Π΅Π΄Π²Π°Π½Π΅Ρ‚ΠΎ към слСдващия Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚, Π΄Π΅Π»ΡŠΡ‚ Π½Π° delta record Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° нараства ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ сС сбрасыра Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° слСдващия Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚. Π˜Π·ΠΌΠ΅Ρ€Π²Π°Π½ΠΈΡΡ‚Π° Π½Π° някои синтСтични тСстовС ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π°, Ρ‡Π΅ Π΄Π΅Π»ΡŠΡ‚ Π½Π° ΡΠ½ΡΠΏΡˆΠΎΡ‚ΠΈΡ‚Π΅ Π½Π° страницитС Π² общия ΠΎΠ±Π΅ΠΌ Π½Π° физичСскитС записи достига 90%.

Π˜Π΄Π΅ΡΡ‚Π° Π½Π° сТатиС Π½Π° WAL page snapshot Π΅ Π΄Π° сС компрСсират ΡΠ½ΡΠΏΡˆΠΎΡ‚ΠΈΡ‚Π΅ Π½Π° страницитС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π²Π΅Ρ‡Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ инструмСнт Π·Π° компрСсия Π½Π° страницитС (Π²ΠΆ. disk page compression). ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° записитС Π² WAL сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ послСдоватСлно Π² Ρ€Π΅ΠΆΠΈΠΌ append-only ΠΈ няма нСобходимост ΠΎΡ‚ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° записитС с Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, слСдоватСлно Ρ‚ΡƒΠΊ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π½Π° disk page compression, Π½Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ sparse Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π΅ само Π½Π° ОБ Linux. ОсвСн Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ силно смС успСли Π΄Π° компрСсирамС страницата. Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ освободим 1 Π±Π°ΠΉΡ‚, Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ компрСсирани Π΄Π°Π½Π½ΠΈ Π² WAL, Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ disk page compression, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ компрСсирана страница само Π°ΠΊΠΎ смС освободили ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 1 Π±Π»ΠΎΠΊ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма.

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ са Π΄ΠΎΠ±Ρ€Π΅ сТимаСми Π΄Π°Π½Π½ΠΈ, Π° тяхната част Π² общия ΠΎΠ±Π΅ΠΌ Π½Π° WAL Π΅ ΠΌΠ½ΠΎΠ³ΠΎ висока, Ρ‚Π°ΠΊΠ° Ρ‡Π΅, Π±Π΅Π· Π΄Π° промСнямС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»Π° WAL, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° постигнСм Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намаляванС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΡƒ. БтисканСто Π½Π° логичСски записи Π±ΠΈ изисквало промяна Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ Π·Π°Π³ΡƒΠ±Π° Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° външни ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС интСрСсуват ΠΎΡ‚ логичСскитС записи, Π±Π΅Π· Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ намаляванС Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° Ρ„Π°ΠΉΠ»Π°.

Подобно Π½Π° компрСсията Π½Π° дисковитС страници, Π·Π° компрСсията Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки Π½Π° страницитС Π½Π° WAL ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ Π·Π° компрСсия ZSTD, LZ4, Snappy ΠΈ Ρ€Π΅ΠΆΠΈΠΌ SKIP_GARBAGE.

ВлияниС Π²ΡŠΡ€Ρ…Ρƒ производитСлността

ΠšΠ°ΠΊΡ‚ΠΎ лСсно сС заб注意, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° компрСсията Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки Π½Π° страницитС Π½Π° WAL влияС само Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ записват Π΄Π°Π½Π½ΠΈ Π² страничната ΠΏΠ°ΠΌΠ΅Ρ‚, тоСст Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΠΎΡ‚ΠΎΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ промСнят Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΊΠ΅ΡˆΠΎΠ²Π΅Ρ‚Π΅. Π§Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ WAL физичСскитС записи сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° само вСднъТ, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° възСла слСд срив (ΠΈ само Π² случай Π½Π° срив ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°).

Π’ΠΎΠ²Π° влияС Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ промСнят Π΄Π°Π½Π½ΠΈ, ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚ (CPU) ΠΏΠΎΡ€Π°Π΄ΠΈ нСобходимостта всСки ΠΏΡŠΡ‚ Π΄Π° сТимамС страницата ΠΏΡ€Π΅Π΄ΠΈ запис Π½Π° диск ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π΅Π½ Π΅Ρ„Π΅ΠΊΡ‚ (дисков Π²Ρ…ΠΎΠ΄/ΠΈΠ·Ρ…ΠΎΠ΄) Π·Π°Ρ€Π°Π΄ΠΈ намаляванС Π½Π° количСството записвани Π΄Π°Π½Π½ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, Ρ‚ΡƒΠΊ Π΅ просто, Π°ΠΊΠΎ производитСлността Π½Π° систСмата Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΎΡ‚ CPU, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠ° дСградация, Π°ΠΊΠΎ Π΅ ΠΎΡ‚ дисковия Π²Ρ…ΠΎΠ΄/ΠΈΠ·Ρ…ΠΎΠ΄ β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅.

НамаляванСто Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° WAL ΡΡŠΡ‰ΠΎ косвСно влияС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Ρ‚ сСгмСнтитС Π½Π° WAL ΠΈ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π·Π° компрСсиранС Π½Π° WAL.

Π Π΅Π°Π»Π½ΠΈΡ‚Π΅ тСстовС Π·Π° производитСлност Π² Π½Π°ΡˆΠ°Ρ‚Π° срСда Π½Π° синтСтични Π΄Π°Π½Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ…Π° ΠΌΠ°Π»ΠΊΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ (пропускатСлната способност сС Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»Π° с 10%-15%, Π° латСнтността Π½Π°ΠΌΠ°Π»Π΅Π½Π° с 10%-15%).

Как Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅

ΠœΠΈΠ½ΠΈΠΌΠ°Π»Π½Π°Ρ‚Π° вСрсия Π½Π° Apache Ignite: 2.8. Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ настройката сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  • Π’ class-path трябва Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» ignite-compression. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠΉ сС Π½Π°ΠΌΠΈΡ€Π° Π² дистрибуцията Π½Π° Apache Ignite Π² дирСктория libs/optional ΠΈ Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² class-path. ΠœΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° прСмСститС дирСкторията Π½Π° Π΅Π΄ΠΈΠ½ Π½ΠΈΠ²ΠΎ Π½Π°Π³ΠΎΡ€Π΅ Π² libs ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€ΠΈ стартиранС Ρ‡Ρ€Π΅Π· ignite.sh Ρ‚ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½.
  • Persistence трябва Π΄Π° бъдС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° (Π²ΠΊΠ»ΡŽΡ‡Π²Π° сС Ρ‡Ρ€Π΅Π· DataRegionConfiguration.setPersistenceEnabled(true)).
  • Врябва Π΄Π° бъдС Π·Π°Π΄Π°Π΄Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° компрСсия с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalPageCompression(), ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ компрСсията Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (Ρ€Π΅ΠΆΠΈΠΌ DISABLED).
  • ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ стСпСнта Π½Π° компрСсия с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DataStorageConfiguration.setWalPageCompression(), допустимитС стойности Π·Π° всСки ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π²ΠΈΠΆΡ‚Π΅ Π² javadoc Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° компрСсия Π½Π° Π΄Π°Π½Π½ΠΈ Π² Apache Ignite ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ нСзависимо Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° са допустими ΠΈ всякакви Ρ‚Π΅Ρ…Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ. Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° тяхната Ρ€Π°Π±ΠΎΡ‚Π° Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ са подходящи Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° срСда ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ трябва Π΄Π° бъдС ΠΆΠ΅Ρ€Ρ‚Π²Π°Π½ΠΎ ΠΏΡ€ΠΈ тяхното ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡΡ‚Π° Π½Π° дисковитС страници Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° компрСсия Π½Π° основното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° осигури срСдна стСпСн Π½Π° компрСсия. ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡΡ‚Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈΡ‚Π΅ снимки Π½Π° WAL страницитС Ρ‰Π΅ Π΄Π°Π΄Π΅ срСдна стСпСн Π½Π° компрСсия Π½Π° WAL Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π΅ вСроятно Π΄ΠΎΡ€ΠΈ Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ производитСлността. ΠšΠΎΠΌΠΏΠ°Ρ†ΠΈΡΡ‚Π° Π½Π° WAL няма Π΄Π° повлияС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° производитСлността, Π½ΠΎ максимално Ρ‰Π΅ Π½Π°ΠΌΠ°Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° WAL Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Ρ‡Ρ€Π΅Π· ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° физичСскитС записи.

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

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