اسان هڪ پرچون نيٽ ورڪ جي ٽيڪنالاجي ترقي کاتي آهيون. هڪ ڏينهن، انتظاميا MSSQL سان گڏ Apache Ignite استعمال ڪندي وڏي پيماني تي حساب ڪتاب کي تيز ڪرڻ جو ڪم مقرر ڪيو، ۽ جاوا ڪوڊ جي خوبصورت تصويرن ۽ مثالن سان هڪ ويب سائيٽ ڏيکاري. مون کي فوري طور تي سائيٽ پسند ڪيو
1. مسئلي جو بيان
مسئلي جو خلاصو هن ريت آهي. هتي هڪ SalesPoint سيلز پوائنٽ ڊاريڪٽري ۽ هڪ Sku (اسٽاڪ رکڻ واري يونٽ) پراڊڪٽ ڊاريڪٽري آهي. وڪري جي نقطي ۾ "ننڍو" ۽ "وڏي" جي قدرن سان "اسٽور جو قسم" خاصيت آهي. هڪ ترتيب (وڪري جي نقطي جي شين جي فهرست) وڪرو جي هر نقطي سان ڳنڍيل آهي (ڊي بي ايم ايس تان لوڊ ٿيل) ۽ معلومات مهيا ڪئي وئي آهي ته مخصوص تاريخ کان مخصوص پيداوار
مجموعن مان خارج ٿيل يا ترتيب ۾ شامل ڪيو ويو.
اهو ضروري آهي ته وڪري جي پوائنٽن جي ورهاڱي واري ڪيش کي ترتيب ڏيو ۽ ان ۾ هڪ مهيني اڳ ۾ ڳنڍيل شين جي معلومات کي ذخيرو ڪريو. جنگي نظام سان مطابقت جي ضرورت آهي Ignite ڪلائنٽ نوڊ کي ڊيٽا لوڊ ڪرڻ لاءِ، فارم جي مجموعي کي ڳڻيو (اسٽور جو قسم، پراڊڪٽ ڪوڊ، ڏينهن، number_of_sales_points) ۽ ان کي واپس DBMS تي اپ لوڊ ڪريو.
2. ادب جو مطالعو
مون کي اڃا تائين ڪو به تجربو نه آهي، تنهنڪري مان اسٽو تان ناچ ڪرڻ شروع ڪري رهيو آهيان. اهو آهي، اشاعت جي جائزي مان.
آرٽيڪل 2016
پراميد طور تي واعدو ڪيو "توهان هڪ لمحي ۾ اٿي ۽ هلندا!" مان ڳولي رهيو آهيان ماحوليات جي متغير سيٽنگون، ٻه Apache Ignite Essentials وڊيوز ڏسي رهيو آهيان، پر اهي منهنجي مخصوص ڪم لاءِ گهڻو ڪارائتو نه هئا. مون ڪاميابيءَ سان Ignite کي ڪمانڊ لائين مان معياري فائل “example-ignite.xml” سان لانچ ڪيو، پھرين ايپليڪيشن ٺاھڻ
مون اڳتي پڙهيو، ۽ اتي مثال فوري طور تي استعمال ڪري ٿو affinityKey (اڳ ۾ ٺهيل هڪ SQL سوال ذريعي)، ۽ اڃا به استعمال ڪري ٿو پراسرار BinaryObject:
IgniteCache<BinaryObject, BinaryObject> people
= ignite.cache("Person").withKeepBinary();
مون ان کي پڙهيو
مان پنهنجي ڪيس جي مناسبت سان Compute Application کي ٻيهر ٺاهي رهيو آهيان. MSSQL ۾ پوائنٽس آف سيل جي ڊاريڪٽري جي بنيادي ڪنجي جي وضاحت ڪئي وئي آهي [id] [int] NOT NULL، مان هڪ ڪيش ٺاهيان ٿو قياس ذريعي
IgniteCache<Integer, SalesPoint> salesPointCache=ignite.cache("spCache")
xml config ۾ مان ظاهر ڪريان ٿو ته ڪيش ورهاڱي ڪئي وئي آهي
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="spCache"/>
<property name="cacheMode" value="PARTITIONED"/>
</bean>
وڪري جي نقطي جي ذريعي ورهاڱي جو فرض آهي ته گهربل مجموعي هر ڪلستر نوڊ تي ٺاهي ويندي سيلز پوائنٽ ڪيچ رڪارڊ لاءِ اتي موجود، جنهن کان پوءِ ڪلائنٽ نوڊ حتمي مجموعو انجام ڏيندو.
مان سبق پڙهي رهيو آهيان
@Override
public void run() {
SalesPoint sp=salesPointCache.get(spId);
sp.calculateSalesPointCount();
..
}
آئون مجموعي ۽ اپلوڊ منطق شامل ڪريان ٿو ۽ ان کي ٽيسٽ ڊيٽا سيٽ تي هلائي ٿو. هر شي مقامي طور تي ڪم ڪري ٿي ترقياتي سرور تي.
مان ٻه CentOs ٽيسٽ سرورز لانچ ڪريو، IP پتي کي default-config.xml ۾ بيان ڪريو، هر هڪ تي عمل ڪريو
./bin/ignite.sh config/default-config.xml
ٻئي Ignite nodes ھلندا آھن ۽ ھڪ ٻئي کي ڏسي سگھندا آھن. آئون ڪلائنٽ ايپليڪيشن جي 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.
ٻيو مستند رايو:
Habré تي آرٽيڪل
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. سنگل جار
ڊينس منهنجي ذاتي درجه بندي ۾ پهرين جڳهه ورتي، IMHO سڀ کان وڌيڪ مفيد سبق موجود آهن. هن جي
مان اهو ساڳيو طريقي سان ڪريان ٿو ۽ هڪ واحد جار فائل حاصل ڪري ٿو جيڪو "ڊيٽا نوڊ" يا "ڪلائنٽ نوڊ" کي لانچ ڪري ٿو ڪمان لائن دليل جي بنياد تي. اسيمبلي شروع ٿئي ٿي ۽ ڪم ڪري ٿي. زيرو ڊولپمينٽ کي شڪست ڏني وئي آهي.
ٽيسٽ ڊيٽا جي ميگا بائيٽ کان ڏهن گيگا بائيٽ جي جنگي ڊيٽا ڏانهن منتقلي ڏيکاري ٿي ته بائنري فارميٽ هڪ سبب لاءِ موجود آهي. اهو ضروري هو ته نوڊس تي ياداشت جي استعمال کي بهتر ڪرڻ لاء، ۽ اهو آهي جتي BinaryObject تمام مفيد ثابت ٿيو.
4. نتيجو
Apache Ignite پروجيڪٽ جي دستاويزن جي مبهميت جي باري ۾ پهريون ملامت ظاهر ٿيو منصفانه؛ ٿورڙي 2016 کان تبديل ٿي چڪو آهي. شروعات ڪندڙ لاءِ ويب سائيٽ ۽/يا مخزن جي بنياد تي ڪم ڪندڙ پروٽوٽائپ گڏ ڪرڻ آسان ناهي.
ڪيل ڪم جي نتيجن جي بنياد تي، اهو تاثر هو ته زيرو ڊيپلائيمينٽ ڪم ڪري ٿو، پر صرف سسٽم جي سطح تي. ڪجهه هن طرح: BinaryObject استعمال ڪيو ويندو آهي ريموٽ ڪلستر نوڊس کي سيکارڻ لاءِ ڪسٽم ڪلاس سان ڪم ڪرڻ لاءِ؛ زيرو لڳائڻ - اندروني ميڪانيزم
Apache پاڻ کي Ignite ڪري ٿو ۽ سسٽم جي شين کي سڄي ڪلستر ۾ ورهائي ٿو.
مون کي اميد آهي ته منهنجو تجربو نون Apache Ignite استعمال ڪندڙن لاءِ ڪارآمد ثابت ٿيندو.
جو ذريعو: www.habr.com