அப்பாச்சி இக்னைட்டில் தரவு சுருக்கம். Sber இன் அனுபவம்

அப்பாச்சி இக்னைட்டில் தரவு சுருக்கம். Sber இன் அனுபவம்பெரிய அளவிலான தரவுகளுடன் பணிபுரியும் போது, ​​​​வட்டு இடம் இல்லாததால் சில நேரங்களில் சிக்கல் ஏற்படலாம். இந்த சிக்கலைத் தீர்ப்பதற்கான ஒரு வழி சுருக்கமாகும், இதற்கு நன்றி, அதே உபகரணங்களில், நீங்கள் சேமிப்பக அளவை அதிகரிக்க முடியும். இந்த கட்டுரையில், அப்பாச்சி இக்னைட்டில் தரவு சுருக்கம் எவ்வாறு செயல்படுகிறது என்பதைப் பார்ப்போம். இந்த கட்டுரையானது தயாரிப்பில் செயல்படுத்தப்பட்ட வட்டு சுருக்க முறைகளை மட்டுமே விவரிக்கும். தரவு சுருக்கத்தின் பிற முறைகள் (நெட்வொர்க்கில், நினைவகத்தில்), செயல்படுத்தப்பட்டாலும் இல்லாவிட்டாலும், நோக்கத்திற்கு வெளியே இருக்கும்.

எனவே, நிலைத்தன்மை பயன்முறை இயக்கப்பட்டால், தற்காலிக சேமிப்பில் தரவு மாற்றங்களின் விளைவாக, பற்றவைப்பு வட்டில் எழுதத் தொடங்குகிறது:

  1. தற்காலிக சேமிப்புகளின் உள்ளடக்கம்
  2. முன் பதிவு எழுது (இனி WAL மட்டும்)

WAL சுருக்கத்திற்கான ஒரு வழிமுறை இப்போது சில காலமாக உள்ளது, இது WAL சுருக்கம் என்று அழைக்கப்படுகிறது. சமீபத்தில் வெளியிடப்பட்ட Apache Ignite 2.8 ஆனது வட்டில் உள்ள தரவைச் சுருக்க உங்களை அனுமதிக்கும் மேலும் இரண்டு வழிமுறைகளை அறிமுகப்படுத்தியது: தற்காலிக சேமிப்புகளின் உள்ளடக்கங்களை சுருக்குவதற்கு வட்டு பக்க சுருக்கம் மற்றும் சில WAL உள்ளீடுகளை சுருக்குவதற்கு WAL பக்க ஸ்னாப்ஷாட் சுருக்கம். இந்த மூன்று வழிமுறைகள் பற்றிய கூடுதல் விவரங்கள் கீழே.

வட்டு பக்க சுருக்கம்

இது எப்படி வேலை செய்கிறது

முதலில், இக்னைட் டேட்டாவை எவ்வாறு சேமிக்கிறது என்பதை மிகக் குறுகியதாகப் பார்ப்போம். பக்க நினைவகம் சேமிப்பிற்காக பயன்படுத்தப்படுகிறது. பக்க அளவு முனையின் தொடக்கத்தில் அமைக்கப்பட்டுள்ளது, மேலும் அடுத்த கட்டங்களில் மாற்ற முடியாது; மேலும், பக்க அளவு இரண்டு சக்தியாகவும் கோப்பு முறைமை தொகுதி அளவின் பலமாகவும் இருக்க வேண்டும். தேவைக்கேற்ப வட்டில் இருந்து பக்கங்கள் ரேமில் ஏற்றப்படும்; வட்டில் உள்ள தரவின் அளவு ஒதுக்கப்பட்ட ரேமின் அளவை விட அதிகமாக இருக்கலாம். வட்டில் இருந்து ஒரு பக்கத்தை ஏற்றுவதற்கு RAM இல் போதுமான இடம் இல்லை என்றால், பழைய, இனி பயன்படுத்தப்படாத பக்கங்கள் RAM இலிருந்து வெளியேற்றப்படும்.

தரவு பின்வரும் வடிவத்தில் வட்டில் சேமிக்கப்படுகிறது: ஒவ்வொரு கேச் குழுவின் ஒவ்வொரு பகிர்வுக்கும் ஒரு தனி கோப்பு உருவாக்கப்படுகிறது; இந்த கோப்பில், பக்கங்கள் ஏறுவரிசை வரிசையில் ஒன்றன் பின் ஒன்றாக தோன்றும். முழு பக்க அடையாளங்காட்டியானது கோப்பில் உள்ள கேச் குழு அடையாளங்காட்டி, பகிர்வு எண் மற்றும் பக்க அட்டவணை ஆகியவற்றைக் கொண்டுள்ளது. எனவே, முழு பக்க அடையாளங்காட்டியைப் பயன்படுத்தி, ஒவ்வொரு பக்கத்திற்கும் கோப்பில் உள்ள கோப்பையும் ஆஃப்செட்டையும் தனித்தனியாக தீர்மானிக்க முடியும். அப்பாச்சி இக்னைட் விக்கி கட்டுரையில் பேஜிங் நினைவகம் பற்றி மேலும் படிக்கலாம்: பற்றவைப்பு பெர்சிஸ்டண்ட் ஸ்டோர் - ஹூட்டின் கீழ்.

வட்டு பக்க சுருக்க பொறிமுறையானது, நீங்கள் பெயரிலிருந்து யூகிக்கக்கூடியது போல, பக்க அளவில் வேலை செய்கிறது. இந்த பொறிமுறையை இயக்கும் போது, ​​ரேமில் உள்ள தரவு எந்த சுருக்கமும் இல்லாமல் செயலாக்கப்படும், ஆனால் பக்கங்கள் RAM இலிருந்து வட்டில் சேமிக்கப்படும் போது, ​​அவை சுருக்கப்படும்.

ஆனால் ஒவ்வொரு பக்கத்தையும் தனித்தனியாக சுருக்குவது சிக்கலுக்கு ஒரு தீர்வாகாது; இதன் விளைவாக வரும் தரவு கோப்புகளின் அளவை நீங்கள் எப்படியாவது குறைக்க வேண்டும். பக்க அளவு சரி செய்யப்படாவிட்டால், பல சிக்கல்களை உருவாக்கலாம் என்பதால், கோப்பில் பக்கங்களை ஒன்றன் பின் ஒன்றாக எழுத முடியாது:

  • பக்க அட்டவணையைப் பயன்படுத்தி, கோப்பில் உள்ள ஆஃப்செட்டை எங்களால் கணக்கிட முடியாது.
  • கோப்பின் முடிவில் இல்லாத பக்கங்களை என்ன செய்வது மற்றும் அவற்றின் அளவை மாற்றுவது என்பது தெளிவாக இல்லை. பக்க அளவு குறைந்தால், அது விடுவித்த இடம் மறைந்துவிடும். பக்க அளவு அதிகரித்தால், அதற்கான கோப்பில் புதிய இடத்தைத் தேட வேண்டும்.
  • பைல் சிஸ்டம் பிளாக் அளவின் பெருக்கமில்லாத பல பைட்டுகளால் ஒரு பக்கம் நகர்ந்தால், அதைப் படிக்க அல்லது எழுத, மேலும் ஒரு கோப்பு முறைமைத் தொகுதியைத் தொட வேண்டும், இது செயல்திறன் சிதைவுக்கு வழிவகுக்கும்.

இந்த பிரச்சனைகளை அதன் சொந்த மட்டத்தில் தீர்க்காமல் இருக்க, Apache Ignite இல் உள்ள வட்டு பக்க சுருக்கமானது sparse files எனப்படும் கோப்பு முறைமை பொறிமுறையைப் பயன்படுத்துகிறது. சில பூஜ்ஜிய நிரப்பப்பட்ட பகுதிகளை "துளைகள்" எனக் குறிக்கக்கூடிய ஒரு சிறிய கோப்பு. இந்த வழக்கில், இந்த துளைகளை சேமிக்க கோப்பு முறைமை தொகுதிகள் எதுவும் ஒதுக்கப்படாது, இதன் விளைவாக வட்டு இடம் சேமிக்கப்படும்.

ஒரு கோப்பு முறைமை தொகுதியை விடுவிக்க, துளையின் அளவு கோப்பு முறைமை தொகுதியை விட அதிகமாகவோ அல்லது சமமாகவோ இருக்க வேண்டும் என்பது தர்க்கரீதியானது, இது பக்க அளவு மற்றும் Apache Ignite மீது கூடுதல் வரம்பை விதிக்கிறது: சுருக்க எந்த விளைவையும் ஏற்படுத்த, பக்க அளவு கோப்பு முறைமை தொகுதியின் அளவை விட கண்டிப்பாக பெரியதாக இருக்க வேண்டும். பக்க அளவு தொகுதி அளவுக்கு சமமாக இருந்தால், ஒரு தொகுதியை விடுவிக்க முடியாது, ஏனெனில் ஒரு தொகுதியை விடுவிக்க, சுருக்கப்பட்ட பக்கம் 0 பைட்டுகளை ஆக்கிரமிக்க வேண்டும். பக்க அளவு 2 அல்லது 4 தொகுதிகளின் அளவிற்கு சமமாக இருந்தால், எங்கள் பக்கம் முறையே குறைந்தபட்சம் 50% அல்லது 75% ஆக சுருக்கப்பட்டிருந்தால், குறைந்தபட்சம் ஒரு தொகுதியையாவது விடுவிக்க முடியும்.

இவ்வாறு, பொறிமுறை எவ்வாறு செயல்படுகிறது என்பதற்கான இறுதி விளக்கம்: வட்டுக்கு ஒரு பக்கத்தை எழுதும் போது, ​​பக்கத்தை சுருக்க முயற்சி செய்யப்படுகிறது. சுருக்கப்பட்ட பக்கத்தின் அளவு ஒன்று அல்லது அதற்கு மேற்பட்ட கோப்பு முறைமை தொகுதிகளை விடுவிக்க அனுமதித்தால், பக்கம் சுருக்கப்பட்ட வடிவத்தில் எழுதப்பட்டு, விடுவிக்கப்பட்ட தொகுதிகளுக்கு பதிலாக ஒரு "துளை" செய்யப்படுகிறது (ஒரு கணினி அழைப்பு செயல்படுத்தப்படுகிறது. fallocate() பஞ்ச் ஹோல் கொடியுடன்). சுருக்கப்பட்ட பக்கத்தின் அளவு தொகுதிகளை விடுவிக்க அனுமதிக்கவில்லை என்றால், பக்கம் சுருக்கப்படாமல் அப்படியே சேமிக்கப்படும். பக்க அட்டவணையை பக்க அளவால் பெருக்குவதன் மூலம் அனைத்து பக்க ஆஃப்செட்களும் சுருக்கம் இல்லாமல் அதே வழியில் கணக்கிடப்படுகின்றன. சொந்தமாக பக்கங்களின் இடமாற்றம் தேவையில்லை. பக்க ஆஃப்செட்டுகள், சுருக்கம் இல்லாமல், கோப்பு முறைமை தொகுதிகளின் எல்லையில் விழும்.

அப்பாச்சி இக்னைட்டில் தரவு சுருக்கம். Sber இன் அனுபவம்

தற்போதைய செயலாக்கத்தில், Linux OS இன் கீழ் உள்ள சிறிய கோப்புகளுடன் மட்டுமே Ignite வேலை செய்ய முடியும்; அதன்படி, இந்த இயக்க முறைமையில் Ignite ஐப் பயன்படுத்தும் போது மட்டுமே வட்டு பக்க சுருக்கத்தை இயக்க முடியும்.

வட்டு பக்க சுருக்கத்திற்கு பயன்படுத்தக்கூடிய சுருக்க வழிமுறைகள்: ZSTD, LZ4, Snappy. கூடுதலாக, ஒரு இயக்க முறைமை (SKIP_GARBAGE) உள்ளது, இதில் மீதமுள்ள தரவுகளில் சுருக்கத்தைப் பயன்படுத்தாமல் பக்கத்தில் பயன்படுத்தப்படாத இடம் மட்டுமே வெளியேற்றப்படுகிறது, இது முன்னர் பட்டியலிடப்பட்ட அல்காரிதம்களுடன் ஒப்பிடும்போது CPU இல் சுமையை குறைக்கிறது.

செயல்திறன் தாக்கம்

துரதிர்ஷ்டவசமாக, நான் உண்மையான செயல்திறன் அளவீடுகளை உண்மையான நிலைகளில் நடத்தவில்லை, ஏனெனில் உற்பத்தியில் இந்த பொறிமுறையைப் பயன்படுத்த நாங்கள் திட்டமிடவில்லை, ஆனால் நாம் எங்கு தோற்போம், எங்கு வெல்வோம் என்று கோட்பாட்டளவில் ஊகிக்க முடியும்.

இதைச் செய்ய, அணுகும்போது பக்கங்கள் எவ்வாறு படிக்கப்படுகின்றன மற்றும் எழுதப்படுகின்றன என்பதை நாம் நினைவில் கொள்ள வேண்டும்:

  • வாசிப்புச் செயல்பாட்டைச் செய்யும்போது, ​​அது முதலில் RAM இல் தேடப்படும்; தேடல் தோல்வியுற்றால், பக்கம் படிக்கும் அதே நூலால் வட்டில் இருந்து RAM இல் ஏற்றப்படும்.
  • எழுதும் செயல்பாடு செய்யப்படும்போது, ​​ரேமில் உள்ள பக்கம் அழுக்காகக் குறிக்கப்படும், ஆனால் எழுதும் நூலால் அந்தப் பக்கம் உடனடியாக வட்டில் சேமிக்கப்படாது. அனைத்து அழுக்குப் பக்கங்களும் தனித் தொடரிழையில் சோதனைச் சாவடி செயல்பாட்டில் பின்னர் வட்டில் சேமிக்கப்படும்.

எனவே வாசிப்பு செயல்பாடுகளின் தாக்கம்:

  • நேர்மறை (வட்டு IO), படிக்கப்பட்ட கோப்பு முறைமை தொகுதிகளின் எண்ணிக்கையில் குறைவு காரணமாக.
  • எதிர்மறை (CPU), சிதறிய கோப்புகளுடன் வேலை செய்ய இயக்க முறைமைக்கு தேவைப்படும் கூடுதல் சுமை காரணமாக. மிகவும் சிக்கலான ஸ்பேர்ஸ் கோப்பு கட்டமைப்பைச் சேமிக்க கூடுதல் IO செயல்பாடுகள் இங்கே மறைமுகமாகத் தோன்றுவதும் சாத்தியமாகும் (துரதிர்ஷ்டவசமாக, சிதறிய கோப்புகள் எவ்வாறு செயல்படுகின்றன என்பது பற்றிய அனைத்து விவரங்களும் எனக்குத் தெரியாது).
  • எதிர்மறை (CPU), பக்கங்களைக் குறைக்க வேண்டியதன் காரணமாக.
  • எழுதும் செயல்பாடுகளில் எந்த பாதிப்பும் இல்லை.
  • சோதனைச் சாவடி செயல்பாட்டின் மீதான தாக்கம் (இங்கே உள்ள அனைத்தும் வாசிப்பு செயல்பாடுகளைப் போன்றது):
  • நேர்மறை (வட்டு IO), எழுதப்பட்ட கோப்பு முறைமை தொகுதிகளின் எண்ணிக்கையில் குறைவு காரணமாக.
  • நெகடிவ் (CPU, ஒருவேளை வட்டு IO), சிதறிய கோப்புகளுடன் வேலை செய்வதால்.
  • எதிர்மறை (CPU), பக்க சுருக்கத்தின் தேவை காரணமாக.

அளவின் எந்தப் பக்கம் அளவைச் சாய்க்கும்? இவை அனைத்தும் சுற்றுச்சூழலைப் பொறுத்தது, ஆனால் வட்டு பக்க சுருக்கமானது பெரும்பாலான கணினிகளில் செயல்திறன் சிதைவுக்கு வழிவகுக்கும் என்று நான் நம்புகிறேன். மேலும், அரிதான கோப்புகளுடன் இதே அணுகுமுறையைப் பயன்படுத்தும் பிற DBMSகளின் சோதனைகள் சுருக்கத்தை இயக்கும் போது செயல்திறன் குறைவதைக் காட்டுகிறது.

எப்படி இயக்குவது மற்றும் கட்டமைப்பது

மேலே குறிப்பிட்டுள்ளபடி, வட்டு பக்க சுருக்கத்தை ஆதரிக்கும் Apache Ignite இன் குறைந்தபட்ச பதிப்பு 2.8 மற்றும் லினக்ஸ் இயக்க முறைமை மட்டுமே ஆதரிக்கப்படுகிறது. பின்வருமாறு இயக்கவும் மற்றும் கட்டமைக்கவும்:

  • வகுப்பு-பாதையில் ஒரு பற்றவைப்பு-சுருக்க தொகுதி இருக்க வேண்டும். இயல்பாக, இது லிப்ஸ்/விருப்ப கோப்பகத்தில் அப்பாச்சி இக்னைட் விநியோகத்தில் அமைந்துள்ளது மற்றும் வகுப்பு பாதையில் சேர்க்கப்படவில்லை. நீங்கள் கோப்பகத்தை ஒரு நிலைக்கு மேலே நகர்த்தலாம், பின்னர் நீங்கள் அதை ignite.sh மூலம் இயக்கும்போது அது தானாகவே இயக்கப்படும்.
  • நிலைத்தன்மை இயக்கப்பட்டிருக்க வேண்டும் (வழியாக இயக்கப்பட்டது DataRegionConfiguration.setPersistenceEnabled(true)).
  • பக்க அளவு கோப்பு முறைமை தொகுதி அளவை விட பெரியதாக இருக்க வேண்டும் (நீங்கள் அதை பயன்படுத்தி அமைக்கலாம் DataStorageConfiguration.setPageSize() ).
  • தரவு சுருக்கப்பட வேண்டிய ஒவ்வொரு தற்காலிக சேமிப்பிற்கும், நீங்கள் சுருக்க முறை மற்றும் (விரும்பினால்) சுருக்க நிலை (முறைகள்) ஆகியவற்றை உள்ளமைக்க வேண்டும் CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

WAL சுருக்கம்

இது எப்படி வேலை செய்கிறது

WAL என்றால் என்ன, அது ஏன் தேவைப்படுகிறது? மிக சுருக்கமாக: இது பக்கச் சேமிப்பகத்தை இறுதியில் மாற்றும் அனைத்து நிகழ்வுகளையும் கொண்ட பதிவு. வீழ்ச்சி ஏற்பட்டால் மீட்க இது முதன்மையாக தேவைப்படுகிறது. எந்தவொரு செயலும், பயனருக்குக் கட்டுப்பாட்டைக் கொடுப்பதற்கு முன், முதலில் WAL இல் ஒரு நிகழ்வைப் பதிவு செய்ய வேண்டும், இதனால் தோல்வி ஏற்பட்டால், அதை மீண்டும் பதிவில் இயக்கலாம் மற்றும் பயனர் வெற்றிகரமான பதிலைப் பெற்ற அனைத்து செயல்பாடுகளையும் மீட்டெடுக்கலாம். வட்டில் உள்ள பக்க சேமிப்பகத்தில் பிரதிபலிக்க நேரம் இல்லை (ஏற்கனவே மேலே விவரிக்கப்பட்டுள்ளது, பக்க அங்காடியில் எழுதுவது "செக் பாயிண்டிங்" எனப்படும் ஒரு செயல்பாட்டில் தனித்தனி நூல்கள் மூலம் சிறிது தாமதத்துடன் செய்யப்படுகிறது).

WAL இல் உள்ள உள்ளீடுகள் தருக்க மற்றும் இயற்பியல் என பிரிக்கப்படுகின்றன. பூலியன் தான் விசைகள் மற்றும் மதிப்புகள். இயற்பியல் - பக்க அங்காடியில் உள்ள பக்கங்களில் ஏற்படும் மாற்றங்களை பிரதிபலிக்கிறது. தர்க்கரீதியான பதிவுகள் வேறு சில நிகழ்வுகளுக்கு பயனுள்ளதாக இருக்கும் அதே வேளையில், விபத்து ஏற்பட்டால் மீட்டெடுப்பதற்கு மட்டுமே இயற்பியல் பதிவுகள் தேவைப்படும் மற்றும் கடைசி வெற்றிகரமான சோதனைச் சாவடிக்குப் பிறகு மட்டுமே பதிவுகள் தேவைப்படும். இங்கே நாம் விரிவாகச் சென்று இது ஏன் இவ்வாறு செயல்படுகிறது என்பதை விளக்க மாட்டோம், ஆனால் ஆர்வமுள்ளவர்கள் அப்பாச்சி இக்னைட் விக்கியில் ஏற்கனவே குறிப்பிட்டுள்ள கட்டுரையைப் பார்க்கலாம்: பற்றவைப்பு பெர்சிஸ்டண்ட் ஸ்டோர் - ஹூட்டின் கீழ்.

ஒரு தருக்க பதிவுக்கு பல உடல் பதிவுகள் பெரும்பாலும் உள்ளன. அதாவது, எடுத்துக்காட்டாக, தற்காலிகச் சேமிப்பில் உள்ள ஒரு செயலானது பக்க நினைவகத்தில் உள்ள பல பக்கங்களை பாதிக்கிறது (தரவைக் கொண்ட ஒரு பக்கம், குறியீடுகளைக் கொண்ட பக்கங்கள், இலவச பட்டியல்களைக் கொண்ட பக்கங்கள்). சில செயற்கை சோதனைகளில், WAL கோப்பின் 90% வரை உடல் பதிவுகள் ஆக்கிரமிக்கப்பட்டிருப்பதைக் கண்டேன். இருப்பினும், அவை மிகக் குறுகிய காலத்திற்குத் தேவைப்படும் (இயல்புநிலையாக, சோதனைச் சாவடிகளுக்கு இடையிலான இடைவெளி 3 நிமிடங்கள் ஆகும்). இந்தத் தரவின் பொருத்தத்தை இழந்த பிறகு அதை அகற்றுவது தர்க்கரீதியானதாக இருக்கும். இதைத்தான் WAL கம்பாக்ஷன் மெக்கானிசம் செய்கிறது: இது இயற்பியல் பதிவுகளை அகற்றி, ஜிப்பைப் பயன்படுத்தி மீதமுள்ள தருக்க பதிவுகளை சுருக்குகிறது, அதே நேரத்தில் கோப்பு அளவு மிகக் கணிசமாகக் குறைக்கப்படுகிறது (சில நேரங்களில் பல மடங்குகள்).

இயற்பியல் ரீதியாக, WAL ஆனது ஒரு நிலையான அளவின் (இயல்புநிலையாக 10MB) பல பிரிவுகளைக் கொண்டுள்ளது (இயல்புநிலையாக 64), அவை வட்ட வடிவில் மேலெழுதப்படுகின்றன. தற்போதைய பிரிவு நிரப்பப்பட்டவுடன், அடுத்த பிரிவு மின்னோட்டமாக ஒதுக்கப்படும், மேலும் நிரப்பப்பட்ட பகுதி ஒரு தனி நூல் மூலம் காப்பகத்திற்கு நகலெடுக்கப்படும். WAL காம்பாக்ஷன் ஏற்கனவே காப்பகப் பிரிவுகளுடன் வேலை செய்கிறது. மேலும், ஒரு தனி நூலாக, இது சோதனைச் சாவடியின் செயல்பாட்டைக் கண்காணித்து, இயற்பியல் பதிவுகள் தேவைப்படாத காப்பகப் பிரிவுகளில் சுருக்கத்தைத் தொடங்குகிறது.

அப்பாச்சி இக்னைட்டில் தரவு சுருக்கம். Sber இன் அனுபவம்

செயல்திறன் தாக்கம்

WAL சுருக்கமானது ஒரு தனி நூலாக இயங்குவதால், செய்யப்படும் செயல்பாடுகளில் நேரடியான தாக்கம் இருக்கக்கூடாது. ஆனால் அது இன்னும் கூடுதலான பின்னணி சுமையை CPU (சுருக்க) மற்றும் வட்டில் வைக்கிறது (ஒவ்வொரு WAL பிரிவையும் காப்பகத்திலிருந்து படித்து சுருக்கப்பட்ட பிரிவுகளை எழுதுதல்), எனவே கணினி அதன் அதிகபட்ச திறனில் இயங்கினால், அது செயல்திறன் சிதைவுக்கு வழிவகுக்கும்.

எப்படி இயக்குவது மற்றும் கட்டமைப்பது

நீங்கள் சொத்தைப் பயன்படுத்தி WAL சுருக்கத்தை இயக்கலாம் WalCompactionEnabled в DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)) மேலும், DataStorageConfiguration.setWalCompactionLevel() முறையைப் பயன்படுத்தி, நீங்கள் இயல்புநிலை மதிப்பில் (BEST_SPEED) திருப்தி அடையவில்லை என்றால், சுருக்க அளவை அமைக்கலாம்.

WAL பக்க ஸ்னாப்ஷாட் சுருக்கம்

இது எப்படி வேலை செய்கிறது

WAL பதிவுகள் தருக்க மற்றும் இயற்பியல் என பிரிக்கப்பட்டுள்ளன என்பதை நாங்கள் ஏற்கனவே கண்டுபிடித்துள்ளோம். ஒவ்வொரு பக்கத்திற்கும் ஒவ்வொரு மாற்றத்திற்கும், பக்க நினைவகத்தில் ஒரு இயற்பியல் WAL பதிவு உருவாக்கப்படும். இயற்பியல் பதிவுகள், 2 துணை வகைகளாகவும் பிரிக்கப்பட்டுள்ளன: பக்க ஸ்னாப்ஷாட் பதிவு மற்றும் டெல்டா பதிவு. ஒவ்வொரு முறையும் நாம் ஒரு பக்கத்தில் எதையாவது மாற்றி, அதை சுத்தமான நிலையில் இருந்து அழுக்கு நிலைக்கு மாற்றும்போது, ​​இந்தப் பக்கத்தின் முழுமையான நகல் WAL (பக்க ஸ்னாப்ஷாட் பதிவு) இல் சேமிக்கப்படும். WAL இல் ஒரு பைட்டை மட்டும் மாற்றினாலும், பதிவு பக்க அளவை விட சற்று பெரியதாக இருக்கும். ஏற்கனவே அழுக்குப் பக்கத்தில் எதையாவது மாற்றினால், WAL இல் ஒரு டெல்டா பதிவு உருவாகிறது, இது பக்கத்தின் முந்தைய நிலையுடன் ஒப்பிடும்போது மாற்றங்களை மட்டுமே பிரதிபலிக்கிறது, ஆனால் முழு பக்கமும் அல்ல. சோதனைச் சாவடி தொடங்கிய உடனேயே, சோதனைச் சாவடியின் போது பக்கங்களின் நிலையை அழுக்கிலிருந்து சுத்தமாக மீட்டமைப்பதால், கிட்டத்தட்ட எல்லாப் பதிவுகளும் பக்கங்களின் ஸ்னாப்ஷாட்களை மட்டுமே கொண்டிருக்கும் (சோதனைச் சாவடி தொடங்கிய உடனேயே அனைத்துப் பக்கங்களும் சுத்தமாக இருப்பதால்) , அடுத்த சோதனைச் சாவடியை நாம் நெருங்கும்போது, ​​டெல்டா பதிவு பின்னம் வளரத் தொடங்குகிறது மற்றும் அடுத்த சோதனைச் சாவடியின் தொடக்கத்தில் மீண்டும் மீட்டமைக்கப்படுகிறது. சில செயற்கைச் சோதனைகளின் அளவீடுகள், இயற்பியல் பதிவுகளின் மொத்த அளவில் பக்க ஸ்னாப்ஷாட்களின் பங்கு 90% ஐ எட்டுகிறது என்பதைக் காட்டுகிறது.

WAL பக்க ஸ்னாப்ஷாட் சுருக்கத்தின் யோசனை, ஆயத்த பக்க சுருக்க கருவியைப் பயன்படுத்தி பக்க ஸ்னாப்ஷாட்களை சுருக்க வேண்டும் (வட்டு பக்க சுருக்கத்தைப் பார்க்கவும்). அதே நேரத்தில், WAL இல், பதிவுகள் பின்னிணைப்பு-மட்டும் பயன்முறையில் தொடர்ச்சியாகச் சேமிக்கப்படுகின்றன, மேலும் கோப்பு முறைமை தொகுதிகளின் எல்லைகளுடன் பதிவுகளை பிணைக்க வேண்டிய அவசியமில்லை, எனவே இங்கே, வட்டு பக்க சுருக்க பொறிமுறையைப் போலல்லாமல், நமக்கு சிதறிய கோப்புகள் தேவையில்லை. அனைத்து; அதன்படி, இந்த பொறிமுறையானது OS Linux இல் மட்டும் வேலை செய்யும். கூடுதலாக, பக்கத்தை எவ்வளவு சுருக்க முடிந்தது என்பது இனி எங்களுக்கு முக்கியமல்ல. நாங்கள் 1 பைட்டை விடுவித்தாலும், இது ஏற்கனவே ஒரு நேர்மறையான முடிவு மற்றும் வட்டு பக்க சுருக்கத்தைப் போலல்லாமல், சுருக்கப்பட்ட தரவை WAL இல் சேமிக்க முடியும், அங்கு 1 கோப்பு முறைமைத் தொகுதிகளுக்கு மேல் விடுவித்தால் மட்டுமே சுருக்கப்பட்ட பக்கத்தைச் சேமிப்போம்.

பக்கங்கள் மிகவும் சுருக்கக்கூடிய தரவு, மொத்த WAL தொகுதியில் அவற்றின் பங்கு மிக அதிகமாக உள்ளது, எனவே WAL கோப்பு வடிவமைப்பை மாற்றாமல் அதன் அளவு குறிப்பிடத்தக்க குறைப்பைப் பெறலாம். தருக்க பதிவுகள் உட்பட சுருக்கமானது, வடிவமைப்பில் மாற்றம் மற்றும் இணக்கத்தன்மை இழப்பு தேவைப்படும், எடுத்துக்காட்டாக, தருக்க பதிவுகளில் ஆர்வமுள்ள வெளிப்புற நுகர்வோருக்கு, ஆனால் கோப்பு அளவு குறிப்பிடத்தக்க குறைப்புக்கு வழிவகுக்காது.

வட்டு பக்க சுருக்கத்தைப் போலவே, WAL பக்க ஸ்னாப்ஷாட் சுருக்கமானது ZSTD, LZ4, Snappy சுருக்க அல்காரிதம்கள் மற்றும் SKIP_GARBAGE பயன்முறையைப் பயன்படுத்தலாம்.

செயல்திறன் தாக்கம்

WAL பக்க ஸ்னாப்ஷாட் சுருக்கத்தை நேரடியாக இயக்குவது பக்க நினைவகத்தில் தரவை எழுதும் த்ரெட்களை மட்டுமே பாதிக்கிறது என்பதைக் கவனிப்பது கடினம் அல்ல. WAL இலிருந்து இயற்பியல் பதிவுகளைப் படிப்பது ஒரு முறை மட்டுமே நிகழ்கிறது, இந்த நேரத்தில் ஒரு வீழ்ச்சிக்குப் பிறகு முனை உயர்த்தப்படும் (மற்றும் அது சோதனைச் சாவடியின் போது விழுந்தால் மட்டுமே).

இது பின்வரும் வழியில் தரவை மாற்றும் த்ரெட்களைப் பாதிக்கிறது: ஒவ்வொரு முறையும் வட்டில் எழுதும் முன் பக்கத்தை சுருக்க வேண்டியதன் காரணமாக எதிர்மறை விளைவையும் (CPU) மற்றும் அளவு குறைவதால் நேர்மறை விளைவையும் (டிஸ்க் IO) பெறுகிறோம். எழுதப்பட்ட தரவு. அதன்படி, இங்கே எல்லாம் எளிது: கணினி செயல்திறன் CPU ஆல் வரையறுக்கப்பட்டால், நாம் ஒரு சிறிய சிதைவைப் பெறுகிறோம், அது வட்டு I / O ஆல் வரையறுக்கப்பட்டால், அதிகரிப்பு கிடைக்கும்.

மறைமுகமாக, WAL அளவைக் குறைப்பது WAL பிரிவுகளை காப்பகம் மற்றும் WAL சுருக்க ஸ்ட்ரீம்களில் டம்ப் செய்யும் ஸ்ட்ரீம்களையும் (நேர்மறையாக) பாதிக்கிறது.

செயற்கைத் தரவைப் பயன்படுத்தி நமது சூழலில் உண்மையான செயல்திறன் சோதனைகள் சிறிது அதிகரிப்பைக் காட்டியது (செயல்திறன் 10% -15% அதிகரித்துள்ளது, தாமதம் 10% -15% குறைந்துள்ளது).

எப்படி இயக்குவது மற்றும் கட்டமைப்பது

குறைந்தபட்ச அப்பாச்சி இக்னைட் பதிப்பு: 2.8. பின்வருமாறு இயக்கவும் மற்றும் கட்டமைக்கவும்:

  • வகுப்பு-பாதையில் ஒரு பற்றவைப்பு-சுருக்க தொகுதி இருக்க வேண்டும். இயல்பாக, இது லிப்ஸ்/விருப்ப கோப்பகத்தில் அப்பாச்சி இக்னைட் விநியோகத்தில் அமைந்துள்ளது மற்றும் வகுப்பு பாதையில் சேர்க்கப்படவில்லை. நீங்கள் கோப்பகத்தை ஒரு நிலைக்கு மேலே நகர்த்தலாம், பின்னர் நீங்கள் அதை ignite.sh மூலம் இயக்கும்போது அது தானாகவே இயக்கப்படும்.
  • நிலைத்தன்மை இயக்கப்பட்டிருக்க வேண்டும் (வழியாக இயக்கப்பட்டது DataRegionConfiguration.setPersistenceEnabled(true)).
  • சுருக்க முறை முறையைப் பயன்படுத்தி அமைக்க வேண்டும் DataStorageConfiguration.setWalPageCompression(), சுருக்கமானது முன்னிருப்பாக முடக்கப்பட்டுள்ளது (முடக்கப்பட்ட பயன்முறை).
  • விருப்பமாக, நீங்கள் முறையைப் பயன்படுத்தி சுருக்க அளவை அமைக்கலாம் DataStorageConfiguration.setWalPageCompression(), ஒவ்வொரு பயன்முறையிலும் சரியான மதிப்புகளுக்கான முறைக்கான javadoc ஐப் பார்க்கவும்.

முடிவுக்கு

Apache Ignite இல் கருதப்படும் தரவு சுருக்க வழிமுறைகள் ஒன்றுக்கொன்று சுயாதீனமாக பயன்படுத்தப்படலாம், ஆனால் அவற்றின் எந்த கலவையும் ஏற்றுக்கொள்ளத்தக்கது. அவை எவ்வாறு செயல்படுகின்றன என்பதைப் புரிந்துகொள்வது, உங்கள் சூழலில் உங்கள் பணிகளுக்கு அவை எவ்வளவு பொருத்தமானவை என்பதையும், அவற்றைப் பயன்படுத்தும்போது நீங்கள் என்ன தியாகம் செய்ய வேண்டும் என்பதையும் தீர்மானிக்க உங்களை அனுமதிக்கும். வட்டு பக்க சுருக்கமானது பிரதான சேமிப்பகத்தை சுருக்க வடிவமைக்கப்பட்டுள்ளது மற்றும் நடுத்தர சுருக்க விகிதத்தை கொடுக்க முடியும். WAL பக்க ஸ்னாப்ஷாட் சுருக்கமானது WAL கோப்புகளுக்கான சராசரி அளவு சுருக்கத்தை கொடுக்கும், மேலும் பெரும்பாலும் செயல்திறனை மேம்படுத்தும். WAL சுருக்கமானது செயல்திறனில் நேர்மறையான விளைவை ஏற்படுத்தாது, ஆனால் இயற்பியல் பதிவுகளை அகற்றுவதன் மூலம் WAL கோப்புகளின் அளவை முடிந்தவரை குறைக்கும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்