Storacle - decentralized faira kuchengetedza

Storacle - decentralized faira kuchengetedza

Ndisati ndatanga, ndinofanira kuenda link yechinyorwa chapfuurakuti zvinyatsojeka zvatiri kutaura nezvazvo.

Muchinyorwa chino ndinoda kutarisa dhizaini ine basa rekuchengetedza mafaera, uye kuti ingashandiswa sei nemunhu wese. Storacle iraibhurari yakazvimirira, hapana kubatana kwakananga nemimhanzi. Iwe unogona kuronga kuchengetwa kwechero mafaira.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ "Π½Π°ΠΊΠ°Ρ‚ΠΈΠ» Π±ΠΎΡ‡ΠΊΡƒ" Π½Π° ipfs, Π½ΠΎ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² контСкстС Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ ΠΌΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ Ρ†Π΅Π»ΠΎΠΌ, я ΡΡ‡ΠΈΡ‚Π°ΡŽ этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΡ€ΡƒΡ‚Ρ‹ΠΌ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΌΠ½Π΅ большС нравится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ сСти ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Π­Ρ‚ΠΎ позволяСт Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ структуру ΠΈ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ ΠΈ ΡΠ΅Ρ‚ΡŒ Π² Ρ†Π΅Π»ΠΎΠΌ. МоТно Π΄Π°ΠΆΠ΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΈ нСобходимости, Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ Π½Π° куски ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ критСриям, сниТая ΠΎΠ±Ρ‰ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

Saka storcle inoshandisa michina kupararira для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ сСти. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности:

  • Π€Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ‡Π΅Ρ€Π΅Π· любой ΡƒΠ·Π΅Π».
  • Mafaira anochengetwa zvachose, kwete mumabhuroko.
  • Imwe neimwe faira ine yayo yakasarudzika yemukati hash yekuwedzera basa nayo.
  • Mafaira anogona kudzokororwa kuti avimbike zvakanyanya
  • Huwandu hwemafaira pane imwe node inongogumira chete neiyo faira system (pane musiyano, zvimwe nezvayo pazasi)
  • Nhamba yefaira mu network inogumira nekukwanisa kupararira zvichienderana nehuwandu hwemanodhi akakodzera mune network, iyo mune yechipiri vhezheni ichakwanisa kushanda nenhamba isingaperi yemanodhi (zvimwe pane izvi mune imwe chinyorwa)

Muenzaniso wakajeka wekuti izvi zvinowanzoshanda sei kubva kuchirongwa:

Sevha:

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

Mutengi:

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

Mukati kutarisa

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΠ²Π΅Ρ€Ρ…ΡŠΠ΅ΡΡ‚Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΠ³ΠΎ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ количСствС Ρ„Π°ΠΉΠ»ΠΎΠ², совокупном ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ хранятся Π² in-memory Π±Π°Π·Π΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², поэтому нСобходимости часто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π½Π΅Ρ‚. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сборщика мусора, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° циркуляция Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ достиТСнии ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π° Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ…. Π’ этом случаС приходится ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с большим количСством Ρ„Π°ΠΉΠ»ΠΎΠ²(> ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° скаТСм) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ сущСствСнным Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌ. И Π»ΡƒΡ‡ΡˆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ помСньшС Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ побольшС ΡƒΠ·Π»ΠΎΠ². Если "Ρ‡ΠΈΡΡ‚ΠΈΠ»ΡŒΡ‰ΠΈΠΊ" ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅Ρ‚.

Iyo faira yekuchengetera ine 256 mafolda uye 2 mazinga ekudyara. Mafaira anochengetwa muchikamu chechipiri maforodha. Kureva, kana paine miriyoni. Pachave neanosvika makumi matanhatu nemazana mashanu mafaera mune imwe neimwe folda yakadaro (1 / sqrt(62500)).

Mazita eforodha anoumbwa kubva kufaira hashi kuitira kuti iwe ugone kukurumidza kuiwana kana iwe uchiziva hashi.

Ichi chimiro chakasarudzwa zvichienderana nenhamba huru yezvakasiyana zvekuchengetera zvinodiwa: kutsigirwa kune isina simba faira masisitimu, uko kusingafadzi kuve nemafaira akawanda mune imwe folda, nekukurumidza kutenderera kwemaforodha ese kana zvichidikanwa, nezvimwe. Imwe mhando yegoridhe zvinoreva.

caching

Paunenge uchiwedzera mafaira, uye kana uchiagamuchira, zvinongedzo kune mafaera zvinonyorerwa kune cache.
Nekuda kweizvi, kazhinji kazhinji hapana chikonzero chekupfuura netiweki yese uchitsvaga faira. Izvi zvinomhanyisa risiti yezvibatanidza uye zvinoderedza mutoro pane network. Caching zvakare inoitika kuburikidza ne http misoro.

Isomorphy

Mutengi akanyorwa mujavascript uye isomorphic, inogona kushandiswa zvakananga kubva kubrowser. 
Unogona kurodha faira https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js se script uye kuwana window.ClientStoracle kana kuendesa kunze kuburikidza nekuvaka system, nezvimwe.

Deferred links

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ Ρ„ΠΈΡ‡Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ являСтся "отлоТСнная ссылка". Π­Ρ‚ΠΎ ссылка Π½Π° Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ синхронно, здСсь ΠΈ сСйчас, Π° Ρ„Π°ΠΉΠ» подтянСтся ΠΊΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° сайтС ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎ проставляСм Π² src ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ссылку ΠΈ всС. КСйсов ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

Purogiramu inonzi Client

  • async Client.prototype.storeFile() - kuchengetedza faira
  • async Client.prototype.getFileLink() - kuwana chinongedzo chakananga kune faira
  • async Client.prototype.getFileLinks() - kuwana runyorwa rwezvakananga zvinongedzo kune faira kubva kune ese node kwairi
  • async Client.prototype.getFileToBuffer() - tora iyo faira mubuffer
  • async Client.prototype.getFileToPath() - tora faira mufaira system
  • async Client.prototype.getFileToBlob() - tora iyo faira mu blob (yebrowser vhezheni)
  • async Client.prototype.removeFile() - bvisa faira
  • Client.prototype.createRequestedFileLink() - gadzira chinongedzo chakamisikidzwa

Tumira mafaira kune imwe sevha

Kuti uendese mafaera kune imwe node, unogona:

  • Ingoteedzera iyo yese yekuchengetedza folda pamwe chete nemaseting. (izvi zvinogona kusashanda mune ramangwana)
  • Kopa chete folda ine mafaera. Asi, mune iyi kesi, iwe uchafanirwa kumhanya iyo basa kamwe chete node.normalizeFilesInfo()kuverengera zvakare data rese uye kuiisa mudhatabhesi.
  • shandisa basa node.exportFiles()iyo inotanga kukopa mafaira.

Basic node settings
Paunotanga node yekuchengetedza, unogona kutsanangura ese anodiwa marongero.
Ini ndichatsanangura akanyanya kukosha, mamwe anogona kuwanikwa paGithub.

  • storage.dataSize - saizi yefolda ine mafaera
  • storage.tempSize - yenguva folda saizi
  • storage.autoCleanSize - saizi shoma yekuchengetera inoda kuchengetwa. Kana iwe ukatsanangura iyi parameter, ipapo nzvimbo painongotanga kupera, mafaira mashoma akashandiswa anobviswa.
  • file.maxSize β€” ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°
  • file.minSize - saizi shoma yefaira
  • file.preferredDuplicates - yakasarudzika nhamba yemafaira akadzokorora pane network
  • file.mimeWhitelist - mhando dzemafaira anoshanda
  • file.mimeBlacklist - mhando dzemafaira dzisina kunaka
  • file.extWhitelist - faira rekuwedzera rakakodzera
  • file.extBlacklist - mafaira ekuwedzera asina kunaka
  • file.linkCache - akasiyana ekubatanidza caching marongero

Anenge ese ma parameter ane hukama nehukuru anogona kuiswa mune ese absolute uye akaenzana kukosha.

Kushanda kuburikidza nemutsara wekuraira
Raibhurari inogona kushandiswa kuburikidza nemutsara wekuraira. Kuti uite izvi unofanirwa kuiisa pasi rose: npm i -g dura. Mushure meizvi, iwe unogona kuvhura zviito zvinodikanwa kubva kune dhairekitori reprojekiti uko node iri. Semuyenzaniso, dura -a storeFile -f ./file.txt -c ./config.jskuwedzera faira. Zviito zvese zvinowanikwa mukati https://github.com/ortexx/storacle/blob/master/bin/actions.js

Sei ungade izvi?

  • Если Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Π΅Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ планируСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. НапримСр, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΌΡƒΠ·Ρ‹ΠΊΠΎΠΉ, описанный ΠΏΠΎ ссылкС Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ duracle.
  • Kana iwe ukashanda pane chero mamwe mapurojekiti kwaunoda kuchengeta mafaera nenzira yakagoverwa. Iwe unogona nyore kuvaka yako yakavharwa network, zviri nyore kugadzirisa node uye kuwedzera matsva kana zvichidikanwa.
  • Kana iwe uchingoda kuchengeta yako webhusaiti mafaera kumwe kunhu uye zvakawandisa kuti iwe unyore zvese iwe pachako. Zvichida raibhurari iyi inokodzera zviri nani pane vamwe vari kwauri.
  • Если Ρƒ тСбя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΡˆΡŒ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ всС манипуляции ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π’Ρ‹ моТСшь ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ написания сСрвСрного ΠΊΠΎΠ΄Π°.

Vandinoshamwaridzana navo:

Source: www.habr.com

Voeg