ЭкспСримСнт с использованиСм SQLite Π² качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° для архивирования Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Pack прСдпринял ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ создания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для архивирования Ρ„Π°ΠΉΠ»ΠΎΠ², построСнного Π½Π° Π±Π°Π·Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SQLite ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сТатия ZSTD (Zstandard). ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, написанный Π½Π° языкС Pascal ΠΈ распространяСмый ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0, ΠΎΠ±ΠΎΠ³Π½Π°Π» ΠΏΠΎ скорости создания Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённыС Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Ρ‹, ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° сводилась ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΆΠ°Ρ‚ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ libzstd ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ добавлСнию сТатых Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ» с Π‘Π” SQLite.

ΠŸΡ€ΠΈ сТатии ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с 81 тысячСй Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±Ρ‰ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1.25 Π“Π‘, pack оказался быстрСС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ZIP Π² 112 Ρ€Π°Π·, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π° 1.3 сСкунды ΠΏΡ€ΠΎΡ‚ΠΈΠ² 146 сСкунд Ρƒ ZIP. Π Π°Π·ΠΌΠ΅Ρ€ Π°Ρ€Ρ…ΠΈΠ²Π° ΠΏΡ€ΠΈ этом Ρƒ pack получился Π½Π° 23% мСньшС (194 MB Ρƒ Pack ΠΈ 253 MB Ρƒ ZIP). Для сравнСния ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° tar Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΡƒ Π·Π° 4.7 сСкунды Π±Π΅Π· сТатия ΠΈ Π·Π° 28.5 сСкунд со сТатиСм ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ gzip, Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ RAR справился с тСстом Π·Π° 27.5 сСкунд, Π° 7z Π·Π° 54.2 сСкунды. Π Π°Π·ΠΌΠ΅Ρ€ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² составил: tar.gz — 214 MB, RAR — 235 MB, 7z — 135 MB. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ скорости распаковки ΠΈ случайного доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Pack Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Ρ‹, потрСбляя ΠΏΡ€ΠΈ этом мСньшС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ZIP: 253 MB, 146 s 7z: 135 MB, 54.2 s быстрСС ZIP Π² 2.7 Ρ€Π°Π·Π° tar.gz: 214 MB, 28.5 s x 5.1 RAR: 235 MB, 27.5 s x 5.3 tar: 1345 MB, 4.7 s x 31 Pack: 194 MB, 1.3 s x 112

ΠŸΡ€ΠΎ влияниС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ кэша Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ провСдСния тСста Π½Π΅ упоминаСтся. ВСроятно, низкая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ZIP обусловлСна порядком запуска тСстов Π±Π΅Π· оглядки Π½Π° ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² памяти — тСст с zip Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΏΡ€ΠΈ Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΌ кэшС, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ тСсты ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π΅Ρ‚ΠΎΠΌ. Π’ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… условиях Zstandard дСмонстрируСт Π² 3-5 Ρ€Π°Π· Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ сТатия ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с zlib ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π° Π±ΠΎΠ»Π΅Π΅ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ распаковку, ΠΏΡ€ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ сТатия Π²Ρ‹ΡˆΠ΅ Π½Π° 10-15%.

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ идСя хранСния сТатых Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠ±ΠΎΠ² Π² Π‘Π” SQLite Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² 2014 Π³ΠΎΠ΄Ρƒ Π² Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π΅ sqlar, созданном Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ SQLite Π² качСствС экспСримСнта для ΠΎΡ†Π΅Π½ΠΊΠΈ эффСктивности хранСния Π±Π»ΠΎΠ±ΠΎΠ² Π² SQLite. Π’ sqlar для сТатия примСняСтся zlib ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 2% большС, Ρ‡Π΅ΠΌ Ρƒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ZIP.

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

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