اسٽوريج - غير مرڪزي فائل اسٽوريج

اسٽوريج - غير مرڪزي فائل اسٽوريج

ان کان اڳ جو مان شروع ڪريان، مون کي وڃڻ گھرجي پوئين مضمون سان ڳنڍيوانهي ڪري اهو واضح ٿئي ٿو ته اسان ڇا بابت ڳالهائي رهيا آهيون.

هن آرٽيڪل ۾ آئون انهي پرت کي ڏسڻ چاهيندس جيڪا فائلن کي محفوظ ڪرڻ جي ذميوار آهي، ۽ اهو ڪيئن استعمال ڪري سگهجي ٿو هر ڪنهن جي طرفان. اسٽوريڪل هڪ اسٽينڊل لائبريري آهيموسيقي سان ڪو به سڌو واسطو ناهي. توهان ڪنهن به فائلن جي اسٽوريج کي منظم ڪري سگهو ٿا.

پوئين مضمون ۾، مون "بيرل رول ڪيو" ٿورڙي تي ipfs، پر اهو واقعي ان مسئلي جي حوالي سان ٿيو جنهن کي مان حل ڪري رهيو آهيان. مجموعي طور تي، مان سمجهان ٿو ته هي منصوبو سٺو آهي. مان صرف مختلف ڪمن لاءِ مختلف نيٽ ورڪ ٺاهڻ جي صلاحيت کي ترجيح ڏيان ٿو. هي توهان کي بهتر نموني منظم ڪرڻ جي اجازت ڏئي ٿو ۽ انفرادي نوڊس ۽ مجموعي طور تي نيٽ ورڪ تي لوڊ گھٽائي ٿو. جيتوڻيڪ هڪ منصوبي جي فريم ورڪ جي اندر، جيڪڏهن ضروري هجي ته، توهان نيٽ ورڪ کي ڪجهه معيارن جي مطابق ٽڪر ۾ ورهائي سگهو ٿا، مجموعي لوڊ کي گھٽائڻ.

تنهن ڪري اسٽوريج ميڪانيزم کي استعمال ڪري ٿو پکيڙڻ نيٽ ورڪ کي منظم ڪرڻ لاء. اهم خاصيتون:

  • فائلون ڪنهن به نوڊ ذريعي مخزن ۾ شامل ڪري سگھجن ٿيون.
  • فائلون مڪمل طور تي محفوظ ٿيل آھن، بلاڪ ۾ نه.
  • هر فائل ان سان گڏ وڌيڪ ڪم ڪرڻ لاءِ ان جو پنهنجو منفرد مواد هيش آهي.
  • فائلون وڌيڪ اعتبار لاء نقل ڪري سگھجن ٿيون
  • ھڪڙي نوڊ تي فائلن جو تعداد صرف فائل سسٽم طرفان محدود آھي (اتي ھڪڙو استثنا آھي، ھيٺ ڏنل ان بابت وڌيڪ)
  • نيٽ ورڪ ۾ فائلن جو تعداد نيٽ ورڪ ۾ صحيح نوڊس جي تعداد جي مطابق پکڙيل قابليت جي لحاظ کان محدود آهي، جيڪو ٻئي ورزن ۾ لامحدود نوڊس سان ڪم ڪرڻ جي قابل هوندو (وڌيڪ ٻئي مضمون ۾ ان تي)

هڪ سادي مثال اهو ڪيئن عام طور تي پروگرام مان ڪم ڪري ٿو:

سرور:

const  Node = require('storacle').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost'
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

ڪلائنٽ:

const  Client = require('storacle').Client;

(async () => {
  try {
    const client = new  Client({
      address: 'localhost:4000'
    });
    await client.init();
    const hash = await client.storeFile('./my-file');
    const link = await client.getFileLink(hash); 
    await client.removeFile(hash);
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

اندريون ڏيک

هود جي هيٺان ڪجهه به پسند نه آهي. فائلن جي تعداد بابت معلومات، انهن جي ڪل سائيز ۽ ٻيا نقطا هڪ ان-ميموري ڊيٽابيس ۾ محفوظ ڪيا ويندا آهن ۽ اپڊيٽ ڪيو ويندو آهي جڏهن فائلون ڊاهي ۽ شامل ڪيون وينديون آهن، تنهنڪري فائل سسٽم کي بار بار رسائي جي ضرورت ناهي. هڪ استثنا ردي جي ڪليڪٽر کي فعال ڪرڻ آهي جڏهن توهان کي فائلن کي گردش ڪرڻ جي ضرورت آهي جڏهن هڪ خاص اسٽوريج سائيز تائين پهچي وڃي، ۽ نئين کي شامل ڪرڻ کان منع ناهي. انهي حالت ۾، توهان کي اسٽوريج کي بائي پاس ڪرڻو پوندو، ۽ فائلن جي وڏي تعداد سان ڪم ڪرڻ (> هڪ ملين چئو) اهم لوڊ ٿي سگهي ٿو. ۽ اهو بهتر آهي ته گهٽ فائلن کي ذخيرو ڪرڻ ۽ وڌيڪ نوڊس کي هلائڻ. جيڪڏهن "صاف ڪندڙ" معذور آهي، ته پوء ڪو مسئلو ناهي.

فائل اسٽوريج تي مشتمل آهي 256 فولڊر ۽ 2 سطحن جي nesting. فائلون سيڪنڊ-سطح فولڊر ۾ ذخيرو ٿيل آهن. اهو آهي، جيڪڏهن 1 ملين آهن. هر اهڙي فولڊر ۾ اٽڪل 62500 فائلون هونديون (1000000/sqrt (256)).

فولڊر جا نالا فائل هيش مان ٺاهيا ويا آهن ته جيئن توهان جلدي ان تائين رسائي ڪري سگهو ٿا جيڪڏهن توهان هيش کي ڄاڻو ٿا.

هي ڍانچي وڏي تعداد ۾ مختلف اسٽوريج گهرجن جي بنياد تي چونڊيو ويو آهي: ڪمزور فائل سسٽم لاءِ سپورٽ، جتي هڪ فولڊر ۾ گهڻيون فائلون رکڻ ضروري نه آهي، جيڪڏهن ضروري هجي ته سڀني فولڊرن جي تڪڙي ٽرورسل وغيره. سونهن جو ڪجهه قسم.

ڪيشنگ

جڏهن فائلن کي شامل ڪيو وڃي، انهي سان گڏ جڏهن انهن کي وصول ڪيو وڃي، فائلن جي لنڪ ڪيش ڏانهن لکيل آهن.
انهي جي مهرباني، اڪثر ڪري فائل جي ڳولا ۾ پوري نيٽ ورڪ کي پار ڪرڻ جي ڪا ضرورت ناهي. هي لنڪ جي رسيد کي تيز ڪري ٿو ۽ نيٽ ورڪ تي لوڊ گھٽائي ٿو. ڪيشنگ پڻ http هيڊر ذريعي ٿئي ٿي.

Isomorphy

ڪلائنٽ جاوا اسڪرپٽ ۾ لکيل آهي ۽ isomorphic آهي، اهو سڌو سنئون برائوزر کان استعمال ڪري سگهجي ٿو. 
توھان فائل اپلوڊ ڪري سگھو ٿا https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js اسڪرپٽ ۽ رسائي جي طور تي window.ClientStoracle يا بلڊ سسٽم ذريعي درآمد ڪريو، وغيره.

ملتوي ٿيل لنڪس

هڪ دلچسپ خصوصيت پڻ آهي "موڪليو حوالو". ھي ھڪڙي فائل جي ھڪڙي لنڪ آھي جيڪا ھتي ۽ ھاڻي هم وقت حاصل ڪري سگھجي ٿي، ۽ فائل کي ڇڪيو ويندو جڏھن اھو اڳ ۾ ئي اسٽوريج ۾ مليو آھي. اهو تمام آسان آهي جڏهن، مثال طور، توهان کي سائيٽ تي ڪجهه تصويرون ڏيکارڻ جي ضرورت آهي. اسان صرف src ۾ ملتوي ٿيل لنڪ رکيا ۽ بس. توهان ڪيترن ئي ڪيسن سان اچي سگهو ٿا.

ڪلائنٽ API

  • async Client.prototype.storeFile() - فائل محفوظ ڪرڻ
  • async Client.prototype.getFileLink() - فائل ڏانهن سڌو لنڪ حاصل ڪرڻ
  • async Client.prototype.getFileLinks() - سڀني نوڊس مان فائل جي سڌي لنڪ جي لسٽ حاصل ڪرڻ جتي اهو موجود آهي
  • async Client.prototype.getFileToBuffer() - بفر ۾ فائل حاصل ڪريو
  • async Client.prototype.getFileToPath() - فائل سسٽم ۾ فائل حاصل ڪريو
  • async Client.prototype.getFileToBlob() - فائل حاصل ڪريو بلب ۾ (براؤزر ورزن لاءِ)
  • async Client.prototype.removeFile() - فائل کي ختم ڪريو
  • Client.prototype.createRequestedFileLink() - هڪ ڊفر ٿيل لنڪ ٺاهيو

ٻئي سرور ڏانهن فائلون برآمد ڪريو

فائلن کي ٻئي نوڊ ڏانھن منتقل ڪرڻ لاء، توھان ڪري سگھو ٿا:

  • بس سيٽنگون سان گڏ سڄي اسٽوريج فولڊر کي نقل ڪريو. (اهو مستقبل ۾ ڪم نه ڪري سگهي ٿو)
  • صرف فائلن سان فولڊر کي نقل ڪريو. پر، هن حالت ۾، توهان کي هڪ ڀيرو فنڪشن کي هلائڻ جي ضرورت پوندي node.normalizeFilesInfo()سڀني ڊيٽا کي ٻيهر ڳڻڻ ۽ ان کي ڊيٽابيس ۾ داخل ڪرڻ لاء.
  • فنڪشن استعمال ڪريو node.exportFiles()جيڪو فائلن کي نقل ڪرڻ شروع ڪندو.

بنيادي نوڊ سيٽنگون
جڏهن اسٽوريج نوڊ کي شروع ڪندي، توهان تمام ضروري سيٽنگون بيان ڪري سگهو ٿا.
مان سڀ کان وڌيڪ بنيادي بيان ڪندس، باقي Github تي ملي سگھن ٿا.

  • اسٽوريج.ڊيٽا سائز - فائلن سان فولڊر جي سائيز
  • اسٽوريج.temp سائز - عارضي فولڊر سائيز
  • store.autoCleanSize - گھٽ ۾ گھٽ اسٽوريج سائيز جيڪا رکڻ جي ضرورت آھي. جيڪڏهن توهان هن پيٽرولر جي وضاحت ڪريو ٿا، ته جيئن ئي جاء ختم ٿيڻ شروع ٿئي ٿي، گهٽ ۾ گهٽ استعمال ٿيل فائلون ختم ٿي وينديون.
  • file.maxSize - وڌ ۾ وڌ فائل سائيز
  • file.minSize - گھٽ ۾ گھٽ فائل سائيز
  • file.preferredDuplicates - نيٽ ورڪ تي فائل نقلن جو ترجيح نمبر
  • file.mimeWhitelist - صحيح فائل جا قسم
  • file.mimeBlacklist - غلط فائل جا قسم
  • file.extWhitelist - صحيح فائل ايڪسٽينشن
  • file.extBlacklist - غلط فائل ايڪسٽينشن
  • file.linkCache - مختلف لنڪ ڪيشنگ سيٽنگون

طول و عرض سان لاڳاپيل تقريبن سڀئي پيرا ميٽرز ٻنهي مطلق ۽ لاڳاپو قدر ۾ داخل ٿي سگهن ٿا.

ڪمانڊ لائن ذريعي ڪم
لائبريري ڪمانڊ لائن ذريعي استعمال ڪري سگھجي ٿو. هن کي ڪرڻ لاءِ توهان کي ان کي عالمي سطح تي انسٽال ڪرڻ جي ضرورت آهي: npm i -g اسٽوريج. ان کان پوء، توھان شروع ڪري سگھو ٿا ضروري ڪارناما پروجيڪٽ ڊاريڪٽري مان جتي نوڊ آھي. مثال طور، اسٽوريج - هڪ اسٽور فائل -f ./file.txt -c ./config.jsفائل شامل ڪرڻ لاء. سڀني عملن ۾ ڳولي سگھجي ٿو https://github.com/ortexx/storacle/blob/master/bin/actions.js

توھان کي ھن جي ضرورت ڇو ٿي سگھي ٿي؟

  • جيڪڏھن توھان چاھيو ٿا ڪنھن قسم جو غير مرڪزي منصوبو ٺاھيو جنھن ۾ توھان ذخيرو ڪرڻ جو منصوبو ٺاھيو ۽ آسان طريقن سان فائلن سان ڪم ڪريو. مثال طور، مضمون جي شروعات ۾ لنڪ ۾ بيان ڪيل ميوزڪ پروجيڪٽ استعمال ڪري ٿو ذخيرو.
  • جيڪڏهن توهان ڪنهن ٻئي منصوبن تي ڪم ڪري رهيا آهيو جتي توهان کي فائلن کي ذخيرو ڪرڻ جي ضرورت آهي ورهايل انداز ۾. توهان آساني سان پنهنجو بند ٿيل نيٽ ورڪ ٺاهي سگهو ٿا، لچڪدار طريقي سان نوڊس ترتيب ڏئي سگهو ٿا ۽ ضرورت پوڻ تي نوان شامل ڪري سگهو ٿا.
  • جيڪڏهن توهان کي صرف پنهنجي ويب سائيٽ فائلن کي ڪٿي ذخيرو ڪرڻ جي ضرورت آهي ۽ اهو توهان لاءِ تمام گهڻو آهي ته توهان پنهنجو پاڻ سڀ ڪجهه لکو. ٿي سگهي ٿو هي لائبريري توهان جي صورت ۾ ٻين کان بهتر آهي.
  • جيڪڏهن توهان وٽ هڪ پروجيڪٽ آهي جنهن ۾ توهان فائلن سان ڪم ڪري رهيا آهيو، پر توهان چاهيو ٿا ته توهان برائوزر کان سڀ ٺاهه ڪرڻ چاهيو ٿا. توهان سرور ڪوڊ لکڻ کان پاسو ڪري سگهو ٿا.

منهنجا رابطا:

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

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