Ibi ipamọ – decentralized ipamọ faili

Ibi ipamọ – decentralized ipamọ faili

Ṣaaju ki Mo to bẹrẹ, Mo gbọdọ lọ kuro asopọ si išaaju articleki o ye ohun ti gangan a n sọrọ nipa.

Ninu nkan yii Emi yoo fẹ lati wo ipele ti o ni iduro fun titoju awọn faili, ati bii o ṣe le lo ẹnikẹni. Ibi ipamọ jẹ ile-ikawe ti o daduro, ko si taara asopọ pẹlu orin. O le ṣeto ibi ipamọ ti awọn faili eyikeyi.

Ninu nkan ti tẹlẹ, Mo “yi agba naa” diẹ sii ipfs, ṣugbọn eyi ṣẹlẹ ni pato ni ipo ti iṣoro ti Mo n yanju. Ni apapọ, Mo ro pe iṣẹ akanṣe yii dara. Mo kan fẹran agbara lati ṣẹda awọn nẹtiwọọki oriṣiriṣi fun awọn iṣẹ ṣiṣe oriṣiriṣi. Eyi n gba ọ laaye lati ṣeto eto dara julọ ati dinku fifuye lori awọn apa kọọkan ati nẹtiwọọki lapapọ. Paapaa laarin ilana ti iṣẹ akanṣe kan, ti o ba jẹ dandan, o le pin nẹtiwọọki si awọn ege ni ibamu si diẹ ninu awọn ibeere, dinku fifuye apapọ.

Nitorina storacle nlo ẹrọ naa itankale fun siseto nẹtiwọki. Awọn ẹya pataki:

  • Awọn faili le ṣe afikun si ibi ipamọ nipasẹ eyikeyi ipade.
  • Awọn faili ti wa ni ipamọ patapata, kii ṣe ni awọn bulọọki.
  • Faili kọọkan ni hash akoonu alailẹgbẹ tirẹ fun iṣẹ siwaju pẹlu rẹ.
  • Awọn faili le ṣe pidánpidán fun igbẹkẹle nla
  • Nọmba awọn faili lori ipade kan jẹ opin nipasẹ eto faili nikan (iyatọ wa, diẹ sii lori iyẹn ni isalẹ)
  • Nọmba awọn faili ti o wa ninu nẹtiwọọki jẹ opin nipasẹ awọn agbara itankale ni ibamu si nọmba awọn apa ti o wulo ninu nẹtiwọọki, eyiti ninu ẹya keji yoo ni anfani lati ṣiṣẹ pẹlu nọmba ailopin ti awọn apa (diẹ sii lori eyi ni nkan miiran)

Apeere ti o rọrun ti bii eyi ṣe n ṣiṣẹ ni gbogbogbo lati inu eto naa:

Olupin:

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

Onibara:

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

Inu wiwo

Ko si ohun ti o wuyi labẹ hood. Alaye nipa nọmba awọn faili, iwọn apapọ wọn ati awọn aaye miiran ti wa ni ipamọ sinu ibi ipamọ data inu-iranti ati pe a ṣe imudojuiwọn nigbati awọn faili ba paarẹ ati ṣafikun, nitorinaa ko si iwulo lati wọle si eto faili nigbagbogbo. Iyatọ kan n jẹ ki agbajo idoti ṣiṣẹ nigbati o nilo lati kaakiri awọn faili nigbati iwọn ibi-itọju kan ba de, ati pe ko ṣe idiwọ fifi awọn tuntun kun. Ni idi eyi, o ni lati fori ibi ipamọ naa, ati ṣiṣẹ pẹlu nọmba nla ti awọn faili (> sọ miliọnu kan) le ja si awọn ẹru pataki. Ati pe o dara lati tọju awọn faili diẹ ati ṣiṣe awọn apa diẹ sii. Ti “olusọ” ba jẹ alaabo, lẹhinna ko si iru iṣoro bẹ.

Ibi ipamọ faili ni awọn folda 256 ati awọn ipele 2 ti itẹ-ẹiyẹ. Awọn faili ti wa ni ipamọ sinu awọn folda ipele-keji. Iyẹn ni, ti miliọnu kan ba wa. Awọn faili 1 yoo wa ni iru folda kọọkan (62500 / sqrt(1000000)).

Awọn orukọ folda ti ṣẹda lati hash faili ki o le yara wọle si ti o ba mọ hash naa.

A yan eto yii da lori nọmba nla ti awọn ibeere ibi ipamọ oriṣiriṣi: atilẹyin fun awọn ọna ṣiṣe faili ti ko lagbara, nibiti ko ṣe iwunilori lati ni ọpọlọpọ awọn faili ni folda kan, lilọ kiri ni iyara ti gbogbo awọn folda ti o ba jẹ dandan, ati bẹbẹ lọ. Diẹ ninu awọn iru ti wura tumosi.

caching

Nigbati fifi awọn faili kun, bakannaa nigba gbigba wọn, awọn ọna asopọ si awọn faili ni a kọ si kaṣe.
Ṣeun si eyi, nigbagbogbo ko si iwulo lati kọja gbogbo nẹtiwọọki ni wiwa faili kan. Eyi ṣe iyara gbigba awọn ọna asopọ ati dinku fifuye lori nẹtiwọọki naa. Caching tun waye nipasẹ awọn akọle http.

Isomorphy

Onibara ti kọ ni JavaScript ati pe o jẹ isomorphic, o le ṣee lo taara lati ẹrọ aṣawakiri. 
O le gbe faili naa si https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js bi akosile ati wiwọle window.ClientStoracle tabi gbe wọle nipasẹ awọn Kọ eto, ati be be lo.

Awọn ọna asopọ ti a da duro

Ẹya ti o nifẹ si tun jẹ “itọkasi idaduro”. Eyi jẹ ọna asopọ si faili ti o le gba ni iṣọkan, nibi ati ni bayi, ati pe faili naa yoo fa soke nigbati o ti rii tẹlẹ ninu ibi ipamọ. Eyi rọrun pupọ nigbati, fun apẹẹrẹ, o nilo lati fi awọn aworan diẹ han lori aaye naa. A kan fi ọna asopọ ti o da duro ni src ati pe iyẹn ni. O le wa pẹlu ọpọlọpọ awọn ọran.

API onibara

  • async Client.prototype.storeFile() - fifipamọ faili naa
  • async Client.prototype.getFileLink() - gbigba ọna asopọ taara si faili naa
  • async Client.prototype.getFileLinks() - gbigba atokọ ti awọn ọna asopọ taara si faili kan lati gbogbo awọn apa nibiti o wa
  • async Client.prototype.getFileToBuffer() - gba faili naa sinu ifipamọ
  • async Client.prototype.getFileToPath() - gba faili kan sinu eto faili
  • async Client.prototype.getFileToBlob() - gba faili ni blob (fun ẹya ẹrọ aṣawakiri)
  • async Client.prototype.removeFile() - pa faili kan
  • Client.prototype.createRequestedFileLink() - ṣẹda ọna asopọ ti o da duro

Ṣe okeere awọn faili si olupin miiran

Lati gbe awọn faili lọ si ipade miiran, o le:

  • Kan daakọ gbogbo folda ipamọ pẹlu awọn eto. (Eyi le ma ṣiṣẹ ni ọjọ iwaju)
  • Daakọ folda nikan pẹlu awọn faili. Ṣugbọn, ninu ọran yii, iwọ yoo nilo lati ṣiṣẹ iṣẹ naa ni ẹẹkan node.normalizeFilesInfo()lati tun gbogbo data ṣe iṣiro ati tẹ sii sinu ibi ipamọ data.
  • lilo iṣẹ node.exportFiles()eyi ti yoo bẹrẹ didakọ awọn faili.

Awọn eto ipade ipilẹ
Nigbati o ba bẹrẹ ipade ibi ipamọ, o le pato gbogbo awọn eto pataki.
Emi yoo ṣe apejuwe awọn ipilẹ julọ, iyokù ni a le rii lori Github.

  • ibi ipamọ.dataIwọn - iwọn ti folda pẹlu awọn faili
  • ipamọ.tempSize - ibùgbé folda iwọn
  • ipamọ.autoCleanSize - awọn kere ipamọ iwọn ti o nilo lati wa ni waye. Ti o ba pato paramita yii, lẹhinna ni kete ti aaye ba bẹrẹ lati pari, awọn faili ti o kere julọ yoo paarẹ.
  • file.maxSize - o pọju iwọn faili
  • file.minIwon - kere iwọn faili
  • file.preferredDuplicates - nọmba ayanfẹ ti awọn ẹda-iwe faili lori nẹtiwọọki
  • file.mimeWhitelist - wulo faili orisi
  • file.mimeBlacklist - awọn iru faili ti ko tọ
  • file.extWhitelist - wulo faili amugbooro
  • file.extBlacklist - awọn amugbooro faili ti ko tọ
  • file.linkCache - orisirisi ọna asopọ caching eto

Fere gbogbo awọn paramita ti o ni ibatan si awọn iwọn le wa ni titẹ sii ni awọn iye pipe ati awọn ibatan.

Ṣiṣẹ nipasẹ laini aṣẹ
Ile-ikawe le ṣee lo nipasẹ laini aṣẹ. Lati ṣe eyi o nilo lati fi sori ẹrọ ni agbaye: npm i -g ibi ipamọ. Lẹhin eyi, o le ṣe ifilọlẹ awọn iṣe pataki lati inu itọsọna iṣẹ akanṣe nibiti ipade naa wa. Fun apere, ibi ipamọ -a itajaFile -f ./file.txt -c ./config.jslati fi faili naa kun. Gbogbo awọn iṣe le ṣee ri ninu https://github.com/ortexx/storacle/blob/master/bin/actions.js

Kini idi ti o le nilo eyi?

  • Ti o ba fẹ ṣẹda diẹ ninu awọn iru ise agbese decentralized ninu eyiti o gbero lati fipamọ ati ṣiṣẹ pẹlu awọn faili nipa lilo awọn ọna irọrun. Fun apẹẹrẹ, ise agbese orin ti a sapejuwe ninu awọn ọna asopọ ni ibẹrẹ ti awọn article nlo ibi ipamọ.
  • Ti o ba ṣiṣẹ lori awọn iṣẹ akanṣe miiran nibiti o nilo lati tọju awọn faili ni ọna pinpin. O le ni rọọrun kọ nẹtiwọọki pipade rẹ, ni irọrun tunto awọn apa ki o ṣafikun awọn tuntun nigbati o nilo.
  • Ti o ba kan nilo lati tọju awọn faili oju opo wẹẹbu rẹ si ibikan ati pe o pọ julọ fun ọ lati kọ ohun gbogbo funrararẹ. Boya ile-ikawe yii dara julọ ju awọn miiran lọ ninu ọran rẹ.
  • Ti o ba ni iṣẹ akanṣe ninu eyiti o ṣiṣẹ pẹlu awọn faili, ṣugbọn fẹ lati ṣe gbogbo awọn ifọwọyi lati ẹrọ aṣawakiri naa. O le yago fun kikọ koodu olupin.

Awọn olubasọrọ mi:

orisun: www.habr.com

Fi ọrọìwòye kun