ساڳيو ڪم ڪرڻ کان ڪيئن روڪيو

ڇا توهان معمول جي عملن کي بار بار ورجائڻ پسند ڪندا آهيو؟ تنهنڪري مان نه ٿو ڪريان. پر هر دفعي SQL ڪلائنٽ ۾ جڏهن Rostelecom اسٽوريج سان ڪم ڪري رهيو هو، مون کي دستي طور تي ٽيبل جي وچ ۾ سڀني شاملن کي رجسٽر ڪرڻو پوندو هو. ۽ هن حقيقت جي باوجود ته 90٪ ڪيسن ۾ جدولن ۾ شامل ٿيڻ جا شعبا ۽ حالتون درخواست جي درخواست کان هڪجهڙائي رکن ٿيون! اهو لڳي ٿو ته ڪنهن به SQL ڪلائنٽ ۾ خودڪار مڪمل ڪرڻ وارا ڪم آهن، پر اسٽوريج لاء اهو هميشه ڪم نه ڪندو آهي: ڪارڪردگي بهتر ڪرڻ لاء انهن ۾ گهٽ ۾ گهٽ منفرد رڪاوٽ ۽ غير ملڪي ڪي شامل آهن، ۽ ان کان سواء پروگرام کي خبر ناهي ته ڪيئن ادارن سان لاڳاپيل آهن. ٻيو ۽ اهو توهان لاءِ ڇا ڪري سگهي ٿو پيش ڪري.

ساڳيو ڪم ڪرڻ کان ڪيئن روڪيو

انڪار، ڪاوڙ، سوديبازي، ڊپريشن ۽ قبوليت جي ويجهو اچڻ کان پوءِ، مون فيصلو ڪيو - ڇو نه پاڻ کي بليڪ جيڪ سان خودڪار طريقي سان لاڳو ڪرڻ جي ڪوشش ڪئي وڃي ۽ اهو صحيح طريقي سان ڪيو وڃي؟ مان dbeaver ڪلائنٽ استعمال ڪريان ٿو، جاوا ۾ لکيل آھي، اھو ھڪڙو اوپن سورس ڪميونٽي ورزن آھي. ھڪڙو سادو منصوبو پختو آھي:

  1. ماخذ ڪوڊ ۾ ڪلاس ڳولھيو جيڪي خودڪار مڪمل ٿيڻ جا ذميوار آھن
  2. انهن کي خارجي ميٽا ڊيٽا سان ڪم ڪرڻ لاءِ ريڊائريڪٽ ڪريو ۽ اتان کان شامل ٿيڻ بابت معلومات ڪڍو
  3. ؟؟؟؟؟؟
  4. PROFIT

مون پهرين نقطي کي تمام جلدي سمجهي ورتو - مون کي بگ ٽريڪر ۾ هڪ درخواست ملي ته آٽو فل کي ترتيب ڏيڻ لاءِ ۽ لاڳاپيل انجام ڏيڻ دريافت ڪيو SQLCompletionAnalyzer class. مون ڪوڊ کي ڏٺو ۽ اھو اھو آھي جيڪو مون کي گھرجي. باقي اهو آهي ته ان کي ٻيهر لکڻو آهي ته جيئن سڀ ڪجهه ڪم ڪري. مون هڪ آزاد شام جو انتظار ڪيو ۽ عمل جي ذريعي سوچڻ شروع ڪيو. مون json ۾ ٽيبل لنڪ قاعدن (ميٽا ڊيٽا) لکڻ جو فيصلو ڪيو. مون وٽ هن فارميٽ سان ڪم ڪرڻ جو ڪو به عملي تجربو نه هو ۽ موجوده ڪم کي هن غلطي کي درست ڪرڻ جو هڪ موقعو طور ڏٺو ويو.

json سان ڪم ڪرڻ لاءِ مون لائبريري کي استعمال ڪرڻ جو فيصلو ڪيو json-سادو گوگل کان. اهو آهي جتي تعجب شروع ٿيو. جيئن ته اهو نڪتو، dbeaver، هڪ حقيقي ايپليڪيشن جي طور تي، Eclipse پليٽ فارم تي OSGi فريم ورڪ استعمال ڪندي لکيو ويو آهي. تجربيڪار ڊولپرز لاءِ ، اها شيءِ انحصار کي منظم ڪرڻ ۾ آسان بڻائي ٿي ، پر مون لاءِ اهو وڌيڪ اونداهي جادو وانگر هو ، جنهن لاءِ مان واضح طور تي تيار نه هو: هميشه وانگر ، آئون ڪلاسز درآمد ڪريان ٿو جن جي مون کي ضرورت آهي json-سادو لائبريري جي هيڊر ۾. ايڊٽ ٿيل ڪلاس، ان کي pom. xml ۾ بيان ڪريو، جنهن کان پوءِ پروجيڪٽ واضح طور تي عام طور تي گڏ ٿيڻ کان انڪار ڪري ٿو ۽ غلطين سان حادثو ٿئي ٿو.

آخر ۾، مان تعميراتي غلطين کي درست ڪرڻ ۾ ڪامياب ٿيس: مون لائبريري رجسٽر ڪئي pom.xml ۾ نه، پر manifest.mf manifest ۾، جيئن OSGI جي ضرورت هئي، جڏهن ته ان کي درآمد-پيڪيج طور بيان ڪيو ويو. تمام خوبصورت حل ناهي، پر اهو ڪم ڪري ٿو. پوءِ ايندڙ تعجب ظاهر ٿيو. جيڪڏهن توهان Intellij Idea ۾ ترقي ڪري رهيا آهيو، توهان صرف نه ٿا وڃو ۽ پنهنجي پروجيڪٽ کي ايڪليپس پليٽ فارم جي بنياد تي ڊيبگ ڪرڻ شروع ڪري سگهو ٿا: هڪ غير تجربيڪار ڊولپر کي سوال جي مڪمل ٿيڻ کان سواءِ تجزيه نگار کان گهٽ نه ٿيڻ گهرجي. بيور ڊولپر پاڻ بچاء لاء آيا، وڪي ۾ اشارو ڪيو ته سڀني ناچن کي ٽمبرين سان گڏ ڪرڻ جي ضرورت آهي. سڀ کان وڌيڪ ڏکوئيندڙ ڳالهه اها آهي ته انهن سڀني اسڪواٽس کان پوء، پروجيڪٽ کي ڊيبگ ۾ شروع ڪرڻ نه چاهيو json لائبريري سان درآمد-پيڪيج ذريعي ڳنڍيل آهي (ان حقيقت جي باوجود ته اهو اڃا تائين ڪاميابيء سان مڪمل پيداوار ۾ گڏ ڪيو ويو آهي).

ان وقت تائين، مون اڳ ۾ ئي محسوس ڪيو هو ته منهنجي ڪم لاءِ json استعمال ڪرڻ جي تڪليف - آخرڪار، ميٽا ڊيٽا کي دستي طور تي تبديل ڪيو وڃي ها، ۽ xml فارميٽ ان لاء بهتر آهي. xml جي حق ۾ ٻيو دليل JDK ۾ سڀني ضروري طبقن جي موجودگي هئي، جنهن اهو ممڪن ڪيو ته ٻاهرين لائبريري سان وڙهڻ بند ڪرڻ. وڏي خوشي سان، مون سمورو ميٽا ڊيٽا json کان xml ۾ منتقل ڪيو ۽ خود مڪمل منطق کي ايڊٽ ڪرڻ شروع ڪيو.

Metadata مثال

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tableRelations>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_partner</rightTable>
        <joinColumnPair leftColumn="partner_key" rightColumn="partner_key"/>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
    </tableRelation>
    <tableRelation>
        <leftTable>dim_account</leftTable>
        <rightTable>dim_branch</rightTable>
        <joinColumnPair leftColumn="src_id" rightColumn="src_id"/>
        <joinColumnPair leftColumn="branch_key" rightColumn="branch_key"/>
    </tableRelation>
</tableRelations>

نتيجي طور I تبديليون ڪيون SQLUtils ۽ SQLCompletionAnalyzer طبقن ۾. خيال هي آهي: جيڪڏهن پروگرام بنيادي منطق کي استعمال ڪندي مناسب خودڪار مڪمل تجويزون ڳولڻ جي قابل نه هو، پوء اهو خارجي xml فائل استعمال ڪندي ممڪن شامل ٿيڻ جي موجودگي جي جانچ ڪري ٿو. فائل پاڻ کي جدولن جو جوڙو ذخيرو ڪري ٿو جيڪي فيلڊ کي ظاهر ڪن ٿيون جن جي ذريعي انهن جدولن کي ڳنڍڻ جي ضرورت آهي. ريڪارڊز eff_dttm ۽ exp_dttm جي فني اعتبار جي تاريخن تي پابنديون ۽ منطقي حذف ٿيڻ واري پرچم deleted_ind ڊفالٽ طور مقرر ٿيل آھن.

جڏهن ڪوڊ ۾ تبديليون ڪيون ويون، سوال پيدا ٿيو - ڪير ميٽا ڊيٽا سان فائل ڀريندو؟ مخزن ۾ تمام گهڻا ادارا آهن، اهو قيمتي آهي ته سڀئي ڪنيڪشن پاڻ کي رجسٽر ڪرڻ. نتيجي طور، مون فيصلو ڪيو ته اهو ڪم منهنجي ساٿي تجزيه نگارن کي سونپيو وڃي. مون پوسٽ ڪيو ميٽا ڊيٽا فائل svn ۾، جتان پروگرام سان مقامي ڊاريڪٽري ۾ چيڪ آئوٽ ڪيو ويندو. اصول هي آهي: ڇا هڪ نئون ادارو مخزن ۾ ظاهر ٿيو آهي؟ هڪ تجزيه نگار فائل ۾ ممڪن طور تي شامل ٿيڻ ۾ داخل ٿئي ٿو، تبديلين کي انجام ڏئي ٿو، باقي پاڻ کي چيڪ ڪريو ۽ ڪم ڪندڙ خودڪار مڪمل ٿيڻ جو لطف اندوز ڪريو: ڪميونٽي، علم جي جمع ۽ اهو سڀ ڪجهه. ساٿين لاءِ پروگرام استعمال ڪرڻ تي هڪ ورڪشاپ ڪيو، هڪ مضمون لکيو Confluence - هاڻي ڪمپني وٽ هڪ وڌيڪ آسان اوزار آهي.

ھن خصوصيت تي ڪم ڪندي مون کي سمجھايو ته اوپن سورس منصوبن سان ٽڪرائڻ کان ڊڄڻ جي ڪا ضرورت نه آھي - ضابطي جي طور تي، انھن وٽ ھڪڙو واضح فن تعمير آھي، ۽ جيتوڻيڪ ٻوليء جي بنيادي ڄاڻ تجربن لاء ڪافي آھي. ۽ هڪ خاص مقدار سان، توهان نفرت واري معمول جي عملن کان به نجات حاصل ڪري سگهندا، پنهنجو پاڻ کي نئين تجربن لاءِ وقت بچائيندا.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو