స్టోరాకిల్ - వికేంద్రీకృత ఫైల్ నిల్వ

స్టోరాకిల్ - వికేంద్రీకృత ఫైల్ నిల్వ

నేను ప్రారంభించడానికి ముందు, నేను తప్పక బయలుదేరాలి మునుపటి కథనానికి లింక్తద్వారా మనం సరిగ్గా దేని గురించి మాట్లాడుతున్నామో స్పష్టంగా తెలుస్తుంది.

ఈ వ్యాసంలో నేను ఫైల్‌లను నిల్వ చేయడానికి బాధ్యత వహించే పొరను మరియు దానిని ఎవరైనా ఎలా ఉపయోగించవచ్చో చూడాలనుకుంటున్నాను. స్టోరాకిల్ ఒక స్వతంత్ర లైబ్రరీ, సంగీతంతో ప్రత్యక్ష సంబంధం లేదు. మీరు ఏదైనా ఫైల్‌ల నిల్వను నిర్వహించవచ్చు.

మునుపటి వ్యాసంలో, నేను కొద్దిగా "బారెల్ను చుట్టాను" 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 స్థాయిల గూడు ఉంటుంది. ఫైల్‌లు రెండవ-స్థాయి ఫోల్డర్‌లలో నిల్వ చేయబడతాయి. అంటే, 1 మిలియన్ ఉంటే. అటువంటి ప్రతి ఫోల్డర్‌లో దాదాపు 62500 ఫైల్‌లు ఉంటాయి (1000000 / sqrt(256)).

ఫోల్డర్ పేర్లు ఫైల్ హాష్ నుండి ఏర్పడతాయి, తద్వారా మీకు హాష్ తెలిస్తే దాన్ని త్వరగా యాక్సెస్ చేయవచ్చు.

ఈ నిర్మాణం పెద్ద సంఖ్యలో విభిన్న నిల్వ అవసరాల ఆధారంగా ఎంపిక చేయబడింది: బలహీనమైన ఫైల్ సిస్టమ్‌లకు మద్దతు, ఒకే ఫోల్డర్‌లో అనేక ఫైల్‌లను కలిగి ఉండటం అవాంఛనీయమైనది కాదు, అవసరమైతే అన్ని ఫోల్డర్‌ల శీఘ్ర ప్రయాణం మొదలైనవి. ఒకరకమైన బంగారు అర్థం.

కాషింగ్

ఫైల్‌లను జోడించేటప్పుడు, అలాగే వాటిని స్వీకరించేటప్పుడు, ఫైల్‌లకు లింక్‌లు కాష్‌కి వ్రాయబడతాయి.
దీనికి ధన్యవాదాలు, చాలా తరచుగా ఫైల్ శోధనలో మొత్తం నెట్‌వర్క్‌ను దాటాల్సిన అవసరం లేదు. ఇది లింక్‌ల రసీదుని వేగవంతం చేస్తుంది మరియు నెట్‌వర్క్‌పై లోడ్‌ను తగ్గిస్తుంది. http హెడర్ల ద్వారా కూడా కాషింగ్ జరుగుతుంది.

ఐసోమోర్ఫీ

క్లయింట్ జావాస్క్రిప్ట్‌లో వ్రాయబడింది మరియు ఐసోమోర్ఫిక్, ఇది బ్రౌజర్ నుండి నేరుగా ఉపయోగించబడుతుంది. 
మీరు ఫైల్‌ను అప్‌లోడ్ చేయవచ్చు https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js స్క్రిప్ట్ మరియు యాక్సెస్‌గా window.ClientStoracle లేదా బిల్డ్ సిస్టమ్ ద్వారా దిగుమతి, మొదలైనవి.

వాయిదా వేసిన లింక్‌లు

ఒక ఆసక్తికరమైన లక్షణం కూడా "వాయిదాపడిన సూచన". ఇది ఇక్కడ మరియు ఇప్పుడు సమకాలీకరించబడే ఫైల్‌కి లింక్, ఇది ఇప్పటికే నిల్వలో కనుగొనబడినప్పుడు ఫైల్ పైకి లాగబడుతుంది. ఉదాహరణకు, మీరు సైట్‌లో కొన్ని చిత్రాలను చూపించాల్సిన అవసరం వచ్చినప్పుడు ఇది చాలా సౌకర్యవంతంగా ఉంటుంది. మేము srcలో వాయిదా వేసిన లింక్‌ని ఉంచాము మరియు అంతే. మీరు చాలా కేసులతో రావచ్చు.

క్లయింట్ API

  • అసమకాలీక Client.prototype.storeFile() - ఫైల్‌ను సేవ్ చేస్తోంది
  • అసమకాలీక Client.prototype.getFileLink() — ఫైల్‌కు ప్రత్యక్ష లింక్‌ను పొందడం
  • అసమకాలీక Client.prototype.getFileLinks() — ఫైల్ ఉన్న అన్ని నోడ్‌ల నుండి నేరుగా లింక్‌ల జాబితాను పొందడం
  • అసమకాలీక Client.prototype.getFileToBuffer() — ఫైల్‌ను బఫర్‌లోకి పొందండి
  • అసమకాలీక Client.prototype.getFileToPath() — ఫైల్ సిస్టమ్‌లోకి ఫైల్‌ను పొందండి
  • అసమకాలీక Client.prototype.getFileToBlob() — ఫైల్‌ను బ్లాబ్‌లో పొందండి (బ్రౌజర్ వెర్షన్ కోసం)
  • అసమకాలీక Client.prototype.removeFile() - ఫైల్‌ను తొలగించండి
  • Client.prototype.createRequestedFileLink() - వాయిదా వేసిన లింక్‌ను సృష్టించండి

ఫైల్‌లను మరొక సర్వర్‌కు ఎగుమతి చేయండి

ఫైల్‌లను మరొక నోడ్‌కి బదిలీ చేయడానికి, మీరు వీటిని చేయవచ్చు:

  • సెట్టింగ్‌లతో పాటు మొత్తం స్టోరేజ్ ఫోల్డర్‌ను కాపీ చేయండి. (ఇది భవిష్యత్తులో పని చేయకపోవచ్చు)
  • ఫైల్‌లతో ఫోల్డర్‌ను మాత్రమే కాపీ చేయండి. కానీ, ఈ సందర్భంలో, మీరు ఒకసారి ఫంక్షన్‌ను అమలు చేయాలి node.normalizeFilesInfo()మొత్తం డేటాను తిరిగి లెక్కించడానికి మరియు డేటాబేస్లో నమోదు చేయడానికి.
  • ఫంక్షన్ ఉపయోగించండి node.exportFiles()ఇది ఫైల్‌లను కాపీ చేయడం ప్రారంభిస్తుంది.

ప్రాథమిక నోడ్ సెట్టింగులు
నిల్వ నోడ్‌ను ప్రారంభించినప్పుడు, మీరు అవసరమైన అన్ని సెట్టింగ్‌లను పేర్కొనవచ్చు.
నేను చాలా ప్రాథమికమైన వాటిని వివరిస్తాను, మిగిలినవి Githubలో చూడవచ్చు.

  • store.dataSize — ఫైళ్లతో ఫోల్డర్ పరిమాణం
  • store.tempSize — తాత్కాలిక ఫోల్డర్ పరిమాణం
  • store.autoCleanSize - ఉంచవలసిన కనీస నిల్వ పరిమాణం. మీరు ఈ పరామితిని నిర్దేశిస్తే, ఖాళీ ఖాళీ అవ్వడం ప్రారంభించిన వెంటనే, కనీసం ఉపయోగించిన ఫైల్‌లు తొలగించబడతాయి.
  • file.maxSize - గరిష్ట ఫైల్ పరిమాణం
  • file.minSize - కనీస ఫైల్ పరిమాణం
  • file.preferredDuplicates — నెట్‌వర్క్‌లో ఫైల్ డూప్లికేట్‌ల యొక్క ప్రాధాన్య సంఖ్య
  • file.mimeWhitelist - చెల్లుబాటు అయ్యే ఫైల్ రకాలు
  • file.mimeBlacklist - చెల్లని ఫైల్ రకాలు
  • file.extWhitelist - చెల్లుబాటు అయ్యే ఫైల్ పొడిగింపులు
  • file.extBlacklist - చెల్లని ఫైల్ పొడిగింపులు
  • file.linkCache - వివిధ లింక్ కాషింగ్ సెట్టింగ్‌లు

కొలతలకు సంబంధించిన దాదాపు అన్ని పారామితులను సంపూర్ణ మరియు సాపేక్ష విలువలు రెండింటిలోనూ నమోదు చేయవచ్చు.

కమాండ్ లైన్ ద్వారా పని చేస్తోంది
కమాండ్ లైన్ ద్వారా లైబ్రరీని ఉపయోగించవచ్చు. దీన్ని చేయడానికి మీరు దీన్ని ప్రపంచవ్యాప్తంగా ఇన్‌స్టాల్ చేయాలి: npm i -g స్టోరాకిల్. దీని తరువాత, మీరు నోడ్ ఉన్న ప్రాజెక్ట్ డైరెక్టరీ నుండి అవసరమైన చర్యలను ప్రారంభించవచ్చు. ఉదాహరణకి, storacle -a storeFile -f ./file.txt -c ./config.jsఫైల్‌ను జోడించడానికి. అన్ని చర్యలను కనుగొనవచ్చు https://github.com/ortexx/storacle/blob/master/bin/actions.js

మీకు ఇది ఎందుకు అవసరం కావచ్చు?

  • మీరు అనుకూలమైన పద్ధతులను ఉపయోగించి ఫైల్‌లను నిల్వ చేయడానికి మరియు పని చేయడానికి ప్లాన్ చేసే ఒక రకమైన వికేంద్రీకృత ప్రాజెక్ట్‌ను సృష్టించాలనుకుంటే. ఉదాహరణకు, వ్యాసం ప్రారంభంలో లింక్‌లో వివరించిన మ్యూజిక్ ప్రాజెక్ట్ ఉపయోగిస్తుంది స్టోరేకిల్.
  • మీరు ఏదైనా ఇతర ప్రాజెక్ట్‌లలో పని చేస్తే, మీరు ఫైల్‌లను పంపిణీ పద్ధతిలో నిల్వ చేయాలి. మీరు మీ క్లోజ్డ్ నెట్‌వర్క్‌ను సులభంగా నిర్మించవచ్చు, నోడ్‌లను సరళంగా కాన్ఫిగర్ చేయవచ్చు మరియు అవసరమైనప్పుడు కొత్త వాటిని జోడించవచ్చు.
  • మీరు మీ వెబ్‌సైట్ ఫైల్‌లను ఎక్కడైనా నిల్వ చేయవలసి వస్తే మరియు ప్రతిదీ మీరే వ్రాయడం మీకు చాలా ఎక్కువ. బహుశా ఈ లైబ్రరీ మీ విషయంలో ఇతరులకన్నా బాగా సరిపోతుంది.
  • మీరు ఫైల్‌లతో పని చేసే ప్రాజెక్ట్‌ను కలిగి ఉంటే, కానీ బ్రౌజర్ నుండి అన్ని మానిప్యులేషన్‌లను చేయాలనుకుంటే. మీరు సర్వర్ కోడ్ రాయడాన్ని నివారించవచ్చు.

నా పరిచయాలు:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి