
Para fillimin, duhet të lë , në mënyrë që të kuptohet se për çfarë është fjala.
Në këtë artikull do të doja të diskutoja për layer-in që merret me ruajtjen e skedarëve dhe mënyrën se si mund të përdoret nga çdo person. , nuk ka lidhje të drejtpërdrejtë me muzikën. Mund të organizoni ruajtjen e çdo skedari.
Në artikullin e mëparshëm, pak "e kritikova" ipfs, por kjo ndodhi në kontekstin e detyrës time. Në përgjithësi, unë e konsideroj këtë projekt të mrekullueshëm. Më pëlqen më shumë mundësia për të krijuar rrjeta të ndryshme për detyra të ndryshme. Kjo lejon një organizim më të mirë të strukturës dhe redukton ngarkesën në nyjat individuale dhe rrjetin si një tërësi. Madje, brenda një projekti të caktuar, mund të ndajmë rrjetin në copa sipas disa kritereve, duke ulur ngarkesën totale.
Pra, storacle përdor mekanizmin për organizimin e rrjetit. Karakteristikat kryesore:
- Skedarët mund të shtohen në ruajtje përmes çdo nyje.
- Skedarët ruhen tërësisht, jo në blloqe.
- Ădo skedar ka njĂ« hash unik sipas pĂ«rmbajtjes pĂ«r punĂ« tĂ« mĂ«tejshme me tĂ«.
- Skedarët mund të dublifikohen për një besueshmëri më të madhe
- Numri i skedarëve në një nyje është i kufizuar vetëm nga sistemi i skedarëve (ka një përjashtim, për të cilin do të flasim më poshtë)
- Numri i skedarëve në rrjet është i kufizuar nga mundësitë e spreadable sipas numrit të nyjeve të pranueshme në rrjet, të cilat në versionin e dytë do të lejojnë punën me një numër të pafund nyjesh (për këtë në një artikull tjetër)
Një shembull i thjeshtë, si funksionon kjo në realitet:
Serveri:
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);
}
})();Klienti:
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);
}
})();Pamja nga brenda
Nën kapak nuk ka asgjë të jashtëzakonshme. Informacioni mbi numrin e skedarëve, madhësinë e tyre totale dhe çështje të tjera ruhet në një bazë të dhënash in-memory dhe përditësohet me fshirjen dhe shtimin e skedarëve, kështu që nuk ka nevojë të afrohemi shpesh te sistemi i skedarëve. Përjashtim është aktivizimi i mbledhësit të plehrave, kur është e nevojshme të qarkullojnë skedarët kur arrihen disa madhësi të ruajtjes, e jo ndaluar shtimin e të rinjve. Në këtë rast, duhet të kalojmë përreth ruajtjes, dhe puna me një numër të madh skedarësh (> një milion themi) mund të sjellë ngarkesa të mëdha. Dhe është më mirë të ruajmë më pak skedarë dhe të aktivizojmë më shumë nyje. Nëse "pastruesi" është i çaktivizuar, atëherë nuk ka këtë problem.
Ruajtja e skedarëve përbëhet nga 256 dosje dhe 2 nivele thellësie. Skedarët ruhen në dosjet e nivelit të dytë. Pra, nëse kemi 1 milion skedarë, në çdo dosje të tillë do të jenë rreth 62500 (1000000 / sqrt(256)).
Emrat e dosjeve formohen nga heshini i skedarit, për t'u qasur shpejt duke e ditur hashin.
Kjo strukturë u zgjodh duke marrë parasysh një numër të madh kërkesash për ruajtjen: mbështetje për sisteme të dobëta dosjesh, ku nuk është e dëshirueshme të kemi shumë skedarë në një dosje, kalim të shpejtë përmes të gjitha dosjeve në nevojë, etj. Një kompromise e artë.
KeĆĄimi
Në momentin e shtimit të skedarëve, si dhe kur i marrim, në cache shkruhen lidhjet për skedarët.
Për shkak të kësaj, shpesh nuk është e nevojshme të kalojmë gjithë rrjetin për të kërkuar skedarin. Kjo përshpejton fitimin e lidhjeve dhe zvogëlon ngarkesën në rrjet. Gjithashtu, caching ndodh përmes titujve http.
Izomorfizmi
Klienti Ă«shtĂ« shkruar nĂ« javascript dhe Ă«shtĂ« izomorfik, mund tĂ« pĂ«rdoret drejtpĂ«rdrejt nga shfletuesi.Â
Mund të ngarkohet skedari si një skenar dhe të qaseni në window.ClientStoracle ose ta importoni përmes sistemit të ndërtimit etj.
Lidhjet e shtyra
Një veçori interesante është "lidhja e shtyrë". Kjo është një lidhje për një skedar, e cila mund të merret në mënyrë sinkrone, këtu dhe tani, ndërsa skedari do të tërhiqet kur të gjendet në ruajtje. Kjo është shumë e përshtatshme, kur, për shembull, duhet të shfaqni disa imazhe në web. Thjesht vendosim lidhjen e shtyrë në src dhe gjithçka është në rregull. Mund të krijoni shumë raste.
Api i klientit
- async Client.prototype.storeFile() â ruajtja e skedarit
- async Client.prototype.getFileLink() â marrja e njĂ« lidhjeje direkte pĂ«r skedarin
- async Client.prototype.getFileLinks() â marrja e njĂ« liste lidhjesh direkte pĂ«r skedarin nga tĂ« gjitha nyjet ku ai ndodhet
- async Client.prototype.getFileToBuffer() â merrni skedarin nĂ« buffer
- async Client.prototype.getFileToPath() â merrni skedarin nĂ« sistemin e skedarĂ«ve
- async Client.prototype.getFileToBlob() â merrni skedarin nĂ« blob (pĂ«r versionin e shfletuesit)
- async Client.prototype.removeFile() â fshij skedarin
- Client.prototype.createRequestedFileLink() â krijoni njĂ« lidhje tĂ« shtyrĂ«
Eksportimi i skedarëve në një server tjetër
Për të transferuar skedarët në një nod të tjetër mund të:
- Thjesht kopjoni tërë folderin e ruajtjes së dhënash së bashku me konfigurimet. (në të ardhmen kjo mund të mos funksionojë)
- Kopjoni vetëm folderin me skedarët. Por, në këtë rast, duhet të ngatërroni njëherë funksionin node.normalizeFilesInfo(), për të ri llogaritur të gjithë të dhënat dhe për t'i futur në bazë.
- Përdorni funksionin node.exportFiles(), i cili do të fillojë kopjimin e skedarëve.
Cilësimet kryesore të nodit
Duke nisur nodin e ruajtjes, mund të specifikoni të gjitha cilësimet e nevojshme.
Do të përshkruaj ato më themelore, të tjerat mund të gjenden në GitHub.
- storage.dataSize â madhĂ«sia e folderit me skedarĂ«t
- storage.tempSize â madhĂ«sia e folderit tĂ« pĂ«rkohshĂ«m
- storage.autoCleanSize â madhĂ«sia minimale e ruajtjes qĂ« duhet mbajtur. NĂ«se specifikohet ky parameter, sapo tĂ« fillojĂ« tĂ« mungojĂ« hapĂ«sira, skedarĂ«t mĂ« pak tĂ« pĂ«rdorur do tĂ« fshihen.
- file.maxSize â madhĂ«sia maksimale e skedarĂ«ve
- file.minSize â madhĂ«sia minimale e skedarĂ«ve
- file.preferredDuplicates â numri i preferuar i dublikateve tĂ« skedarĂ«ve nĂ« rrjet
- file.mimeWhitelist â llojet e skedarĂ«ve tĂ« lejuara
- file.mimeBlacklist â llojet e skedarĂ«ve tĂ« ndaluara
- file.extWhitelist â zgjerimet e skedarĂ«ve tĂ« lejuara
- file.extBlacklist â zgjerimet e skedarĂ«ve tĂ« ndaluara
- file.linkCache â cilĂ«sime tĂ« ndryshme pĂ«r caching tĂ« lidhjeve
Gati të gjitha parametrat që lidhen me madhësitë mund të përcaktohen në vlera absolute dhe relative.
Puna përmes linjës së komandave
Biblioteka mund të përdoret përmes linjës së komandave. Për këtë, duhet ta instaloni atë globalisht: npm i -g storacle. Pas kësaj, mund të filloni veprimet e nevojshme nga direktoria me projektin, ku është nodi. Për shembull, storacle -a storeFile -f ./file.txt -c ./config.js, për të shtuar një skedar. Të gjitha veprimet mund të gjenden në
Pse mund t'ju nevojitet kjo
- Nëse dëshironi të krijoni një projekt decentralizuar, në të cilin parashikohet të ruani dhe të punoni me skedarët në mënyra të përshtatshme. Për shembull, projekti me muzikë, i përshkruar në lidhjen në fillim të artikullit, përdor storacle.
- Nëse punoni në projekte të tjera, ku nevojitet ruajtja e skedarëve në mënyrë të shpërndarë. Mund të organizoni lehtësisht një rrjet të mbyllur, të përshtatni nënat dhe të shtoni të reja, kur të jetë e nevojshme.
- Nëse ju nevojitet thjesht të ruani skedarët e faqes tuaj dhe nuk dëshironi të shkruani gjithçka vetë. Ndërsa kjo bibliotekë mund të jetë më e përshtatshme për ju.
- Nëse keni një projekt, ku punoni me skedarët, por dëshironi që të gjitha manipulimet të bëhen nga shfletuesi. Mund të evitoni shkruajturin e kodit server.
Kontaktet e mia:
Burimi: habr.com
