{"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 widmet sich der effizienten Speicherung und Ausgabe von Hunderten Millionen kleiner Dateien. An dieser Stelle wird eine endg\u00fcltige L\u00f6sung f\u00fcr POSIX-kompatible Dateisysteme mit vollst\u00e4ndiger Unterst\u00fctzung f\u00fcr Sperren, einschlie\u00dflich Cluster-Sperren, und anscheinend sogar ohne Workarounds angeboten.<\/p>\n<p>F\u00fcr diesen Zweck habe ich meinen eigenen spezialisierten Server geschrieben.<br \/>\nW\u00e4hrend der Umsetzung dieser Aufgabe gelang es mir, das Hauptproblem zu l\u00f6sen und gleichzeitig Speicherplatz und RAM zu sparen, den unser clustergest\u00fctztes Dateisystem unbarmherzig beansprucht hat. Eine solche Menge an Dateien ist f\u00fcr jedes clustergest\u00fctzte Dateisystem sch\u00e4dlich. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Die Idee ist folgende:<\/p>\n<p>Einfach gesagt: \u00dcber den Server werden kleine Dateien hochgeladen, sie werden direkt in einem Archiv gespeichert und ebenso aus diesem gelesen, w\u00e4hrend gro\u00dfe Dateien daneben abgelegt werden. Schema: 1 Ordner = 1 Archiv, somit haben wir mehrere Millionen Archive mit kleinen Dateien anstelle von mehreren Hundert Millionen Dateien. Und das alles wurde vollst\u00e4ndig umgesetzt, ohne irgendwelche Skripte und das Ablegen von Dateien in tar\/zip Archiven.<\/p>\n<p>Ich werde versuchen, mich kurz zu fassen, und entschuldige mich im Voraus, falls der Beitrag umfangreich wird.<\/p>\n<p>Alles begann damit, dass ich keinen geeigneten Server in der Welt finden konnte, der Daten, die \u00fcber das HTTP-Protokoll empfangen wurden, direkt in Archive speichern kann, ohne die M\u00e4ngel herk\u00f6mmlicher Archive und Objektspeicher zu haben. Der Grund f\u00fcr die Suche war ein stark gewachsener Origin-Cluster aus 10 Servern, der bereits 250.000.000 kleine Dateien angesammelt hatte und dessen Wachstumstendenz nicht aufh\u00f6ren wollte.<\/p>\n<p><b>F\u00fcr diejenigen, die keine Artikel lesen m\u00f6gen und kurze Dokumentationen bevorzugen:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">hierhin<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">hierhin<\/a><\/noindex>.<\/p>\n<p>Und Docker gleichzeitig, derzeit gibt es nur die Option zusammen mit nginx, falls n\u00f6tig:<\/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 viele Dateien gibt, sind erhebliche Ressourcen erforderlich, und das Frustrierende ist, dass ein Teil davon sinnlos verloren geht. Bei der Verwendung eines verteilten Dateisystems (in diesem Fall MooseFS) ben\u00f6tigt 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 ben\u00f6tigt werden. Wenn es sich um viertel Milliarden Dateien handelt, verlieren wir zwischen 2 und 10 Terabyte. Es wird nicht m\u00f6glich sein, unendlich viele neue Dateien zu erstellen, da es auch in MooseFS eine Begrenzung gibt: nicht mehr als 1 Milliarde mit einer Kopie jeder Datei.<\/p>\n<p>Mit steigender Anzahl an Dateien ben\u00f6tigt man viel RAM f\u00fcr Metadaten. Auch h\u00e4ufige gro\u00dfe Dumps von Metadaten tragen zum Verschlei\u00df von SSD-Laufwerken bei.<\/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 verringern. Wie macht man das? Durch Archivierung, aber in diesem Fall ohne Kompression, da meine Dateien durchgehend komprimierte Bilder sind. Dabei kam mir BoltDB zugute, die ich zudem von M\u00e4ngeln befreien musste, was in der Dokumentation festgehalten ist.<\/p>\n<p>Anstatt viertel Milliarde Dateien sind in meinem Fall nur noch 10 Millionen Bolt-Archive \u00fcbrig geblieben. H\u00e4tte ich die M\u00f6glichkeit, die aktuelle Struktur der Verzeichnisse zu \u00e4ndern, k\u00f6nnte die Anzahl m\u00f6glicherweise auf etwa 1 Million Dateien reduziert werden. <\/p>\n<p>Alle kleinen Dateien werden in Bolt-Archive gepackt, die automatisch die Namen der Verzeichnisse annehmen, in denen sie liegen, w\u00e4hrend alle gro\u00dfen Dateien neben den Archiven verbleiben, da es keinen Sinn macht, sie zu verpacken. Kleinere \u2014 archivieren wir, gro\u00dfe \u2014 lassen wir unver\u00e4ndert. Der Server arbeitet transparent mit beiden.<\/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 l\u00e4uft unter den Betriebssystemen Linux, BSD, Solaris und OSX. Ich habe 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-Architektur, die Ausfallsicherheit und Lastenverteilung gew\u00e4hrleistet;<\/li>\n<li>Maximale Transparenz f\u00fcr den Nutzer oder Entwickler;<\/li>\n<li>Unterst\u00fctzte HTTP-Methoden: GET, HEAD, PUT und DELETE;<\/li>\n<li>Steuerung des Verhaltens beim Lesen und Schreiben \u00fcber Client-Header;<\/li>\n<li>Unterst\u00fctzung von flexibel konfigurierbaren virtuellen Hosts;<\/li>\n<li>Unterst\u00fctzung der CRC-Datenintegrit\u00e4t beim Schreiben\/Lesen;<\/li>\n<li>Halb-dynamische Puffer f\u00fcr minimalen Speicherverbrauch und optimale Netzwerkanpassung;<\/li>\n<li>Verz\u00f6gerte Datenkompaktierung;<\/li>\n<li>Zus\u00e4tzlich wird der mehrl\u00e4ufige Archivator wZA f\u00fcr die Migration von Dateien ohne Dienstunterbrechung angeboten.<\/li>\n<\/ul>\n<p>\n<b>Echte Erfahrungen:<\/b><\/p>\n<p>Ich habe den Server und den Archivierer \u00fcber einen l\u00e4ngeren Zeitraum hinweg mit Live-Daten entwickelt und getestet. Jetzt funktioniert er erfolgreich auf einem Cluster, das 250.000.000 kleine Dateien (Bilder) umfasst, die in 15.000.000 Verzeichnissen auf separaten SATA-Laufwerken gespeichert sind. Der Cluster aus 10 Servern stellt einen Origin-Server dar, der hinter einem CDN-Netzwerk eingerichtet ist. F\u00fcr seine Wartung werden 2 Nginx-Server und 2 wZD-Server verwendet.<\/p>\n<p>F\u00fcr diejenigen, die diesen Server nutzen m\u00f6chten, macht es Sinn, die Verzeichnisstruktur vor der Nutzung zu planen, wenn das zutrifft. Ich m\u00f6chte gleich klarstellen, dass der Server nicht daf\u00fcr vorgesehen ist, alles in ein einziges Bolt-Archiv zu packen.<\/p>\n<p><b>Leistungstests:<\/b><\/p>\n<p>Je kleiner die Gr\u00f6\u00dfe der archivierten Datei, desto schneller werden die GET- und PUT-Operationen ausgef\u00fchrt. Lassen Sie uns die gesamte Zeit, die ein HTTP-Client ben\u00f6tigt, um in normale Dateien und in Bolt-Archive zu schreiben, sowie das Lesen vergleichen. Die Arbeit mit Dateien der Gr\u00f6\u00dfe 32 KB, 256 KB, 1024 KB, 4096 KB und 32768 KB wird verglichen.<\/p>\n<p>Bei der Arbeit mit Bolt-Archiven wird die Integrit\u00e4t der Daten jeder Datei \u00fcberpr\u00fcft (es wird CRC verwendet). Vor und nach dem Schreiben erfolgt eine Echtzeitlekt\u00fcre und Neuberechnung, was nat\u00fcrlich Verz\u00f6gerungen mit sich bringt, aber das Wichtigste ist die Datensicherheit. <\/p>\n<p>Ich habe Leistungstests auf SSD-Laufwerken durchgef\u00fchrt, da die Tests auf SATA-Laufwerken keinen deutlichen Unterschied zeigen.<\/p>\n<p><b>Grafiken 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 f\u00fcr kleine Dateien zwischen archiven und nicht archivierten Dateien gering.<\/p>\n<p>Eine ganz andere Situation ergibt sich bei dem Test zum 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 sieht es schlechter aus, der Unterschied betr\u00e4gt etwa 150 ms. In diesem Fall ist es jedoch nicht erforderlich, gro\u00dfe Dateien hochzuladen, das macht einfach keinen Sinn, sie k\u00f6nnen getrennt von den Archiven existieren.<\/p>\n<p>*Technisch kann dieser Server auch f\u00fcr Aufgaben verwendet werden, die NoSQL erfordern.<\/p>\n<p><b>Hauptmethoden zur Arbeit mit dem wZD-Server:<\/b><\/p>\n<p>Hochladen einer gew\u00f6hnlichen 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 das Bolt Archiv (sofern der Serverparameter fmaxsize, der die maximale Gr\u00f6\u00dfe der Datei bestimmt, die in das Archiv aufgenommen werden kann, nicht \u00fcberschritten wird; andernfalls 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>\nHerunterladen der Datei (wenn auf der Festplatte und im Archiv Dateien mit demselben Namen vorhanden sind, erh\u00e4lt standardm\u00e4\u00dfig die nicht archivierte Datei Vorrang beim Herunterladen):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nHerunterladen der Datei aus dem Bolt Archiv (zwangsweise):<\/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 der anderen 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 ist noch nicht verf\u00fcgbar. Auch die POST-Methode wird nicht unterst\u00fctzt (es wurde noch nicht entschieden, ob sie ben\u00f6tigt wird oder nicht).<\/p>\n<p>Wer im Quellcode nachschaut, wird dort eine \u00dcberraschung finden; nicht jeder mag sie, aber ich habe den Hauptcode nicht an die Funktionen des Webframeworks gebunden, au\u00dfer dem Interrupt-Handler, sodass ich ihn in Zukunft schnell auf fast jedem Framework umschreiben kann.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Entwicklung eines eigenen Replikators und Distributors + Geo, um die Verwendung in gro\u00dfen Systemen ohne Cluster-FS zu erm\u00f6glichen (alles professionell)<\/li>\n<li>Die M\u00f6glichkeit der vollst\u00e4ndigen reversiblen Wiederherstellung von Metadaten bei vollst\u00e4ndigem Verlust (bei der Verwendung eines Distributors)<\/li>\n<li>Natives Protokoll zur Nutzung dauerhafter 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 normale Dateien<\/li>\n<li>Verschl\u00fcsselung verschiedener Typen f\u00fcr Dateien oder Werte innerhalb von Bolt-Archiven und f\u00fcr normale Dateien<\/li>\n<li>Verz\u00f6gerte serverseitige Video-Konvertierung, einschlie\u00dflich auf GPU<\/li>\n<\/ul>\n<p>\nIch habe alles, hoffe, dieser Server ist hilfreich f\u00fcr jemanden, Lizenz BSD-3, doppeltes Urheberrecht, denn ohne die Firma, in der ich arbeite, h\u00e4tte ich auch keinen Server geschrieben. Ich bin der einzige 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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:description\" content=\"\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\" \/>\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\udd47Effektive Speicherung von Hunderten Millionen kleiner Dateien. Selbstgehostete L\u00f6sung | ProHoster","description":"Sehr geehrte Community, dieser Artikel wird sich mit der effektiven Speicherung und Ausgabe von Hunderten Millionen kleiner Dateien besch\u00e4ftigen. In diesem Schritt wird eine endg\u00fcltige L\u00f6sung f\u00fcr POSIX-kompatible Dateisysteme mit umfassender Unterst\u00fctzung f\u00fcr Sperren, einschlie\u00dflich Clustern, sowie scheinbar sogar ohne Workarounds vorgeschlagen. Daher habe ich f\u00fcr diesen Zweck meinen eigenen spezialisierten Server geschrieben. W\u00e4hrend ich diese Aufgabe umsetze.","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:description":"\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","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"},"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}]}}