
Berî ku ez dest pê bikim, divê ez biçim da ku eşkere bibe ka em tam qala çi dikin.
Di vê gotarê de ez dixwazim li qata ku berpirsiyarê hilanîna pelan e, û çawa dikare ji hêla her kesî ve were bikar anîn binihêrim. , tu pêwendiya rasterast bi muzîkê re tune. Hûn dikarin hilanîna her pelan birêxistin bikin.
Di gotara berê de, min "bermîl gêr kir" hinekî li ser ipfs, lê ev tam di çarçoveya pirsgirêka ku min çareser dikir de çêbû. Bi tevahî, ez difikirim ku ev proje xweş e. Ez tenê şiyana afirandina torên cihêreng ji bo karên cûda tercîh dikim. Ev dihêle hûn strukturê çêtir birêxistin bikin û barkirina li ser girêkên kesane û tevnvîsê bi tevahî kêm bikin. Tewra di çarçoveya yek projeyek de, heke hewce be, hûn dikarin torê li gorî hin pîvanan perçe bikin, barkirina giştî kêm bikin.
Ji ber vê yekê storacle mekanîzmayê bikar tîne ji bo organîzekirina torê. Taybetmendiyên sereke:
- Pelan dikarin bi her girêkekê ve li depoyê werin zêdekirin.
- Pelên bi tevahî têne tomar kirin, ne di blokan de.
- Her pel ji bo xebata bêtir bi wê re hasha naveroka xweya yekta heye.
- Pelan dikarin ji bo pêbaweriya mezintir werin dubare kirin
- Hejmara pelên li ser yek girêk tenê ji hêla pergala pelan ve tê sînorkirin (îstîsnayek heye, li ser ya jêrîn bêtir)
- Hejmara pelên di torê de ji hêla kapasîteyên belavkirinê ve li gorî hejmara girêkên derbasdar ên di torê de têne sînorkirin, ku di guhertoya duyemîn de dê bikaribin bi hejmareke bêdawî ya girêkan re bixebitin (li ser vê yekê di gotarek din de bêtir)
Nimûneyek hêsan a ku ev bi gelemperî ji bernameyê çawa dixebite:
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);
}
})();Kirrîxwaz:
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);
}
})();Dîmena hundurîn
Di bin kapê de tiştek ecêb tune. Agahiyên li ser hejmara pelan, mezinahiya wan a giştî û xalên din di databasek nav-bîrê de têne hilanîn û dema ku pel têne jêbirin û zêdekirin têne nûve kirin, ji ber vê yekê ne hewce ye ku pir caran bigihîjin pergala pelan. Îstîsnayek çalakkirina berhevkarê çopê ye dema ku hûn hewce ne ku hûn pelan belav bikin dema ku mezinahiyek hilanînê bigihîje, û lê zêdekirina yên nû qedexe neke. Di vê rewşê de, hûn neçar in ku hilanînê derbas bikin, û xebata bi hejmarek mezin a pelan (> bêje mîlyonek) dikare bibe sedema barkirinên girîng. Û çêtir e ku hûn kêmtir pelan hilînin û bêtir girêkan bimeşînin. Ger "paqijker" bête asteng kirin, wê hingê pirsgirêkek wusa tune.
Hilberîna pelan ji 256 peldankan û 2 astên hêlînê pêk tê. Pelên di peldankên asta duyemîn de têne hilanîn. Yanî 1 milyon hebin. Dê di her peldankek weha de 62500 pel hebin (1000000 / sqrt(256)).
Navên peldankê ji pelê haş têne çêkirin da ku hûn bi lez xwe bigihînin heke hûn haş dizanin.
Ev avahî li ser bingeha hejmareke mezin ji hewcedariyên hilanînê yên cihêreng hate hilbijartin: piştgirî ji pergalên pelan ên qels, ku ne tê xwestin ku di yek peldankê de gelek pelan hebin, ger hewce be gera bilez a hemî peldankan, hwd. Hin cûreyek wateya zêrîn.
Caching
Dema ku pelan lê zêde dikin, û hem jî dema wergirtina wan, lînkên pelan li cacheyê têne nivîsandin.
Bi saya vê yekê, pir caran ne hewce ye ku meriv tevaya torê di lêgerîna pelê de derbas bike. Ev leza wergirtina girêdanan û barkirina li ser torê kêm dike. Caching jî bi sernavên http pêk tê.
Isomorphy
Xerîdar bi javascript-ê hatî nivîsandin û isomorphic e, ew dikare rasterast ji gerokê were bikar anîn.
Hûn dikarin pelê bar bikin wekî senaryo û gihîştinê pace.ClientStoracle an ji hêla pergala avakirinê ve tê import kirin, hwd.
Girêdanên paşdexistin
Taybetmendiyek balkêş jî "referansa taloqkirî" ye. Ev lînka pelek e ku meriv dikare bi hevdemî, li vir û nuha were bidestxistin, û dema ku pel jixwe di hilanînê de were dîtin dê were rakirin. Ev pir hêsan e dema ku, wek nimûne, hûn hewce ne ku hin wêneyan li ser malperê nîşan bidin. Me tenê zencîreyek paşvexistî li src datîne û ew e. Hûn dikarin bi gelek dozan werin.
Client API
- async Client.prototype.storeFile() - tomarkirina pelê
- async Client.prototype.getFileLink() - wergirtina girêdanek rasterast a pelê
- async Client.prototype.getFileLinks() - wergirtina navnîşek girêdanên rasterast ên pelê ji hemî girêkên ku ew lê hene
- async Client.prototype.getFileToBuffer() - pelê bixin nav tamponê
- async Client.prototype.getFileToPath() - pelek bixin nav pergala pelan
- async Client.prototype.getFileToBlob() - Pelê di blob de bistînin (ji bo guhertoya gerokê)
- async Client.prototype.removeFile() - pelê jêbirin
- Client.prototype.createRequestedFileLink() - girêdanek paşvekirî çêbikin
Pelên ji bo serverek din derxînin
Ji bo ku hûn pelan veguhezînin nodek din, hûn dikarin:
- Tenê tevahiya peldanka hilanînê digel mîhengan kopî bikin. (dibe ku ev di pêşerojê de nexebite)
- Tenê peldanka bi pelan re kopî bikin. Lê, di vê rewşê de, hûn ê hewce bikin ku fonksiyonê carekê bimeşînin node.normalizeFilesInfo()da ku hemî daneyan ji nû ve hesab bike û têxe nav databasê.
- Fonksiyonê bikar bînin node.exportFiles()ku dê dest bi kopîkirina pelan bike.
Mîhengên girêka bingehîn
Dema ku girêka hilanînê dest pê dike, hûn dikarin hemî mîhengên pêwîst diyar bikin.
Ez ê yên herî bingehîn diyar bikim, yên mayî li ser Github têne dîtin.
- store.dataSize - mezinahiya peldanka bi pelan
- hilanînê.tempSize - Mezinahiya peldanka demkî
- store.autoCleanSize - Mezinahiya hilanînê ya herî kêm ku divê were girtin. Ger hûn vê pîvanê diyar bikin, wê hingê gava ku cîh dest pê dike, pelên herî kêm têne bikar anîn dê werin jêbirin.
- file.maxSize - Mezinahiya pelê ya herî zêde
- file.minSize - Mezinahiya pelê ya herî kêm
- file.preferredDuplicates - Hejmara bijartî ya pelên dubare yên li ser torê
- file.mimeWhitelist - cureyên pelên derbasdar
- file.mimeBlacklist - cureyên pelê nederbasdar
- file.extWhitelist - pêvekên pelê derbasdar
- file.extBlacklist - pêvekên pelê nederbasdar
- file.linkCache - mîhengên cachkirina girêdanê yên cihêreng
Hema hema hemî pîvanên ku bi pîvanan ve girêdayî ne dikarin hem di nirxên mutlaq û hem jî yên têkildar de bêne navnîş kirin.
Bi riya rêzika fermanê dixebitin
Pirtûkxane dikare bi rêzika fermanê were bikar anîn. Ji bo vê yekê hûn hewce ne ku wê li gerdûnî saz bikin: npm i -g storacle. Piştî vê yekê, hûn dikarin ji pelrêça projeyê ya ku node lê ye, kiryarên pêwîst bidin destpêkirin. Bo nimûne, storacle -a storeFile -f ./file.txt -c ./config.jsji bo pelê zêde bike. Hemî kiryar dikarin di nav de bêne dîtin
Çima dibe ku hûn hewceyê vê yekê bikin?
- Ger hûn dixwazin projeyek nemerkezî biafirînin ku tê de hûn plan dikin ku pelan bi karanîna rêbazên hêsan hilînin û bixebitin. Mînakî, projeya muzîkê ya ku di destpêka gotarê de di zencîreyê de hatî destnîşan kirin bikar tîne storacle.
- Heke hûn li ser projeyên din dixebitin ku hûn hewce ne ku pelan bi rengek belavkirî hilînin. Hûn dikarin bi hêsanî tora xweya girtî ava bikin, bi nermî girêkan mîheng bikin û gava ku hewce be yên nû lê zêde bikin.
- Ger hûn tenê hewce ne ku pelên malpera xwe li cîhek hilînin û ji we re pir zêde ye ku hûn her tiştî bixwe binivîsin. Dibe ku ev pirtûkxane di doza we de ji yên din çêtir e.
- Ger projeyek we heye ku hûn bi pelan re dixebitin, lê hûn dixwazin hemî manipulasyonan ji gerokê bikin. Hûn dikarin ji nivîsandina koda serverê dûr bixin.
Têkiliyên min:
Source: www.habr.com
