
Enne alustan, pean jÀtma , et oleks selge, millest jutt.
Selles artiklis tahaksin kÀsitleda kihti, mis vastutab failide salvestamise eest, ja kuidas seda saavad kasutada kÔik huvilised. , mis ei ole otseselt seotud muusika maailmaga. Failide salvestamine on vÔimalik igasuguste failide jaoks.
Eelmises artiklis kritiseerisin ma veidi ipfs, kuid see juhtus just seoses minu lahendatava ĂŒlesandega. Ăldiselt pean seda projekti Ă€gedaks. Lihtsalt mulle meeldib rohkem vĂ”imalus luua erinevaid vĂ”rgustikke erinevate ĂŒlesannete jaoks. See aitab paremini struktureerida ja vĂ€hendada koormust ĂŒksikutele sĂ”lmedele ja kogu vĂ”rgule. Ăhe projekti raames on isegi vĂ”imalik vajadusel jagada vĂ”rgustikku tĂŒkkideks mingite kriteeriumide pĂ”hjal, vĂ€hendades ĂŒldkoormust.
Nii et storacle kasutab mehhanismi vÔrgustiku korraldamiseks. Peamised omadused:
- Failid saavad salvestada igast sÔlmest.
- Failid salvestatakse tÀielikult, mitte plokkidena.
- Igal failil on oma ainulaadne hash sisu pÔhjal edasiseks töötluseks.
- Failide kopeerimine suurema usaldusvÀÀrsuse tagamiseks
- Ăhe sĂ”lme peal olevaid faile piirab ainult failisĂŒsteem (on erandeid, mis jĂ€rgnevas arutelus).
- VÔrgus olevate failide arvu piirab spreadable vÔimekus sarnaste sÔlmede arvu osas, mis teises versioonis vÔimaldavad töötada lÔpmatu arvu sÔlmedega (sellest rÀÀgime teises artiklis).
Lihtne nÀide, kuidas see programmide kaudu töötab:
Server:
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);
}
})();Kliendi:
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);
}
})();Vaade seest
Mootor on tavaline. Teave failide arvu, nende kogusuuruse ja teiste detailide kohta hoitakse in-memory andmebaasis ning seda uuendatakse failide kustutamisel ja lisamisel, seega pole sageli vajadust failisĂŒsteemi juurde pöörduda. Ainus erand on prĂŒgikoguja aktiviseerimine, kui on vaja faile ringlusse vĂ”tta, kui mingid salvestusmÔÔdud on saavutatud, mitte uute lisamise keelamine. Sellisel juhul tuleb salvestust ringi vaadata, ja suure arvu failidega (öelgem, ĂŒle miljoni) vĂ”ib see tekitada mĂ€rkimisvÀÀrset koormust. Seega on parem hoida vĂ€hem faile ja kĂ€ivitada rohkem sĂ”lmi. Kui 'puhastaja' on vĂ€lja lĂŒlitatud, ei ole sellist probleemi.
Failide salvestus koosneb 256 kaustast ja 2 taseme sĂŒgavusest. Failid asuvad teise taseme kaustades. Seega, kui on 1 miljon faili, on igas sellises kaustas umbes 62500 tĂŒkki (1000000 / sqrt(256)).
Kaustade nimed genereeritakse faili hash'i pÔhjal, et saaks kiiresti juurde pÀÀseda, teades hash'i.
Selline struktuur valiti lĂ€htuvalt paljusid erinevaid nĂ”udmisi salvestusele: nĂ”rkade failisĂŒsteemide toetamine, kus ĂŒhes kaustas ei ole soovitatav hoida palju faile, kiire kaustade lĂ€bivaatamine vajadusel jne. Teatud kuldne keskkoht.
VahemÀlu
Failide lisamisel ja ka nende saamisel salvestatakse vahemÀlu faile linke.
Selle tĂ”ttu ei pea sageli ĂŒle kogu vĂ”rgu failide otsimise nimel ringi liikuma. See kiirendab linkide saamist ja vĂ€hendab vĂ”rgu koormust. Samuti toimub vahemĂ€lestus lĂ€bi http pealkirjade.
Isomorfism
Klienditarkvara on kirjutatud Javascriptis ja on isomorfne, seda saab kasutada otse brauserist.Â
Faili saab ĂŒles laadida nagu skripti ja pÀÀseda juurde window.ClientStoracle vĂ”i importida lĂ€bi koostesĂŒsteemi jne.
Edasi lĂŒkatud lingid
Huvitav omadus on ka 'edasi lĂŒkatud link'. See on link failile, mida saab saada sĂŒnkroonselt, siin ja praegu, ja fail tĂ”mmatakse, kui see juba salvestusest leitud. See on vĂ€ga mugav, kui nĂ€iteks tuleb nĂ€idata mingisuguseid pilte veebilehel. Lihtsalt mÀÀrame src jaoks edasi lĂŒkatud lingi ja kĂ”ik. Juhtumeid vĂ”ib vĂ€lja mĂ”elda palju.
Kliendi API
- async Client.prototype.storeFile() â faili salvestamine
- async Client.prototype.getFileLink() â faili otsese lingi saamine
- async Client.prototype.getFileLinks() â saada otseĂŒhenduste loend faili jaoks kĂ”igilt sĂ”lmedelt, kus see olemas on
- async Client.prototype.getFileToBuffer() â saada fail pĂ€ntesse
- async Client.prototype.getFileToPath() â saada fail failisĂŒsteemi
- async Client.prototype.getFileToBlob() â saada fail blob'ina (brauseri versiooni jaoks)
- async Client.prototype.removeFile() â eemaldada fail
- Client.prototype.createRequestedFileLink() â luua viivitatud link
Failide eksportimine teisele serverile
Failide teisaldamiseks teisele sÔlmele saab:
- Lihtsalt kopeerida kogu salvestusse mÔeldud kaust koos seadistustega. (tulevikus see ei pruugi töötada)
- Kopeerida ainult failide kaust. Kuid sel juhul tuleb ĂŒhe korra kĂ€ivitada funktsioon node.normalizeFilesInfo(), et ĂŒmber arvutada kĂ”ik andmed ja sisestada need andmebaasi.
- Kasutage funktsiooni node.exportFiles(), mis alustab failide kopeerimist.
SÔlme pÔhiseaded
SalvestussÔlme kÀivitamisel saab mÀÀrata kÔik vajalikud seaded.
Kirjeldan kĂ”ige olulisemaid, ĂŒlejÀÀnud leiate GitHubist.
- storage.dataSize â failide kausta suurus
- storage.tempSize â ajutise kausta suurus
- storage.autoCleanSize â minimaalne salvestusruumi suurus, mida tuleb hoida. Kui see parameeter on mÀÀratud, siis kui ruum hakkab otsa saama, eemaldatakse kĂ”ige vĂ€hem kasutatavad failid.
- file.maxSize â faili maksimaalne suurus
- file.minSize â faili minimaalne suurus
- file.preferredDuplicates â eelistatud failide koopiaarv vĂ”rgus
- file.mimeWhitelist â lubatud faili tĂŒĂŒbid
- file.mimeBlacklist â keelatud faili tĂŒĂŒbid
- file.extWhitelist â lubatud faili laiendid
- file.extBlacklist â keelatud faili laiendid
- file.linkCache â erinevad linkide vahemĂ€lu seaded
Peaaegu kĂ”ik parameetrid, mis on seotud suurustega, vĂ”ivad olla mÀÀratud nii absoluutsetes kui ka suhtelistes mÔÔtĂŒhikutes.
Töö kÀsurealt
Raamatukogu saab kasutada kÀsurealt. Selleks tuleb see globaalset installida: npm i -g storacle. PÀrast seda saab vajalikke tegevusi kÀivitada projektikaustas, kus on sÔlm. NÀiteks, storacle -a storeFile -f ./file.txt -c ./config.js, et lisada fail. KÔiki tegevusi saab leida
Miks see vÔiks sul vaja minna
- Kui soovid luua mÔnda detsentraliseeritud projekti, kus on plaanis salvestada ja töötada failidega mugaval viisil. NÀiteks projekt muusika osas, mida on kirjeldatud artikli alguses, kasutab storacle.
- Kui töötad muude projektide kallal, kus on vajalik failide hajutatud salvestamine, saad hÔlpsasti luua oma privaatvÔrgu, paindlikult konfigureerida sÔlmi ja lisada uusi, kui see on vajalik.
- Kui vajad lihtsalt kohta, kus salvestada oma saidi faile ja ei viitsi kÔike ise kirjutada, sobib see teek vÔib-olla paremini kui teised sinu jaoks.
- Kui sul on projekt, kus töötad failidega, kuid soovid kÔik toimingud teha brauserist, saad vÀltida serverikoodi kirjutamist.
Minu kontaktid:
Allikas: habr.com
