நாங்கள் சில்லறை நெட்வொர்க்கின் தொழில்நுட்ப மேம்பாட்டுத் துறை. ஒரு நாள், நிர்வாகம் MSSQL உடன் இணைந்து Apache Ignite ஐப் பயன்படுத்தி பெரிய அளவிலான கணக்கீடுகளை விரைவுபடுத்தும் பணியை அமைத்தது, மேலும் ஜாவா குறியீட்டின் அழகான எடுத்துக்காட்டுகள் மற்றும் எடுத்துக்காட்டுகளுடன் ஒரு வலைத்தளத்தைக் காட்டியது. நான் உடனடியாக தளத்தை விரும்பினேன்
1. பிரச்சனையின் அறிக்கை
பிரச்சனையின் சாராம்சம் பின்வருமாறு. SalesPoint விற்பனை புள்ளி அடைவு மற்றும் Sku (Stock Keeping Unit) தயாரிப்பு கோப்பகம் உள்ளது. விற்பனை புள்ளியில் "சிறிய" மற்றும் "பெரிய" மதிப்புகளுடன் "ஸ்டோர் வகை" பண்பு உள்ளது. ஒரு வகைப்படுத்தல் (விற்பனை புள்ளியின் தயாரிப்புகளின் பட்டியல்) ஒவ்வொரு விற்பனைப் புள்ளியுடனும் இணைக்கப்பட்டுள்ளது (DBMS இலிருந்து ஏற்றப்பட்டது) மற்றும் குறிப்பிட்ட தேதியிலிருந்து குறிப்பிட்ட தயாரிப்பு பற்றிய தகவல் வழங்கப்படுகிறது.
வகைப்படுத்தலில் இருந்து விலக்கப்பட்டது அல்லது வகைப்படுத்தலில் சேர்க்கப்பட்டது.
விற்பனை புள்ளிகளின் பிரிக்கப்பட்ட தற்காலிக சேமிப்பை ஒழுங்கமைத்து, இணைக்கப்பட்ட தயாரிப்புகள் பற்றிய தகவல்களை ஒரு மாதத்திற்கு முன்பே அதில் சேமிக்க வேண்டும். காம்பாட் சிஸ்டத்துடன் இணக்கத்தன்மைக்கு, தரவை ஏற்றுவதற்கு, படிவத்தின் (ஸ்டோர் வகை, தயாரிப்புக் குறியீடு, நாள், எண்_of_sales_points) மொத்தத்தைக் கணக்கிட்டு, அதை மீண்டும் DBMS இல் பதிவேற்றுவதற்கு, Ignite கிளையன்ட் நோட் தேவைப்படுகிறது.
2. இலக்கியம் பற்றிய ஆய்வு
எனக்கு இதுவரை எந்த அனுபவமும் இல்லை, அதனால் நான் அடுப்பில் இருந்து நடனமாடத் தொடங்குகிறேன். அதாவது, வெளியீடுகளின் மதிப்பாய்விலிருந்து.
கட்டுரை 2016
நம்பிக்கையுடன் உறுதியளிக்கிறார் "நீங்கள் ஒரு நொடியில் இயங்குவீர்கள்!" இரண்டு அப்பாச்சி இக்னைட் எசென்ஷியல்ஸ் வீடியோக்களைப் பார்த்து, சூழல் மாறி அமைப்புகளைக் கண்டுபிடித்து வருகிறேன், ஆனால் அவை எனது குறிப்பிட்ட பணிக்கு மிகவும் பயனுள்ளதாக இல்லை. "example-ignite.xml" என்ற நிலையான கோப்புடன் கட்டளை வரியிலிருந்து Ignite ஐ வெற்றிகரமாக துவக்கி, முதல் பயன்பாட்டை உருவாக்குகிறேன்
நான் மேலும் படித்தேன், அங்கு உதாரணம் உடனடியாக affinityKey ஐப் பயன்படுத்துகிறது (முன்பு SQL வினவல் மூலம் உருவாக்கப்பட்டது), மேலும் மர்மமான BinaryObject ஐப் பயன்படுத்துகிறது:
IgniteCache<BinaryObject, BinaryObject> people
= ignite.cache("Person").withKeepBinary();
நான் அதைப் படித்தேன்
எனது வழக்குக்கு ஏற்றவாறு கம்ப்யூட் அப்ளிகேஷனை ரீமேக் செய்கிறேன். MSSQL இல் விற்பனை புள்ளிகளின் கோப்பகத்தின் முதன்மை விசையானது [id] [int] NULL என வரையறுக்கப்படுகிறது, நான் ஒப்புமை மூலம் ஒரு தற்காலிக சேமிப்பை உருவாக்குகிறேன்
IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")
xml கட்டமைப்பில், கேச் பிரிக்கப்பட்டிருப்பதைக் குறிப்பிடுகிறேன்
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="spCache"/>
<property name="cacheMode" value="PARTITIONED"/>
</bean>
விற்பனை புள்ளி வாரியாகப் பிரித்தல், அங்கு கிடைக்கும் salesPointCache பதிவுகளுக்கு ஒவ்வொரு கிளஸ்டர் முனையிலும் தேவையான மொத்த அளவு கட்டமைக்கப்படும் என்று கருதுகிறது, அதன் பிறகு கிளையன்ட் முனை இறுதி கூட்டுத்தொகையைச் செய்யும்.
நான் டுடோரியலைப் படிக்கிறேன்
@Override
public void run() {
SalesPoint sp=salesPointCache.get(spId);
sp.calculateSalesPointCount();
..
}
நான் திரட்டல் மற்றும் பதிவேற்றும் தர்க்கத்தைச் சேர்த்து, சோதனைத் தரவுத் தொகுப்பில் இயக்குகிறேன். எல்லாமே டெவலப்மெண்ட் சர்வரில் உள்ளூரில் வேலை செய்கிறது.
நான் இரண்டு CentOs சோதனை சேவையகங்களைத் தொடங்குகிறேன், IP முகவரிகளை default-config.xml இல் குறிப்பிடவும், ஒவ்வொன்றிலும் செயல்படுத்தவும்
./bin/ignite.sh config/default-config.xml
இரண்டு பற்றவைப்பு முனைகளும் இயங்குகின்றன மற்றும் ஒன்றையொன்று பார்க்க முடியும். கிளையன்ட் பயன்பாட்டின் xml கட்டமைப்பில் தேவையான முகவரிகளை நான் குறிப்பிடுகிறேன், அது தொடங்குகிறது, இடவியலில் மூன்றாவது முனையைச் சேர்க்கிறது மற்றும் உடனடியாக மீண்டும் இரண்டு முனைகள் உள்ளன. பதிவு "ClassNotFoundException: model.SalesPoint" என்ற வரியில் காட்டுகிறது
SalesPoint sp=salesPointCache.get(spId);
CentOs சேவையகங்களில் தனிப்பயன் SalesPoint வகுப்பு இல்லாததே பிழைக்கான காரணம் என்று StackOverflow கூறுகிறது. வந்துவிட்டோம். "ஒவ்வொரு முனையிலும் உங்கள் ஜாவா குறியீட்டை கைமுறையாகப் பயன்படுத்த வேண்டியதில்லை" மற்றும் பலவற்றைப் பற்றி எப்படி? அல்லது "உங்கள் ஜாவா குறியீடு" சேல்ஸ்பாயிண்ட் பற்றியது இல்லையா?
நான் எதையாவது தவறவிட்டிருக்கலாம் - நான் மீண்டும் தேட ஆரம்பிக்கிறேன், மீண்டும் படிக்கிறேன் மற்றும் தேடுகிறேன். சிறிது நேரம் கழித்து, நான் தலைப்பில் எல்லாவற்றையும் படித்தேன், இனி புதிதாக எதுவும் இல்லை என்ற உணர்வு எனக்கு வருகிறது. நான் தேடும் போது, சில சுவாரஸ்யமான கருத்துகள் கிடைத்தது.
Model classes are not peer deployed, but you can use withKeepBinary() flag
on the cache and query BinaryObjects. This way you will avoid deserialization
on the server side and will not get ClassNotFoundException.
மற்றொரு அதிகாரப்பூர்வ கருத்து:
ஹப்ரே பற்றிய கட்டுரை
That's it. Start (..) node using MaintenanceServiceNodeStartup file or pass
maintenance-service-node-config.xml to Apache Ignite's ignite.sh/bat scripts.
If you prefer the latter then make sure to build a jar file that will contain
all the classes from java/app/common and java/services/maintenance directories.
The jar has to be added to the classpath of every node where the service
might be deployed.
உண்மையில், அவ்வளவுதான். இங்கே அது மாறிவிடும், ஏன், இந்த மர்மமான பைனரி வடிவம்!
3.SingleJar
டெனிஸ் எனது தனிப்பட்ட மதிப்பீட்டில் முதல் இடத்தைப் பிடித்தார், IMHO அனைத்து கிடைக்கக்கூடிய மிகவும் பயனுள்ள பயிற்சி. அவரது
நான் அதை அதே வழியில் செய்கிறேன் மற்றும் கட்டளை வரி வாதத்தைப் பொறுத்து “டேட்டா நோட்” அல்லது “கிளையன்ட் நோட்” ஐத் தொடங்கும் ஒரு ஜார் கோப்பைப் பெறுகிறேன். சட்டசபை தொடங்குகிறது மற்றும் வேலை செய்கிறது. பூஜ்ஜிய வரிசைப்படுத்தல் தோற்கடிக்கப்பட்டது.
சோதனைத் தரவின் மெகாபைட்களிலிருந்து பத்து ஜிகாபைட் போர் தரவுகளுக்கு மாறுவது பைனரி வடிவம் ஒரு காரணத்திற்காக இருப்பதைக் காட்டுகிறது. முனைகளில் நினைவக நுகர்வுகளை மேம்படுத்துவது அவசியமாக இருந்தது, இங்குதான் பைனரிஆப்ஜெக்ட் மிகவும் பயனுள்ளதாக இருந்தது.
4. கண்டுபிடிப்புகள்
அப்பாச்சி இக்னைட் திட்ட ஆவணங்களின் தெளிவின்மை பற்றி எதிர்கொண்ட முதல் பழி நியாயமானது; 2016 முதல் சிறிதும் மாறவில்லை. இணையதளம் மற்றும்/அல்லது களஞ்சியத்தின் அடிப்படையில் செயல்படும் முன்மாதிரியை ஒரு தொடக்கநிலையாளர் ஒன்று சேர்ப்பது எளிதானது அல்ல.
செய்யப்பட்ட வேலையின் முடிவுகளின் அடிப்படையில், ஜீரோ டெப்லாய்மென்ட் வேலை செய்கிறது, ஆனால் கணினி மட்டத்தில் மட்டுமே செயல்படுகிறது. இது போன்ற ஒன்று: தனிப்பயன் வகுப்புகளுடன் பணிபுரிய தொலைநிலை கிளஸ்டர் முனைகளை கற்பிக்க பைனரிஆப்ஜெக்ட் பயன்படுத்தப்படுகிறது; பூஜ்ஜிய வரிசைப்படுத்தல் - உள் பொறிமுறை
அப்பாச்சி தன்னைத்தானே பற்றவைத்து, சிஸ்டம் அப்ஜெக்ட்களை கிளஸ்டர் முழுவதும் விநியோகம் செய்கிறது.
எனது அனுபவம் புதிய Apache Ignite பயனர்களுக்கு பயனுள்ளதாக இருக்கும் என்று நம்புகிறேன்.
ஆதாரம்: www.habr.com