{"id":55408,"date":"2020-01-20T00:00:00","date_gmt":"2020-01-19T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie"},"modified":"2020-02-18T14:03:31","modified_gmt":"2020-02-18T11:03:31","slug":"effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSehr geehrte Community, dieser Artikel wird sich mit der effektiven Speicherung und Abgabe von Hunderten Millionen kleiner Dateien befassen. Auf dieser Stufe wird eine endg\u00fcltige L\u00f6sung f\u00fcr POSIX-kompatible Dateisysteme mit vollst\u00e4ndiger Unterst\u00fctzung f\u00fcr Sperren, einschlie\u00dflich Cluster-Sperren, angeboten, und anscheinend sogar schon ohne Workarounds.<\/p>\n<p>Deshalb habe ich einen eigenen spezialisierten Server geschrieben.<br \/>\nIm Verlauf der Umsetzung dieser Aufgabe gelang es, das Hauptproblem zu l\u00f6sen und gleichzeitig den Speicherplatz und den Arbeitsspeicher zu sparen, den unser Cluster-Dateisystem gnadenlos beanspruchte. Tats\u00e4chlich ist eine solche Anzahl von Dateien sch\u00e4dlich f\u00fcr jedes Cluster-Dateisystem. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Idee ist folgende:<\/p>\n<p>Einfach gesagt, \u00fcber den Server werden kleine Dateien hochgeladen, sie werden direkt im Archiv gespeichert und ebenso aus diesem gelesen, w\u00e4hrend gr\u00f6\u00dfere Dateien daneben abgelegt werden. Schema: 1 Ordner = 1 Archiv, insgesamt haben wir mehrere Millionen Archive mit kleinen Dateien, anstatt mehrere Hundert Millionen Dateien. Und all dies wurde vollumf\u00e4nglich umgesetzt, ohne irgendwelche Skripte und ohne die Dateien in tar\/zip-Archive zu stapeln.<\/p>\n<p>Ich werde versuchen, mich k\u00fcrzer zu fassen und entschuldige mich im Voraus, wenn der Beitrag langatmig wird.<\/p>\n<p>Alles begann damit, dass ich keinen geeigneten Server auf der Welt finden konnte, der Daten, die \u00fcber das HTTP-Protokoll empfangen wurden, direkt in Archive speichern konnte, ohne die Nachteile, die herk\u00f6mmlichen Archiven und Objektspeichern eigen sind. Der Grund f\u00fcr die Suche war ein auf gro\u00dfe Ma\u00dfst\u00e4be angewachsener Origin-Cluster von 10 Servern, in dem bereits 250.000.000 kleine Dateien angesammelt waren, und die Wachstumsrate wollte nicht aufh\u00f6ren.<\/p>\n<p><b>F\u00fcr diejenigen, die keine Artikel m\u00f6gen, hier eine kurze Dokumentation:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">hier<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">hier<\/a><\/noindex>.<\/p>\n<p>Und Docker gleich mit, momentan gibt es nur die Option zusammen mit Nginx drin, f\u00fcr alle F\u00e4lle:<\/p>\n<pre><code class=\"bash\">docker run -d --restart=always -e host=localhost -e root=\\\/var\\\/storage \\n-v \\\/var\\\/storage:\\\/var\\\/storage --name wzd -p 80:80 eltaline\\\/wzd<\/code><\/pre>\n<p>\nWeiter:<\/p>\n<p>Wenn es sehr viele Dateien gibt, sind erhebliche Ressourcen erforderlich, wobei das Frustrierendste ist, dass ein Teil davon umsonst verloren geht. Zum Beispiel ben\u00f6tigt ein Cluster-Dateisystem (in diesem Fall \u2013 MooseFS) f\u00fcr eine Datei, unabh\u00e4ngig von ihrer tats\u00e4chlichen Gr\u00f6\u00dfe, immer mindestens 64 KB. Das bedeutet, dass f\u00fcr Dateien mit einer Gr\u00f6\u00dfe von 3, 10 oder 30 KB auf der Festplatte jeweils 64 KB erforderlich sind. Wenn es viertel Milliarde Dateien gibt, verlieren wir zwischen 2 und 10 Terabyte. Unendlich viele neue Dateien zu erstellen, wird nicht m\u00f6glich sein, da es in MooseFS eine Einschr\u00e4nkung gibt: nicht mehr als 1 Milliarde bei einer Replik jeder Datei.<\/p>\n<p>Mit zunehmender Anzahl von Dateien wird viel RAM f\u00fcr die Metadaten ben\u00f6tigt. Auch h\u00e4ufige gro\u00dfe Dumps der Metadaten f\u00f6rdern den Verschlei\u00df von SSD-Speichern.<\/p>\n<p><b>Server wZD. Wir bringen Ordnung auf die Festplatten.<\/b><\/p>\n<p>Der Server ist in der Programmiersprache Go geschrieben. Zun\u00e4chst musste ich die Anzahl der Dateien reduzieren. Wie kann ich das erreichen? Durch Archivierung, aber in diesem Fall ohne Kompression, da meine Dateien durchweg komprimierte Bilder sind. BoltDB war eine hilfreiche L\u00f6sung, die ich zudem von ihren Nachteilen befreien musste, was in der Dokumentation festgehalten ist.<\/p>\n<p>Insgesamt sind anstelle von viertel Milliarde Dateien in meinem Fall nur noch 10 Millionen Bolt-Archive \u00fcbrig geblieben. Wenn ich die aktuelle Struktur der Verzeichnisse, die mit Dateien gef\u00fcllt sind, \u00e4ndern k\u00f6nnte, w\u00e4re es m\u00f6glicherweise m\u00f6glich, die Anzahl auf etwa 1 Million Dateien zu reduzieren. <\/p>\n<p>Alle kleinen Dateien werden in Bolt-Archive verpackt, die automatisch die Namen der Verzeichnisse erhalten, in denen sie sich befinden, w\u00e4hrend alle gro\u00dfen Dateien neben den Archiven bleiben; es macht keinen Sinn, sie zu verpacken, dies ist konfigurierbar. Kleine \u2014 archivieren wir, gro\u00dfe \u2014 lassen wir unver\u00e4ndert. Der Server funktioniert sowohl mit den einen als auch mit den anderen transparent.<\/p>\n<p><b>Architektur und Besonderheiten des Servers wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Server funktioniert unter den Betriebssystemen Linux, BSD, Solaris und OSX. Ich habe ihn nur f\u00fcr die AMD64-Architektur unter Linux getestet, aber er sollte auch f\u00fcr ARM64, PPC64, MIPS64 geeignet sein.<\/p>\n<p><b>Hauptmerkmale:<\/b><\/p>\n<ul>\n<li>Multithreading;<\/li>\n<li>Multiserver, der Fehlertoleranz und Lastenverteilung gew\u00e4hrleistet;<\/li>\n<li>Maximale Transparenz f\u00fcr den Benutzer oder Entwickler;<\/li>\n<li>Unterst\u00fctzte HTTP-Methoden: GET, HEAD, PUT und DELETE;<\/li>\n<li>Management des Verhaltens beim Lesen und Schreiben \u00fcber Client-Header;<\/li>\n<li>Unterst\u00fctzung f\u00fcr flexibel konfigurierbare virtuelle Hosts;<\/li>\n<li>Unterst\u00fctzung von CRC zur Gew\u00e4hrleistung der Datenintegrit\u00e4t beim Schreiben\/Lesen;<\/li>\n<li>Halb dynamische Puffer f\u00fcr minimalen Speicherverbrauch und optimale Netzwerkeinstellungen;<\/li>\n<li>Verz\u00f6gerte Datenkompaktion;<\/li>\n<li>Zus\u00e4tzlich wird ein multithreaded Archivator wZA f\u00fcr die Migration von Dateien ohne Unterbrechung des Dienstes angeboten.<\/li>\n<\/ul>\n<p>\n<b>Echte Erfahrung:<\/b><\/p>\n<p>Ich habe den Server und den Archivator lange Zeit mit Live-Daten entwickelt und getestet, jetzt funktioniert er erfolgreich in einem Cluster mit 250.000.000 kleinen Dateien (Bildern), die in 15.000.000 Verzeichnissen auf separaten SATA-Diskern angeordnet sind. Das Cluster aus 10 Servern stellt einen Origin-Server dar, der hinter einem CDN-Netzwerk installiert ist. F\u00fcr seine Wartung werden 2 Nginx-Server + 2 wZD-Server eingesetzt.<\/p>\n<p>Denjenigen, die diesen Server nutzen m\u00f6chten, sei geraten, die Verzeichnisstruktur vor der Verwendung zu planen, sofern dies anwendbar ist. Ich m\u00f6chte sofort klarstellen, dass der Server nicht daf\u00fcr gedacht ist, alles in ein einziges Bolt-Archiv zu stecken.<\/p>\n<p><b>Leistungstest:<\/b><\/p>\n<p>Je kleiner die Gr\u00f6\u00dfe der archivierten Datei, desto schneller erfolgen die GET- und PUT-Operationen damit. Lassen Sie uns die gesamte Schreibzeit eines HTTP-Clients in normale Dateien und in Bolt-Archive sowie das Lesen vergleichen. Es wird mit Dateien von 32 KB, 256 KB, 1024 KB, 4096 KB und 32768 KB gearbeitet.<\/p>\n<p>Bei der Arbeit mit Bolt-Archiven wird die Integrit\u00e4t der Daten jeder Datei \u00fcberpr\u00fcft (es wird CRC verwendet), und sowohl vor der Aufnahme als auch nach der Aufnahme erfolgt ein sofortiges Lesen und Neuberechnen. Dies verursacht nat\u00fcrlich Verz\u00f6gerungen, aber das Wichtigste ist die Datensicherheit. <\/p>\n<p>Ich habe Leistungstests auf SSD-Speichermedien durchgef\u00fchrt, da die Tests auf SATA-Diskern keinen klaren Unterschied zeigen.<\/p>\n<p><b>Diagramme zu den Testergebnissen:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWie zu sehen ist, ist der Zeitunterschied beim Lesen und Schreiben zwischen archivierten und nicht archivierten Dateien f\u00fcr kleine Dateien gering.<\/p>\n<p>Ein ganz anderes Bild erhalten wir jedoch bei Tests mit dem Lesen und Schreiben von Dateien mit einer Gr\u00f6\u00dfe von 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Effektive Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Zeitunterschied beim Lesen der Dateien liegt im Bereich von 5-25 ms. Beim Schreiben ist die Situation schlechter, der Unterschied betr\u00e4gt etwa 150 ms. Aber in diesem Fall ist es auch nicht notwendig, gro\u00dfe Dateien hochzuladen, das macht einfach keinen Sinn; sie k\u00f6nnen unabh\u00e4ngig von den Archiven leben.<\/p>\n<p>*Technisch kann dieser Server auch f\u00fcr Aufgaben verwendet werden, die NoSQL erfordern.<\/p>\n<p><b>Wesentliche Methoden zur Arbeit mit dem wZD-Server:<\/b><\/p>\n<p>Hochladen einer normalen Datei:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nHochladen einer Datei in ein Bolt-Archiv (wenn der Serverparameter fmaxsize, der die maximale Gr\u00f6\u00dfe der Datei bestimmt, die in das Archiv aufgenommen werden kann, nicht \u00fcberschritten wird; falls \u00fcberschritten, wird die Datei wie gewohnt neben dem Archiv hochgeladen):<\/p>\n<pre><code class=\"bash\">curl -X PUT -H &quot;Archive: 1&quot; --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nDatei herunterladen (wenn im Verzeichnis und im Archiv Dateien mit denselben Namen vorhanden sind, wird beim Herunterladen standardm\u00e4\u00dfig die nicht archivierte Datei priorisiert):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nDatei aus dem Bolt-Archiv herunterladen (erzwingen):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Eine Beschreibung anderer Methoden finden Sie in der Dokumentation.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Dokumentation wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Dokumentation wZA<\/a><\/noindex><\/p>\n<p>Der Server unterst\u00fctzt derzeit nur das HTTP-Protokoll, HTTPS funktioniert momentan nicht. Die POST-Methode wird ebenfalls nicht unterst\u00fctzt (es ist noch nicht entschieden, ob sie ben\u00f6tigt wird oder nicht).<\/p>\n<p>Wer im Quellcode st\u00f6bert, wird dort einen Keks finden, den nicht jeder mag. Ich habe den Hauptcode jedoch nicht an die Funktionen des Web-Frameworks gebunden, au\u00dfer dem Interrupt-Handler, sodass ich ihn sp\u00e4ter schnell auf jede Engine umschreiben kann.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Entwicklung eines eigenen Replikators und Distributors + Geo f\u00fcr die Nutzung in gro\u00dfen Systemen ohne Cluster-Dateisysteme (alles professionell).<\/li>\n<li>Die M\u00f6glichkeit einer vollst\u00e4ndigen reversiblen Wiederherstellung der Metadaten im Falle eines vollst\u00e4ndigen Verlusts (bei Verwendung des Distributors).<\/li>\n<li>Natives Protokoll f\u00fcr die M\u00f6glichkeit der Nutzung permanenter Netzwerkverbindungen und Treiber f\u00fcr verschiedene Programmiersprachen.<\/li>\n<li>Erweiterte Nutzungsm\u00f6glichkeiten der NoSQL-Komponente.<\/li>\n<li>Kompression verschiedener Typen (gzip, zstd, snappy) f\u00fcr Dateien oder Werte innerhalb von Bolt-Archiven und f\u00fcr regul\u00e4re Dateien.<\/li>\n<li>Verschl\u00fcsselung verschiedener Typen f\u00fcr Dateien oder Werte innerhalb von Bolt-Archiven und f\u00fcr regul\u00e4re Dateien.<\/li>\n<li>Versp\u00e4tete serverseitige Videokonvertierung, auch auf GPU.<\/li>\n<\/ul>\n<p>\nIch bin fertig, ich hoffe, dieser Server wird jemandem n\u00fctzlich sein, Lizenz BSD-3, Urheberrecht doppelt, da ich ohne das Unternehmen, in dem ich arbeite, den Server nicht geschrieben h\u00e4tte. Ich bin der alleinige Entwickler. Ich w\u00e4re dankbar f\u00fcr gefundene Bugs und Feature-Anfragen.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/484312\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u0432\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0438 \u0432\u044b\u0434\u0430\u0447\u0435 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f POSIX \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043d\u044b\u0445, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0434\u0430\u0436\u0435 \u0443\u0436\u0435 \u0431\u0435\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e \u0445\u043e\u0434\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55408","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\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\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie\" \/>\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\udd47\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. Self-Hosted \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie\" \/>\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-01-19T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:31+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\udd47Effiziente Speicherung von Hunderten Millionen kleiner Dateien. Self-Hosted L\u00f6sung | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","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\udd47\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0442\u0435\u043d \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. Self-Hosted \u0440\u0435\u0448\u0435\u043d\u0438\u0435 | ProHoster","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","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-01-19T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:31+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55408","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 19:44:26","updated":"2022-09-30 03:35:08","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\/55408","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=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}