I-Storacle - isitoreji sefayela esihlukaniselwe indawo

I-Storacle - isitoreji sefayela esihlukaniselwe indawo

Ngaphambi kokuba ngiqale, kufanele ngihambe isixhumanisi sendatshana edluleukuze kucace kahle ukuthi sikhuluma ngani.

Kulesi sihloko ngithanda ukubheka ungqimba olunesibopho sokugcina amafayela, nokuthi lungasetshenziswa kanjani yinoma ubani. I-Storacle yilabhulali ezimele, akukho ukuxhumana okuqondile nomculo. Ungakwazi ukuhlela ukugcinwa kwanoma yimaphi amafayela.

Esihlokweni esandulele, "ngigoqe umgqomo" kancane ipfs, kodwa lokhu kwenzeka ngokuqondile kumongo wenkinga engangiyixazulula. Sekukonke, ngicabanga ukuthi le phrojekthi ipholile. Ngikhetha ikhono lokudala amanethiwekhi ahlukene emisebenzi eyahlukene. Lokhu kukuvumela ukuthi uhlele kangcono isakhiwo futhi unciphise umthwalo kumanodi ngamanye kanye nenethiwekhi iyonke. Ngisho nangaphakathi kohlaka lwephrojekthi eyodwa, uma kunesidingo, ungakwazi ukuhlukanisa inethiwekhi ibe yizicucu ngokusho kwezinye izindlela, ukunciphisa umthwalo jikelele.

Ngakho-ke i-storak isebenzisa indlela asakazeka ukuhlela inethiwekhi. Izici Eziyinhloko:

  • Amafayela angangezwa endaweni yokugcina nganoma iyiphi i-node.
  • Amafayela alondolozwa ngokuphelele, hhayi kumabhulokhi.
  • Ifayela ngalinye line-hashi yalo yokuqukethwe ehlukile ukuze kuqhutshekwe nomsebenzi ngayo.
  • Amafayela angaphindwa kabili ukuze athembeke kakhulu
  • Inani lamafayela endaweni eyodwa linqunyelwe uhlelo lwefayela kuphela (kukhona okuhlukile, okuningi kulokho okungezansi)
  • Inombolo yamafayela kunethiwekhi inqunyelwe amandla asakazekayo ngokuya ngenani lama-node avumelekile kunethiwekhi, okuyinto enguqulweni yesibili ezokwazi ukusebenza ngenani elingapheli lama-node (ngaphezulu kulokhu kwesinye isihloko)

Isibonelo esilula sokuthi lokhu ngokuvamile kusebenza kanjani ohlelweni:

Iseva:

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);
  }
})();

Iklayenti:

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);
  }
})();

Ngaphakathi kokubuka

Akukho lutho oluhle ngaphansi kwe-hood. Ulwazi olumayelana nenani lamafayela, usayizi wawo ophelele namanye amaphuzu agcinwa kusizindalwazi senkumbulo futhi abuyekezwa lapho amafayela esuswa futhi engezwa, ngakho asikho isidingo sokufinyelela njalo ohlelweni lwefayela. Okuhlukile wukuvumela umqoqi kadoti lapho udinga ukusabalalisa amafayela lapho usayizi othile wesitoreji ufinyelelwe, futhi ungavimbeli ukwengeza amasha. Kulesi simo, kufanele udlule isitoreji, futhi ukusebenza nenani elikhulu lamafayela (> ithi isigidi) kungaholela emithwalweni ebalulekile. Futhi kungcono ukugcina amafayela ambalwa futhi usebenzise ama-node amaningi. Uma "i-cleaner" ikhutshaziwe, ayikho inkinga enjalo.

Isitoreji sefayela siqukethe amafolda angu-256 kanye namazinga angu-2 okuzalela. Amafayela agcinwa kumafolda ezinga lesibili. Okusho ukuthi, uma kukhona 1 million. Kuzoba namafayela angaba ngu-62500 kufolda ngayinye enjalo (1000000 / sqrt(256)).

Amagama efolda akhiwa kusuka ku-hashi yefayela ukuze ukwazi ukuyithola ngokushesha uma wazi i-hashi.

Lesi sakhiwo sikhethwe ngokusekelwe kwinani elikhulu lezidingo ezahlukene zesitoreji: ukusekelwa kwezinhlelo zefayela ezibuthakathaka, lapho kungafiseleki khona ukuba namafayela amaningi kufolda eyodwa, ukunqamula okusheshayo kwawo wonke amafolda uma kunesidingo, njll. Uhlobo oluthile lwencazelo yegolide.

Ukulondoloza inqolobane

Lapho wengeza amafayela, kanye nalapho uwathola, izixhumanisi zamafayili zibhalwa kunqolobane.
Ngenxa yalokhu, kaningi asikho isidingo sokunqamula inethiwekhi yonke ufuna ifayela. Lokhu kusheshisa ukutholwa kwezixhumanisi futhi kunciphisa umthwalo kunethiwekhi. Ukugcinwa kunqolobane nakho kwenzeka ngezihloko ze-http.

I-isomorphy

ΠšΠ»ΠΈΠ΅Π½Ρ‚ написан Π½Π° javascript ΠΈ ΠΈΠ·ΠΎΠΌΠΎΡ€Ρ„Π΅Π½, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прямо ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. 
Ungakwazi ukulayisha ifayela https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js njengombhalo nokufinyelela iwindi.ClientStoracle noma ungenise ngohlelo lokwakha, njll.

Izixhumanisi ezihlehlisiwe

Isici esithokozisayo siphinde "ireferensi ehlehlisiwe". Lesi isixhumanisi sefayela elingatholakala ngokuvumelanisa, lapha futhi manje, futhi ifayela lizodonswa lapho selivele litholakele kusitoreji. Lokhu kulula kakhulu uma, ngokwesibonelo, udinga ukukhombisa ezinye izithombe kusayithi. Sisanda kufaka isixhumanisi esihlehlisiwe ku-src futhi yilokho. Ungaqhamuka namacala amaningi.

I-Client API

  • i-async I-Client.prototype.storeFile() - ukulondoloza ifayela
  • i-async Client.prototype.getFileLink() - ukuthola isixhumanisi esiqondile sefayela
  • i-async Client.prototype.getFileLinks() - ukuthola uhlu lwezixhumanisi eziqondile zefayela kuzo zonke izindawo lapho likhona
  • i-async Client.prototype.getFileToBuffer() - faka ifayela ku-buffer
  • i-async Client.prototype.getFileToPath() - thola ifayela ohlelweni lwefayela
  • i-async Client.prototype.getFileToBlob() - thola ifayela ku-blob (yenguqulo yesiphequluli)
  • i-async Client.prototype.removeFile() - susa ifayela
  • Client.prototype.createRequestedFileLink() - dala isixhumanisi esihlehlisiwe

Khipha amafayela kwenye iseva

Ukuze udlulisele amafayela kwenye indawo, ungakwazi:

  • Vele ukopishe yonke ifolda yesitoreji kanye nezilungiselelo. (lokhu kungase kungasebenzi esikhathini esizayo)
  • Kopisha kuphela ifolda enamafayela. Kodwa, kulesi simo, uzodinga ukwenza umsebenzi kanye node.normalizeFilesInfo()ukubala kabusha yonke idatha futhi uyifake ku-database.
  • sebenzisa umsebenzi node.exportFiles()ezoqala ukukopisha amafayela.

Izilungiselelo zenodi eziyisisekelo
Lapho uqala i-node yokugcina, ungacacisa zonke izilungiselelo ezidingekayo.
Ngizochaza eziyisisekelo kakhulu, ezinye zingatholakala ku-Github.

  • storage.dataUsayizi β€” usayizi wefolda enamafayela
  • storage.tempSize β€” usayizi wefolda yesikhashana
  • storage.autoCleanSize β€” ubuncane bosayizi wesitoreji okudingeka ubanjwe. Uma ucacisa le pharamitha, khona-ke lapho nje isikhala siqala ukuphela, amafayela asetshenziswe kancane azosuswa.
  • file.maxSize - usayizi wefayela omkhulu
  • file.minSize - ubuncane bosayizi wefayela
  • file.preferredIzimpinda - inombolo encanyelwayo yamafayela aphindeke kabili kunethiwekhi
  • file.mimeWhitelist - Izinhlobo zamafayela avumelekile
  • ifayela.mimeBlacklist - izinhlobo zamafayela ezingavumelekile
  • ifayela.extWhitelist - Izandiso zefayela ezivumelekile
  • ifayela.extBlacklist - Izandiso zefayela ezingavumelekile
  • file.linkCache - izilungiselelo ezihlukahlukene ze-caching yezixhumanisi

Cishe wonke amapharamitha ahlobene nobukhulu angafakwa kukho kokubili amanani aphelele nahlobene.

Ukusebenza ngomugqa womyalo
Umtapo wolwazi ungasetshenziswa ngomugqa womyalo. Ukuze wenze lokhu udinga ukuyifaka emhlabeni jikelele: npm i -g isitoreji. Ngemuva kwalokhu, ungaqala izenzo ezidingekayo kusuka kunkomba yephrojekthi lapho i-node ikhona. Ngokwesibonelo, isitoreji -a storeIfayela -f ./file.txt -c ./config.jsukwengeza ifayela. Zonke izenzo zingatholakala ku https://github.com/ortexx/storacle/blob/master/bin/actions.js

Kungani ungase ukudinge lokhu?

  • Uma ufuna ukwakha uhlobo oluthile lwephrojekthi ehlukaniselwe indawo ohlela ukuyigcina futhi usebenze ngamafayela usebenzisa izindlela ezilula. Isibonelo, iphrojekthi yomculo echazwe kusixhumanisi ekuqaleni kwesihloko isebenzisa isitoreji.
  • Uma usebenza kunoma imaphi amanye amaphrojekthi lapho udinga ukugcina amafayela ngendlela esabalalisiwe. Ungakwazi ukwakha kalula inethiwekhi yakho evaliwe, ulungise amanodi kalula futhi wengeze amasha lapho kudingeka.
  • Uma nje udinga ukugcina amafayela akho ewebhusayithi ndawana thize futhi kungaphezu kwamandla akho ukuthi ubhale yonke into ngokwakho. Mhlawumbe lo mtapo wolwazi ukufanelekela kangcono kuneminye endabeni yakho.
  • Uma unephrojekthi osebenza kuyo ngamafayela, kodwa ufuna ukwenza konke ukukhohlisa esipheqululini. Ungagwema ukubhala ikhodi yeseva.

Engixhumana nabo:

Source: www.habr.com

Engeza amazwana