{"id":80224,"date":"2020-05-04T13:42:20","date_gmt":"2020-05-04T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov"},"modified":"2020-05-04T13:42:20","modified_gmt":"2020-05-04T11:42:20","slug":"storacle-deczentralizovannoe-hranilishhe-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 un archivio di file decentralizzato","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 un archivio di file decentralizzato\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prima di iniziare, devo lasciare <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">il link all'articolo precedente<\/a><\/noindex>, per chiarire di cosa stiamo parlando.<\/p>\n<p><\/p>\n<p>In questo articolo vorrei analizzare il livello che si occupa dello storage dei file e come questo possa essere utilizzato da chiunque. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle \u00e8 una libreria autonoma<\/a><\/noindex>, non ha alcun legame diretto con la musica. \u00c8 possibile organizzare lo storage di qualsiasi tipo di file.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Nell'articolo precedente ho un po' \"criticato\" <strong>ipfs<\/strong>, ma \u00e8 stato in riferimento al task che stavo affrontando. In generale, considero questo progetto fantastico. Mi piace semplicemente di pi\u00f9 la possibilit\u00e0 di creare diverse reti per compiti diversi. Questo permette di organizzare meglio la struttura e ridurre il carico sui singoli nodi e sulla rete in generale. \u00c8 anche possibile, all'interno di un determinato progetto, suddividere la rete in parti in base a determinati criteri, riducendo il carico complessivo.<\/p>\n<p><\/p>\n<p>Quindi, storacle utilizza meccanismi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> per l'organizzazione della rete. Caratteristiche principali:<\/p>\n<p><\/p>\n<ul>\n<li>I file possono essere aggiunti allo storage tramite qualsiasi nodo.<\/li>\n<li>I file vengono salvati integralmente, non a blocchi.<\/li>\n<li>Ogni file ha un suo hash unico basato sul contenuto per ulteriori operazioni su di esso.<\/li>\n<li>I file possono essere duplicati per una maggiore affidabilit\u00e0<\/li>\n<li>Il numero di file su un nodo \u00e8 limitato solo dal file system (c'\u00e8 un'eccezione, che verr\u00e0 spiegata pi\u00f9 avanti)<\/li>\n<li>Il numero di file nella rete \u00e8 limitato dalle capacit\u00e0 spreadable in relazione al numero di nodi consentiti nella rete, che nella seconda versione potranno consentire di lavorare con un numero infinito di nodi (ne parleremo in un altro articolo)<\/li>\n<\/ul>\n<p><\/p>\n<p>Un semplice esempio di come funziona nella pratica:<\/p>\n<p><\/p>\n<p>Server:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Node = require('storacle').Node;\n\n(async () =&gt; {\n\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0const node = new Node({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0port: 4000,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0hostname: 'localhost'\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0await node.init();\n\u00a0\u00a0}\n\u00a0\u00a0catch(err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err.stack);\n\u00a0\u00a0\u00a0\u00a0process.exit(1);\n\u00a0\u00a0}\n})();<\/code><\/pre>\n<p><\/p>\n<p>Client:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Client = require('storacle').Client;\n\n(async () =&gt; {\n\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0const client = new Client({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0address: 'localhost:4000'\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0await client.init();\n\u00a0\u00a0\u00a0\u00a0const hash = await client.storeFile('.\/my-file');\n\u00a0\u00a0\u00a0\u00a0const link = await client.getFileLink(hash);\u00a0\n\u00a0\u00a0\u00a0\u00a0await client.removeFile(hash);\n\u00a0\u00a0}\n\u00a0\u00a0catch(err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err.stack);\n\u00a0\u00a0\u00a0\u00a0process.exit(1);\n\u00a0\u00a0}\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Uno sguardo dall'interno<\/strong><\/p>\n<p><\/p>\n<p>Sotto il cofano non c'\u00e8 nulla di straordinario. Le informazioni sul numero di file, la loro dimensione complessiva e altri aspetti sono memorizzate in un database in memoria e vengono aggiornate quando si eliminano o si aggiungono file, quindi non c'\u00e8 bisogno di accedere frequentemente al sistema file. Un'eccezione \u00e8 quando \u00e8 attivato il garbage collector, poich\u00e9 \u00e8 necessaria la circolazione dei file quando si raggiungono determinate dimensioni di archiviazione, e non \u00e8 un divieto all'aggiunta di nuovi. In questo caso, \u00e8 necessario eseguire la scansione dello storage, e lavorare con un numero elevato di file (&gt; un milione, per esempio) pu\u00f2 portare a carichi significativi. \u00c8 meglio conservare meno file e avviare pi\u00f9 nodi. Se il \"pulitore\" \u00e8 disattivato, non si presenta questo problema.<\/p>\n<p><\/p>\n<p>Lo storage dei file \u00e8 costituito da 256 cartelle e 2 livelli di annidamento. I file sono memorizzati nelle cartelle di secondo livello. Quindi, con 1 milione di file, ogni cartella di questo tipo avr\u00e0 circa 62500 file (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>I nomi delle cartelle vengono generati dall'hash del file, in modo da poter accedere rapidamente conoscendo l'hash.<\/p>\n<p><\/p>\n<p>Questa struttura \u00e8 stata scelta in base a un gran numero di requisiti diversi per lo storage: supporto per file system deboli, dove non \u00e8 consigliabile avere molti file in una sola cartella, rapido accesso a tutte le cartelle quando necessario, ecc. Una sorta di compromesso.<\/p>\n<p><\/p>\n<p><strong>Caching<\/strong><\/p>\n<p><\/p>\n<p>Durante l'aggiunta di file, cos\u00ec come al momento del loro recupero, si registrano nel cache i collegamenti ai file.<br \/>\nGrazie a questo, spesso non \u00e8 necessario scandagliare l'intera rete in cerca di un file. Ci\u00f2 accelera il recupero dei collegamenti e riduce il carico sulla rete. Inoltre, la memorizzazione nella cache avviene tramite intestazioni HTTP.<\/p>\n<p><\/p>\n<p><strong>Isomorfismo<\/strong><\/p>\n<p><\/p>\n<p>Il client \u00e8 scritto in JavaScript ed \u00e8 isomorfo, pu\u00f2 essere utilizzato direttamente dal browser.\u00a0<br \/>\n\u00c8 possibile caricare un file <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js<\/a><\/noindex> come script e accedere a <strong>window.ClientStoracle <\/strong>oppure importarlo tramite un sistema di bundling, ecc.<\/p>\n<p><\/p>\n<p><strong>Collegamenti posticipati<\/strong><\/p>\n<p><\/p>\n<p>Una caratteristica interessante \u00e8 anche il \"collegamento posticipato\". Si tratta di un collegamento a un file che pu\u00f2 essere ottenuto in modo sincrono, qui e ora, mentre il file verr\u00e0 recuperato quando sar\u00e0 gi\u00e0 stato trovato nello storage. \u00c8 molto comodo, ad esempio, quando \u00e8 necessario mostrare alcune immagini sul sito. Basta inserire nel src il collegamento posticipato e il gioco \u00e8 fatto. Si possono inventare molti casi d'uso.<\/p>\n<p><\/p>\n<p><strong>Api del cliente<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 salvataggio del file<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 ottenimento del collegamento diretto al file<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 ottenimento dell'elenco dei collegamenti diretti al file da tutti i nodi in cui \u00e8 presente<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 ottenere il file nel buffer<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 ottenere il file nel file system<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 ottenere il file in blob (per la versione browser)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 rimuovi file<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 creare un collegamento posticipato<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Esportazione di file su un altro server<\/strong><\/p>\n<p><\/p>\n<p>Per trasferire file su un altro nodo, \u00e8 possibile:<\/p>\n<p><\/p>\n<ul>\n<li>Copiare semplicemente l'intera cartella di archiviazione insieme alle impostazioni. (in futuro potrebbe non funzionare)<\/li>\n<li>Copiare solo la cartella con i file. Tuttavia, in questo caso, sar\u00e0 necessario eseguire una volta la funzione <strong>node.normalizeFilesInfo()<\/strong>, per ricalcolare tutti i dati e memorizzarli nel database.<\/li>\n<li>Utilizzare la funzione <strong>node.exportFiles()<\/strong>, che avvier\u00e0 la copia dei file.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Impostazioni principali del nodo<\/strong><br \/>\nAvviando il nodo di archiviazione, \u00e8 possibile specificare tutte le impostazioni necessarie.<br \/>\nDescriver\u00f2 le pi\u00f9 importanti, il resto pu\u00f2 essere trovato su GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 dimensione della cartella con i file<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 dimensione della cartella temporanea<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 dimensione minima di spazio di archiviazione da mantenere. Se questo parametro viene specificato, non appena lo spazio inizia a scarseggiare, i file meno utilizzati verranno eliminati.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 dimensione massima del file<\/li>\n<li><strong>file.minSize<\/strong> \u2014 dimensione minima del file<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 numero preferito di duplicati del file nella rete<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 tipi di file consentiti<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 tipi di file non consentiti<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 estensioni di file consentite<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 estensioni di file non consentite<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 varie impostazioni di caching dei link<\/li>\n<\/ul>\n<p><\/p>\n<p>Quasi tutti i parametri relativi alle dimensioni possono essere specificati sia in valori assoluti che relativi.<\/p>\n<p><\/p>\n<p><strong>Utilizzo tramite riga di comando<\/strong><br \/>\nLa libreria pu\u00f2 essere utilizzata tramite riga di comando. Per fare ci\u00f2, \u00e8 necessario installarla globalmente: <strong>npm i -g storacle<\/strong>. Dopo di che si possono eseguire le azioni necessarie dalla directory del progetto, dove si trova Node. Ad esempio, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, per aggiungere un file. Tutte le azioni possono essere trovate in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js<\/a><\/noindex><\/p>\n<p><\/p>\n<p><strong>Perch\u00e9 potresti averne bisogno<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Se vuoi creare un progetto decentralizzato in cui prevedi di memorizzare e lavorare con file in modo conveniente. Ad esempio, il progetto musicale descritto nel link all'inizio dell'articolo utilizza <strong>storacle<\/strong>.<\/li>\n<li>Se stai lavorando su altri progetti in cui \u00e8 necessario memorizzare file in modo distribuito. Puoi facilmente costruire una rete privata, configurare flessibilmente i nodi e aggiungere nuovi quando necessario.<\/li>\n<li>Se hai semplicemente bisogno di un luogo dove memorizzare i file del tuo sito e non vuoi scrivere tutto da solo. Questa libreria potrebbe essere pi\u00f9 adatta rispetto ad altre nel tuo caso.<\/li>\n<li>Se hai un progetto in cui lavori con file ma desideri eseguire tutte le operazioni dal browser. Puoi evitare di scrivere codice server.<\/li>\n<\/ul>\n<p><\/p>\n<p>I miei contatti:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499954\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Storacle \u2014 archiviazione decentralizzata di file | ProHoster","description":"Prima di iniziare, devo lasciare un link all'articolo precedente, affinch\u00e9 sia chiaro di cosa si sta parlando. In questo articolo, desidero esaminare il livello che si occupa dell'archiviazione dei file e come questo possa essere utilizzato da chiunque. Storacle \u00e8 una libreria autonoma, non ha alcun legame diretto con la musica. \u00c8 possibile organizzare l'archiviazione di qualsiasi file. Nell'articolo precedente, ho","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T11:42:20+00:00","article:modified_time":"2020-05-04T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80224","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-09-27 20:25:26"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}