உங்கள் கேச்சிங் தீர்வை ஒருபோதும் எழுத வேண்டாம்

தரவுத்தளத்துடன் பணியை விரைவுபடுத்துவதற்கான மற்றொரு வழி, நாம் ஏற்கனவே கோரிய பொருள்களை தற்காலிக சேமிப்பாகும்.

முக்கியமான! உங்கள் சொந்த கேச்சிங் தீர்வை எழுத வேண்டாம். இந்த பணி நீங்கள் கனவிலும் நினைக்காத பல இடர்பாடுகளைக் கொண்டுள்ளது.

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

பிரச்சனை 2 - நினைவாற்றல் இல்லாமை . நினைவகத்தில் உள்ள பொருள்கள் அதிக இடத்தை எடுத்துக்கொள்வதை நீங்கள் கண்டுபிடிக்கும் வரை, தற்காலிக சேமிப்பு ஒரு சிறந்த யோசனையாகத் தெரிகிறது. சர்வர் அப்ளிகேஷன் கேச் திறம்பட செயல்பட, உங்களுக்கு கூடுதலாக பத்து ஜிகாபைட் நினைவகம் தேவை.

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

பிரச்சனை 3 - வெவ்வேறு உத்திகள் . நடைமுறையில் காண்பிக்கிறபடி, தற்காலிக சேமிப்பில் சேமித்து புதுப்பிப்பதற்கான வெவ்வேறு உத்திகள் வெவ்வேறு பொருட்களுக்கு பயனுள்ளதாக இருக்கும். ஒரு திறமையான கேச்சிங் அமைப்பு அனைத்து பொருட்களுக்கும் ஒரே ஒரு உத்தியை மட்டும் செய்ய முடியாது.

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

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

இதன் விளைவாக, நீங்கள் நினைவகத்தில் முழு மெய்நிகர் DBMS ஐப் பெறுவீர்கள், இது விரைவாக வேலை செய்யும் மற்றும் சிறிய நினைவகத்தை உட்கொள்ளும்.

தரவுத்தள கேச்சிங்

ஜாவா நிரலில் நேரடியாக கேச்சிங் செய்வதோடு கூடுதலாக, கேச்சிங் பெரும்பாலும் தரவுத்தளத்தில் நேரடியாக ஒழுங்கமைக்கப்படுகிறது.

நான்கு பெரிய அணுகுமுறைகள் உள்ளன:

முதல் அணுகுமுறை தரவுத்தளத்தை இயல்புநிலையாக்குவதாகும் . SQL சேவையகம் டேபிள்களில் எவ்வாறு சேமிக்கப்படுகிறது என்பதிலிருந்து வித்தியாசமாக நினைவகத்தில் தரவைச் சேமிக்கிறது.

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

இரண்டாவது அணுகுமுறை வினவல் கேச்சிங் ஆகும் . மற்றும் வினவல் முடிவுகள்.

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

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

மூன்றாவது அணுகுமுறை நினைவகத்தில் உள்ள தரவுத்தளமாகும் .

பொதுவாக பயன்படுத்தப்படும் மற்றொரு அணுகுமுறை. மற்றொரு தரவுத்தளம் சேவையகத்திற்கும் DBMS க்கும் இடையில் வைக்கப்படுகிறது, இது அதன் அனைத்து தரவையும் நினைவகத்தில் மட்டுமே சேமிக்கிறது. இது இன்-மெமரி-டிபி என்றும் அழைக்கப்படுகிறது. ஒரே தரவுத்தளத்தை அணுகும் பல்வேறு சேவையகங்கள் உங்களிடம் இருந்தால், In-Memory-DB ஐப் பயன்படுத்தி, குறிப்பிட்ட சேவையகத்தின் வகையின் அடிப்படையில் தேக்ககத்தை ஒழுங்கமைக்கலாம்.

உதாரணமாக:

அணுகுமுறை 4 - தரவுத்தள கிளஸ்டர் . படிக்க-மட்டும் பல தளங்கள்.

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

இது ஒரு நல்ல தீர்வு, ஏனெனில் இது கட்டமைக்க எளிதானது மற்றும் நடைமுறையில் வேலை செய்கிறது. வழக்கமாக, தரவை மாற்ற தரவுத்தளத்திற்கு ஒரு கோரிக்கைக்கு, தரவைப் படிக்க 10-100 கோரிக்கைகள் வரும்.

ஹைபர்னேட்டில் கேச்சிங் வகைகள்

ஹைபர்னேட் மூன்று நிலை கேச்சிங்கை ஆதரிக்கிறது:

  • அமர்வு மட்டத்தில் தற்காலிக சேமிப்பு (அமர்வு)
  • SessionFactory அளவில் கேச்சிங்
  • தற்காலிக சேமிப்பு கோரிக்கைகள் (மற்றும் அவற்றின் முடிவுகள்)

அத்தகைய உருவத்தின் வடிவத்தில் இந்த அமைப்பை நீங்கள் பிரதிநிதித்துவப்படுத்த முயற்சி செய்யலாம்:

எளிமையான வகை கேச்சிங் ( முதல் நிலை கேச் என்றும் அழைக்கப்படுகிறது ) ஹைபர்னேட் அமர்வு மட்டத்தில் செயல்படுத்தப்படுகிறது. Hibernate எப்போதும் இந்த தற்காலிக சேமிப்பை இயல்பாகவே பயன்படுத்துகிறது மற்றும் அதை முடக்க முடியாது .

பின்வரும் உதாரணத்தை உடனடியாகக் கருத்தில் கொள்வோம்:

Employee director1 = session.get(Employee.class, 4);
Employee director2 = session.get(Employee.class, 4);

assertTrue(director1 == director2);

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

அதே பொருள் என்பது பொருள் குறிப்புகள் கூட ஒரே மாதிரியாக இருக்கும். உண்மையில் அதே பொருள்தான்.

save() , update() , saveOrUpdate() , load() , get() , list() , iterate() , and scroll() முறைகள் எப்போதும் முதல் நிலை தற்காலிக சேமிப்பைப் பயன்படுத்தும். உண்மையில், மேலும் சேர்க்க எதுவும் இல்லை.

இரண்டாம் நிலை கேச்சிங்

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

உதாரணமாக:

Session session = factory.openSession();
Employee director1 = session.get(Employee.class, 4);
session.close();

Session session = factory.openSession();
Employee director2 = session.get(Employee.class, 4);
session.close();

assertTrue(director1 != director2);
assertTrue(director1.equals(director2));

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

இரண்டாம் நிலை கேச்சிங் இயல்பாகவே முடக்கப்பட்டுள்ளது . எனவே, தரவுத்தளத்தில் ஒன்றுக்கு பதிலாக இரண்டு வினவல்கள் உள்ளன.

அதை இயக்க, நீங்கள் பின்வரும் வரிகளை hibernate.cfg.xml கோப்பில் எழுத வேண்டும்:

<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletEhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>

இரண்டாம் நிலை தேக்ககத்தை இயக்கிய பிறகு, ஹைபர்னேட் நடத்தை சிறிது மாறும்:

Session session = factory.openSession();
Employee director1 = session.get(Employee.class, 4);
session.close();

Session session = factory.openSession();
Employee director2 = session.get(Employee.class, 4);
session.close();

assertTrue(director1 == director2);

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