ஒத்திசைவு உத்திகள்
ஹைபர்னேட்டில் இரண்டாம் நிலை தேக்ககத்தை இயக்கிய பிறகு, எந்தெந்த நிறுவனப் பொருட்களை நாங்கள் கேச் செய்ய விரும்புகிறோம், எப்படி என்பதை ஹைபர்னேட்டிற்கு விளக்க வேண்டும்.
இதைச் செய்ய, ஹைபர்னேட் நிறுவன வகுப்புகளுக்கான சிறப்பு சிறுகுறிப்பு உள்ளது - @Cache . உதாரணமாக:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
இந்த சிறுகுறிப்பு, நாம் இரண்டாவது நிலை தற்காலிக சேமிப்பைப் பயன்படுத்த விரும்பும் ஒவ்வொரு உட்பொருளுக்கும் எழுதப்பட வேண்டும். உதாரணமாக:
@Entity
@Table(name = "employee")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Employee {
@Id
private Integer id;
private Set<Task> tasks;
}
வெவ்வேறு த்ரெட்களில் இருந்து அணுகப்பட்டால், தற்காலிகச் சேமிப்பில் உள்ள உட்பொருளுக்கான 4 சாத்தியமான அணுகல் உத்திகளை Hibernate கொண்டுள்ளது:
- படிக்க மட்டும்
- படிக்க-எழுத
- கட்டுப்பாடற்ற-படிக்க-எழுத
- பரிவர்த்தனை
படிக்க மட்டும். எப்போதும் மாறாத தரவு-பொருத்தமான ஒத்திசைவு உத்தி. ஹைபர்னேட் இந்த பொருட்களை அதன் நினைவகத்தில் சேமிக்கும். குறிப்பு தரவுகளுக்கு மட்டுமே இதைப் பயன்படுத்தவும்.
தரவுத்தளங்கள் எப்போதும் மாறாத பல தகவல்களைச் சேமிக்கின்றன. எடுத்துக்காட்டாக, ஒரு அட்டவணை மட்டுமே சேர்க்கப்படும் ஆனால் மாற்றப்படாத அல்லது அகற்றப்படாத நிகழ்வுகளின் பட்டியலை வைத்திருக்கிறது. ஹைபர்னேட் மூலம் இந்த டேபிளுடன் நீங்கள் வேலை செய்ய வேண்டும் என்றால், படிக்க மட்டும் கேச்சிங் உத்தி உங்களுக்கு பொருந்தும்.
படிக்க-எழுத (படிக்க-எழுத). முதன்மையாக படிக்கக்கூடிய தரவுகளுக்கு இந்த உத்தியைப் பயன்படுத்தவும். இருப்பினும், ஹைபர்னேட் இந்தத் தரவை மாற்றுவதற்கான முயற்சிகளைக் கண்காணிக்கும், இருப்பினும் அவை மிகவும் அரிதாகவே இருக்கும் என்று எதிர்பார்க்கிறது.
அரிதாக மாறும் மற்றும் அடிக்கடி படிக்கப்படும் / கோரப்படும் பொருட்களை நீங்கள் முக்கியமாக கேச் செய்ய வேண்டும். உங்களிடம் இதுபோன்ற பொருள்கள் இருந்தால், அவற்றுக்கான வாசிப்பு-எழுது உத்தியைப் பயன்படுத்த வேண்டும்.
கண்டிப்பற்ற - படிக்க - எழுத . இந்த மூலோபாயம் தற்காலிக சேமிப்பு மற்றும் தரவுத்தளத்திற்கு இடையே உள்ள நிலைத்தன்மைக்கு உத்தரவாதம் அளிக்காது. தரவு கிட்டத்தட்ட மாறவே இல்லை மற்றும் பழைய தரவுக்கான சிறிய வாய்ப்பு முக்கியமான பிரச்சினையாக இல்லாவிட்டால் இந்த உத்தியைப் பயன்படுத்தவும்.
படிக்க-எழுதுதல் உத்தியைப் போலன்றி, இந்த உத்தியானது, மாறக்கூடிய தரவு வாசிப்பதற்காகப் பூட்டப்படவில்லை என்று கருதுகிறது. இதன் விளைவாக, பொருள் ஒரு இடத்தில் மாற்றப்படலாம், மற்றொரு இடத்தில், யாரோ ஒருவர் அதன் பழைய பதிப்பைப் படிக்கிறார்.
எடுத்துக்காட்டாக, ஒரு பயனர் தனது கருத்தை மாற்றியுள்ளார், ஆனால் மற்ற பயனர்கள் அவரது பழைய பதிப்பை சிறிது நேரம் பார்க்கிறார்கள். இது உங்களுக்கு ஒரு பிரச்சனை இல்லை என்றால், கண்டிப்பான-படிக்க-எழுதுதல் உத்தியைப் பயன்படுத்தவும்.
பரிவர்த்தனை . புதுப்பித்தலின் அரிதான சந்தர்ப்பத்தில் ஒரே நேரத்தில் நடக்கும் பரிவர்த்தனைகளில் பழைய தரவைத் தடுப்பது முக்கியமானதாக இருக்கும் முதன்மையாக படிக்க-மட்டும் தரவுகளுக்கு இந்த உத்தியைப் பயன்படுத்தவும்.
ஒரு தற்காலிக சேமிப்பில் தரவைச் சேமித்தல்
நீங்கள் நினைவில் கொள்ள வேண்டிய இரண்டாவது நிலை தற்காலிக சேமிப்பைப் பற்றிய மற்றொரு முக்கியமான விவரம் என்னவென்றால், ஹைபர்னேட் உங்கள் வகுப்புகளின் பொருட்களையே சேமிக்காது. இது சரங்கள், எண்கள் போன்றவற்றின் வரிசைகளாக தகவல்களைச் சேமிக்கிறது.
பொருள் அடையாளங்காட்டி இந்த தகவலுக்கு ஒரு சுட்டியாக செயல்படுகிறது. கருத்தியல் ரீதியாக, இது ஒரு வரைபடம் போன்றது, இதில் பொருளின் ஐடி முக்கியமானது மற்றும் தரவு வரிசைகள் மதிப்பு. நீங்கள் அதை இப்படி கற்பனை செய்யலாம்:
1 -> { "Ivanov", 1, null , {1,2,5} }
2 -> { "Petrov", 2, null , {1,2,5} }
3 -> { "Sidorov", 3, null , {1,2,5} }
ஒவ்வொரு பொருளும் எவ்வளவு கூடுதல் நினைவகத்தை எடுத்துக்கொள்கிறது என்பதைக் கருத்தில் கொள்வது மிகவும் நியாயமானது.
மேலே உள்ளவற்றைத் தவிர, உங்கள் நிறுவன வகுப்பின் சார்புகளும் முன்னிருப்பாக தற்காலிகமாக சேமிக்கப்படவில்லை என்பதை நினைவில் கொள்ள வேண்டும். எடுத்துக்காட்டாக, மேலே உள்ள வகுப்பைக் கருத்தில் கொண்டால், பணியாளர் , பிறகு எடுக்கும் போது, பணிகள் சேகரிப்பு தரவுத்தளத்திலிருந்து மீட்டெடுக்கப்படும் , இரண்டாம் நிலை தற்காலிக சேமிப்பிலிருந்து அல்ல .
நீங்கள் சார்புகளையும் கேச் செய்ய விரும்பினால், வகுப்பு இப்படி இருக்க வேண்டும்:
@Entity
@Table(name = "employee")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Employee {
@Id
private Integer id;
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Set<Task> tasks;
}
கடைசி விவரம் - முதல் நிலை தற்காலிக சேமிப்பில் விரும்பிய பொருள் காணப்படவில்லை என்றால் மட்டுமே இரண்டாம் நிலை தற்காலிக சேமிப்பிலிருந்து வாசிப்பு நிகழ்கிறது.
CacheMode
ஹைபர்னேட் மிகவும் நெகிழ்வான கேச்சிங் நிர்வாகத்தை அனுமதிக்கிறது. நீங்கள் ஒவ்வொரு அமர்வுக்கும் அல்லது ஒவ்வொரு தரவுத்தள கோரிக்கைக்கும் கூட கேச் பயன்முறையை அமைக்கலாம்.
அத்தகைய ஐந்து முறைகள் உள்ளன:
- பெறு
- புறக்கணி
- இயல்பானது
- PUT
- புதுப்பிப்பு
கீழே உள்ள அட்டவணை அவர்களின் வேலையை விவரிக்கிறது:
CacheMode | விளக்கம் |
---|---|
பெறு | தற்காலிக சேமிப்பில் இருந்து தரவு படிக்கப்படுகிறது ஆனால் அதில் சேர்க்கப்படவில்லை. |
புறக்கணி | அமர்வு தற்காலிக சேமிப்புடன் தொடர்பு கொள்ளாது. |
இயல்பானது | தற்காலிக சேமிப்பிலிருந்து தரவு படிக்கப்பட்டு அதில் சேர்க்கப்படுகிறது. |
PUT | தேக்ககத்திலிருந்து தரவு எடுக்கப்படுவதில்லை, ஆனால் அதில் சேர்க்கப்படும். |
புதுப்பிப்பு | தேக்ககத்திலிருந்து தரவு எடுக்கப்படுவதில்லை, ஆனால் அதில் சேர்க்கப்படும். இந்த பயன்முறையில், hibernate.cache.use_minimal_puts அமைப்பு கூடுதலாகப் பயன்படுத்தப்படுகிறது. |
ஒரு அமர்வுக்கு கேச் பயன்முறையை அமைப்பதற்கான எடுத்துக்காட்டு:
session.setCacheMode(CacheMode.GET);
Employee director = session.createQuery("from Employee where id = 4").uniqueResult();
அமர்வு மற்றும் கோரிக்கைக்கான பயன்முறையை அமைப்பதற்கான எடுத்துக்காட்டு:
session.setCacheMode(CacheMode.GET);
Query query = session.createQuery("from Employee where id = 4");
query.setCacheMode(CacheMode.IGNORE); // Ignore cache work for this request
Employee director = query.uniqueResult();