{"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\/de\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2013 ein dezentrales Dateispeicher","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2013 ein dezentrales Dateispeicher\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bevor ich anfange, muss ich <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">einen Link zu dem vorherigen Artikel<\/a><\/noindex>, damit klar wird, worum es genau geht.<\/p>\n<p><\/p>\n<p>In diesem Artikel m\u00f6chte ich die Schicht besprechen, die f\u00fcr die Speicherung von Dateien verantwortlich ist, und wie dies von jedem genutzt werden kann. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle ist eine eigenst\u00e4ndige Bibliothek<\/a><\/noindex>, die in keiner direkten Verbindung zur Musik steht. Es k\u00f6nnen beliebige Dateien gespeichert werden.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Im vorherigen Artikel habe ich ein wenig auf <strong>ipfs<\/strong>, aber das geschah genau im Kontext der Aufgabe, die ich gel\u00f6st habe. Insgesamt halte ich dieses Projekt f\u00fcr gro\u00dfartig. Mir gef\u00e4llt einfach die M\u00f6glichkeit, unterschiedliche Netzwerke f\u00fcr verschiedene Aufgaben zu erstellen. Das erm\u00f6glicht eine bessere Organisation der Struktur und verringert die Belastung einzelner Knoten und des Netzwerks insgesamt. Man kann sogar innerhalb eines bestimmten Projekts, wenn n\u00f6tig, das Netzwerk nach bestimmten Kriterien in St\u00fccke aufteilen, um die gesamte Belastung zu reduzieren.<\/p>\n<p><\/p>\n<p>Also nutzt storacle den Mechanismus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> zur Organisation des Netzwerks. Die Hauptmerkmale sind:<\/p>\n<p><\/p>\n<ul>\n<li>Dateien k\u00f6nnen \u00fcber jeden Knoten in den Speicher hinzugef\u00fcgt werden.<\/li>\n<li>Dateien werden vollst\u00e4ndig gespeichert, nicht in Bl\u00f6cken.<\/li>\n<li>Jede Datei hat ihren einzigartigen Hash basierend auf dem Inhalt f\u00fcr die weitere Bearbeitung.<\/li>\n<li>Dateien k\u00f6nnen zur Erh\u00f6hung der Zuverl\u00e4ssigkeit dupliziert werden.<\/li>\n<li>Die Anzahl der Dateien auf einem Knoten ist nur durch das Dateisystem begrenzt (es gibt eine Ausnahme, die weiter unten erl\u00e4utert wird)<\/li>\n<li>Die Anzahl der Dateien im Netzwerk ist durch die M\u00f6glichkeiten spreadable hinsichtlich der Anzahl der zul\u00e4ssigen Knoten im Netzwerk begrenzt, die in der zweiten Version die Arbeit mit einer unbegrenzten Anzahl von Knoten erm\u00f6glichen k\u00f6nnen (dar\u00fcber in einem anderen Artikel).<\/li>\n<\/ul>\n<p><\/p>\n<p>Ein einfaches Beispiel, wie das Ganze aus dem Programm funktioniert:<\/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  try {\n    const node = new Node({\n      port: 4000,\n      hostname: 'localhost'\n    });\n    await node.init();\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\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  try {\n    const client = new Client({\n      address: 'localhost:4000'\n    });\n    await client.init();\n    const hash = await client.storeFile('.\/my-file');\n    const link = await client.getFileLink(hash);\n    await client.removeFile(hash);\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Ein Blick von innen<\/strong><\/p>\n<p><\/p>\n<p>Unter der Haube gibt es nichts \u00dcbernat\u00fcrliches. Informationen \u00fcber die Anzahl der Dateien, ihre Gesamtgr\u00f6\u00dfe und andere Aspekte werden in einer In-Memory-Datenbank gespeichert und bei der L\u00f6schung und Hinzuf\u00fcgung von Dateien aktualisiert, sodass es nicht n\u00f6tig ist, h\u00e4ufig auf das Dateisystem zuzugreifen. Eine Ausnahme bildet die Aktivierung des M\u00fcllsammlers, wenn eine Zirkulation von Dateien erforderlich ist, sobald bestimmte Speichergr\u00f6\u00dfen erreicht werden, und nicht die Verhinderung der Hinzuf\u00fcgung neuer Dateien. In diesem Fall muss das Speichersystem durchlaufen werden, und die Arbeit mit einer gro\u00dfen Anzahl von Dateien (&gt; eine Million) kann zu erheblichen Belastungen f\u00fchren. Es ist besser, weniger Dateien zu speichern und mehr Knoten zu starten. Wenn der \"Cleaner\" deaktiviert ist, gibt es kein solches Problem.<\/p>\n<p><\/p>\n<p>Das Dateispeicherwerk besteht aus 256 Ordnern und 2 Ebenen der Verschachtelung. Die Dateien werden in Ordnern der zweiten Ebene gespeichert. Das bedeutet, dass bei 1 Million Dateien in jedem dieser Ordner etwa 62500 liegen (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>Die Namen der Ordner werden aus dem Hash der Datei gebildet, sodass ein schneller Zugriff m\u00f6glich ist, wenn der Hash bekannt ist.<\/p>\n<p><\/p>\n<p>Diese Struktur wurde unter Ber\u00fccksichtigung zahlreicher verschiedener Anforderungen an das Speicherwerk gew\u00e4hlt: Unterst\u00fctzung von schwachen Dateisystemen, bei denen es unerw\u00fcnscht ist, viele Dateien in einem Ordner zu haben, schneller Zugriff auf alle Ordner bei Bedarf usw. Eine Art Mittelweg.<\/p>\n<p><\/p>\n<p><strong>Caching<\/strong><\/p>\n<p><\/p>\n<p>Beim Hinzuf\u00fcgen von Dateien sowie beim Abrufen werden Links zu den Dateien im Cache gespeichert.<br \/>\nDank dessen ist es oft nicht notwendig, das gesamte Netzwerk auf der Suche nach einer Datei zu durchsuchen. Dies beschleunigt den Erhalt der Links und reduziert die Belastung des Netzwerks. Auch die Zwischenspeicherung erfolgt \u00fcber HTTP-Header.<\/p>\n<p><\/p>\n<p><strong>Isomorphie<\/strong><\/p>\n<p><\/p>\n<p>Der Client ist in JavaScript geschrieben und ist isomorph, er kann direkt aus dem Browser verwendet werden.\u00a0<br \/>\nEine Datei kann hochgeladen werden <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> als Skript und Zugriff auf <strong>window.ClientStoracle <\/strong>oder \u00fcber ein Build-System importiert werden usw.<\/p>\n<p><\/p>\n<p><strong>Verz\u00f6gerte Links<\/strong><\/p>\n<p><\/p>\n<p>Eine interessante Funktion ist auch der \"verz\u00f6gerte Link\". Dies ist ein Link zu einer Datei, den man synchron, hier und jetzt erhalten kann, w\u00e4hrend die Datei erst heruntergeladen wird, wenn sie im Speicher gefunden wird. Das ist sehr bequem, wenn man beispielsweise auf einer Website einige Bilder anzeigen muss. Man gibt einfach den verz\u00f6gerten Link im src an und das war's. Man kann viele Anwendungsf\u00e4lle erdenken.<\/p>\n<p><\/p>\n<p><strong>API des Clients<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 Datei speichern<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 direkten Link zur Datei abrufen<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 Liste der direkten Links zur Datei von allen Knoten, an denen sie vorhanden ist<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 Datei in den Puffer laden<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 Datei im Dateisystem speichern<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 Datei im Blob speichern (f\u00fcr die Browser-Version)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 Datei l\u00f6schen<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 verz\u00f6gerten Link erstellen<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Dateiexport auf einen anderen Server<\/strong><\/p>\n<p><\/p>\n<p>Um Dateien auf einen anderen Knoten zu \u00fcbertragen, kann man:<\/p>\n<p><\/p>\n<ul>\n<li>Einfach den gesamten Speicherordner einschlie\u00dflich der Einstellungen kopieren. (In Zukunft k\u00f6nnte das m\u00f6glicherweise nicht funktionieren)<\/li>\n<li>Nur den Ordner mit den Dateien kopieren. Aber in diesem Fall muss die Funktion <strong>node.normalizeFilesInfo()<\/strong>, einmal ausgef\u00fchrt werden, um alle Daten neu zu berechnen und in die Datenbank einzutragen.<\/li>\n<li>Die Funktion verwenden <strong>node.exportFiles()<\/strong>, die mit dem Kopieren der Dateien beginnt.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Haupteinstellungen des Knotens<\/strong><br \/>\nBeim Starten des Speicher-Knotens kann man alle erforderlichen Einstellungen angeben.<br \/>\nIch werde die wichtigsten beschreiben, das Weitere findest du auf GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 Gr\u00f6\u00dfe des Ordners mit Dateien<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 Gr\u00f6\u00dfe des tempor\u00e4ren Ordners<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 minimale Gr\u00f6\u00dfe des Speichers, die aufrechterhalten werden muss. Wenn dieser Parameter angegeben wird, werden die am wenigsten genutzten Dateien gel\u00f6scht, sobald der Speicherplatz knapp wird.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 maximale Dateigr\u00f6\u00dfe<\/li>\n<li><strong>file.minSize<\/strong> \u2014 minimale Dateigr\u00f6\u00dfe<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 bevorzugte Anzahl an Dateidubliken im Netzwerk<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 zul\u00e4ssige Dateitypen<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 unzul\u00e4ssige Dateitypen<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 zul\u00e4ssige Dateierweiterungen<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 unzul\u00e4ssige Dateierweiterungen<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 verschiedene Einstellungen zum Caching von Links<\/li>\n<\/ul>\n<p><\/p>\n<p>Fast alle Parameter, die mit Gr\u00f6\u00dfen zu tun haben, k\u00f6nnen sowohl in absoluten als auch in relativen Gr\u00f6\u00dfen angegeben werden.<\/p>\n<p><\/p>\n<p><strong>Arbeit \u00fcber die Eingabeaufforderung<\/strong><br \/>\nDie Bibliothek kann \u00fcber die Eingabeaufforderung verwendet werden. Dazu muss sie global installiert werden: <strong>npm i -g storacle<\/strong>. Danach k\u00f6nnen die ben\u00f6tigten Aktionen aus dem Verzeichnis mit dem Projekt, wo der Knoten ist, gestartet werden. Zum Beispiel, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, um eine Datei hinzuzuf\u00fcgen. Alle Aktionen sind 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>Warum k\u00f6nnte das f\u00fcr dich n\u00fctzlich sein<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Wenn du ein dezentralisiertes Projekt erstellen m\u00f6chtest, in dem das Speichern und Bearbeiten von Dateien auf bequeme Weise vorgesehen ist. Zum Beispiel nutzt das Projekt mit Musik, das zu Beginn des Artikels verlinkt ist, <strong>storacle<\/strong>.<\/li>\n<li>Wenn du an anderen Projekten arbeitest, bei denen Dateien dezentral gespeichert werden m\u00fcssen, kannst du leicht dein eigenes geschlossenes Netzwerk aufbauen, Knoten flexibel anpassen und neue hinzuf\u00fcgen, wann immer es n\u00f6tig ist.<\/li>\n<li>Wenn du einfach nur irgendwo die Dateien deiner Website speichern musst und keine Lust hast, alles selbst zu schreiben, k\u00f6nnte diese Bibliothek besser f\u00fcr dich geeignet sein.<\/li>\n<li>Wenn du ein Projekt hast, bei dem du mit Dateien arbeitest, aber alle Manipulationen \u00fcber den Browser durchf\u00fchren m\u00f6chtest, kannst du das Schreiben von serverseitigem Code vermeiden.<\/li>\n<\/ul>\n<p><\/p>\n<p>Meine Kontakte:<\/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>Quelle: <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 5.0.1.1 - 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.\" \/>\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\/de\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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 dezentrales Dateispeicher | ProHoster","description":"Bevor ich beginne, muss ich hinterlassen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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.","og:url":"https:\/\/prohoster.info\/de\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}