අපි සිල්ලර ජාලයක තාක්ෂණික සංවර්ධන දෙපාර්තමේන්තුවයි. දිනක්, MSSQL සමඟ ඒකාබද්ධව Apache Ignite භාවිතා කරමින් විශාල පරිමාණ ගණනය කිරීම් වේගවත් කිරීමේ කාර්යය කළමනාකරණය කළ අතර, Java කේතයේ අලංකාර රූප සටහන් සහ උදාහරණ සහිත වෙබ් අඩවියක් පෙන්වීය. මම වහාම වෙබ් අඩවියට කැමති විය
1. ගැටලුවේ ප්රකාශය
ගැටලුවේ සාරය පහත පරිදි වේ. SalesPoint විකුණුම් ස්ථාන නාමාවලියක් සහ Sku (Stock Keeping Unit) නිෂ්පාදන නාමාවලියක් ඇත. විකුණුම් ස්ථානයට "කුඩා" සහ "විශාල" අගයන් සහිත "ගබඩා වර්ගය" ගුණාංගයක් ඇත. එකතුවක් (විකිණුම් ස්ථානයේ නිෂ්පාදන ලැයිස්තුව) එක් එක් විකුණුම් ස්ථානයට සම්බන්ධ කර ඇත (DBMS වෙතින් පටවා ඇත) සහ තොරතුරු සපයනු ලබන්නේ නිශ්චිත දිනයේ සිට නිශ්චිත නිෂ්පාදිතය
එකතුවෙන් බැහැර කර හෝ එකතුවට එකතු කර ඇත.
කොටස් කළ විකුණුම් ස්ථාන හැඹිලියක් සංවිධානය කිරීම සහ සම්බන්ධිත නිෂ්පාදන පිළිබඳ තොරතුරු මාසයකට පෙර එහි ගබඩා කිරීම අවශ්ය වේ. සටන් පද්ධතිය සමඟ ගැළපීම සඳහා දත්ත පූරණය කිරීමට, පෝරමයේ එකතුවක් (ගබඩා වර්ගය, නිෂ්පාදන කේතය, දිනය, අංක_of_sales_points) ගණනය කර එය නැවත DBMS වෙත උඩුගත කිරීමට Ignite client node අවශ්ය වේ.
2. සාහිත්යය අධ්යයනය
මට තවම කිසිම අත්දැකීමක් නැහැ, ඒ නිසා මම ලිපෙන් නටන්න පටන් ගන්නවා. එනම්, ප්රකාශන සමාලෝචනයෙනි.
2016 වගන්තිය
ශුභවාදීව පොරොන්දු වෙනවා “ඔබ ඉක්මනින්ම ක්රියාත්මක වනු ඇත!” මම Apache Ignite Essentials වීඩියෝ දෙකක් නරඹමින් පරිසර විචල්ය සැකසුම් සොයා ගනිමින් සිටිමි, නමුත් ඒවා මගේ නිශ්චිත කාර්යය සඳහා එතරම් ප්රයෝජනවත් නොවීය. පළමු යෙදුම ගොඩනඟා සම්මත ගොනුව "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 පරීක්ෂණ සේවාදායකයන් දෙකක් දියත් කරමි, default-config.xml හි IP ලිපින සඳහන් කරන්න, එක් එක් මත ක්රියාත්මක කරන්න
./bin/ignite.sh config/default-config.xml
ඉග්නයිට් නෝඩ් දෙකම ක්රියාත්මක වන අතර එකිනෙක දැකිය හැක. මම සේවාදායක යෙදුමේ xml වින්යාසය තුළ අවශ්ය ලිපින සඳහන් කරමි, එය ආරම්භ වී, ස්ථල විද්යාවට තුන්වන නෝඩයක් එක් කරන අතර වහාම නැවත නෝඩ් දෙකක් ඇත. ලොගය පේළියේ "ClassNotFoundException: model.SalesPoint" පෙන්වයි
SalesPoint sp=salesPointCache.get(spId);
StackOverflow පවසන්නේ දෝෂයට හේතුව CentOs සේවාදායක මත අභිරුචි විකුණුම් පොයින්ට් පන්තියක් නොමැති බවයි. අපි ආවා. "ඔබට ඔබගේ ජාවා කේතය එක් එක් නෝඩය මත අතින් යෙදවිය යුතු නැත" සහ යනාදිය ගැන කෙසේද? නැත්නම් "ඔබේ ජාවා කේතය" SalesPoint ගැන නොවේද?
මට යමක් මග හැරී ඇත - මම නැවත සෙවීමට, කියවීමට සහ සෙවීමට පටන් ගනිමි. ටික වේලාවකට පසු, මම මාතෘකාව පිළිබඳ සියල්ල කියවා ඇති බව මට හැඟේ, තවත් අලුත් දෙයක් නැත. මම සොයමින් සිටියදී, මට රසවත් අදහස් කිහිපයක් හමු විය.
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 ලබා ගත හැකි සියල්ලෙන් වඩාත්ම ප්රයෝජනවත් නිබන්ධනය. ඔහුගේ තුළ
මම එය එලෙසම කරන අතර විධාන රේඛා තර්කය මත පදනම්ව “දත්ත නෝඩය” හෝ “සේවාදායක නෝඩය” දියත් කරන තනි jar ගොනුවක් ලබා ගන්න. එකලස් කිරීම ආරම්භ වන අතර ක්රියා කරයි. Zero Deployment පරාජය වී ඇත.
මෙගාබයිට් පරීක්ෂණ දත්තවල සිට ගිගාබයිට් දස ගනනකට සටන් දත්ත දක්වා සංක්රමණය වීම නිසා ද්විමය ආකෘතිය පවතින බව පෙන්නුම් කළේය. නෝඩ් වල මතක පරිභෝජනය ප්රශස්ත කිරීම අවශ්ය වූ අතර BinaryObject ඉතා ප්රයෝජනවත් වූයේ මෙහිදීය.
4. නිගමන
Apache Ignite ව්යාපෘති ප්රලේඛනයේ නොපැහැදිලි බව පිළිබඳ පළමු දෝෂාරෝපණය සාධාරණ විය; 2016 සිට සුළු වශයෙන් වෙනස් වී ඇත. වෙබ් අඩවියක් සහ/හෝ ගබඩාවක් මත පදනම්ව ක්රියාකාරී මූලාකෘතියක් එකලස් කිරීම ආරම්භකයකුට පහසු නොවේ.
සිදු කරන ලද කාර්යයේ ප්රතිඵල මත පදනම්ව, හැඟීම වූයේ Zero Deployment ක්රියා කරයි, නමුත් පද්ධති මට්ටමින් පමණි. මෙවැනි දෙයක්: අභිරුචි පන්ති සමඟ වැඩ කිරීමට දුරස්ථ පොකුරු නෝඩ් ඉගැන්වීමට BinaryObject භාවිතා කරයි; ශුන්ය යෙදවීම - අභ්යන්තර යාන්ත්රණය
Apache Ignite එයම සහ පොකුර පුරා පද්ධති වස්තු බෙදාහරියි.
නව Apache Ignite පරිශීලකයින්ට මගේ අත්දැකීම ප්රයෝජනවත් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.
මූලාශ්රය: www.habr.com