{"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\/sv\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nB\u00e4sta community, denna artikel kommer att handla om effektiv lagring och hantering av hundratals miljoner sm\u00e5 filer. F\u00f6r n\u00e4rvarande presenteras en slutgiltig l\u00f6sning f\u00f6r POSIX-kompatibla filsystem med fullst\u00e4ndig st\u00f6d f\u00f6r l\u00e5sningar, inklusive klusterl\u00e5sningar, och verkar till och med vara utan tillf\u00e4lliga l\u00f6sningar.<\/p>\n<p>D\u00e4rf\u00f6r har jag skrivit en egen specialiserad server f\u00f6r detta \u00e4ndam\u00e5l.<br \/>\nUnder implementeringen av denna uppgift lyckades vi l\u00f6sa det grundl\u00e4ggande problemet och samtidigt uppn\u00e5 en betydande besparing i diskutrymme och RAM, som v\u00e5r klusterfilsystem slukade. En s\u00e5dan m\u00e4ngd filer \u00e4r skadlig f\u00f6r vilket klusterfilsystem som helst. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Id\u00e9n \u00e4r enkel:<\/p>\n<p>Med andra ord, sm\u00e5 filer laddas upp via servern, de sparas direkt i ett arkiv och l\u00e4ses ocks\u00e5 d\u00e4rifr\u00e5n, medan stora filer placeras bredvid. Schema: 1 mapp = 1 arkiv, vilket ger oss flera miljoner arkiv med sm\u00e5 filer, ist\u00e4llet f\u00f6r flera hundra miljoner filer. Och allt \u00e4r fullt genomf\u00f6rt utan skript och utan att sprida filer i tar\/zip-arkiv.<\/p>\n<p>Jag ska f\u00f6rs\u00f6ka sammanfatta det kort, jag ber om urs\u00e4kt p\u00e5 f\u00f6rhand om inl\u00e4gget blir omfattande.<\/p>\n<p>Allt b\u00f6rjade med att jag inte kunde hitta en l\u00e4mplig server i v\u00e4rlden som kunde spara data som mottagits via HTTP-protokollet direkt i arkiv, utan bristerna som k\u00e4nnetecknar vanliga arkiv och objektlager. Anledningen till s\u00f6kandet var den v\u00e4xande Origin-klustret med 10 servrar, d\u00e4r det redan hade samlats 250 000 000 sm\u00e5 filer, och v\u00e4xttrenden s\u00e5g inte ut att avta.<\/p>\n<p><b>F\u00f6r dem som inte gillar att l\u00e4sa artiklar och f\u00f6redrar kortare dokumentation:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">hit<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">hit<\/a><\/noindex>.<\/p>\n<p>Och docker samtidigt, just nu finns det bara ett alternativ med nginx inuti f\u00f6r s\u00e4kerhets skull:<\/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>\nN\u00e4sta:<\/p>\n<p>Om antalet filer \u00e4r mycket stort kr\u00e4vs betydande resurser, och det mest frustrerande \u00e4r att en del av dem g\u00e5r till spillo. Till exempel, vid anv\u00e4ndning av ett klusterfilssystem (i det h\u00e4r fallet \u2013 MooseFS), upptar en fil, oavsett dess faktiska storlek, alltid minst 64 KB. Det inneb\u00e4r att f\u00f6r filer med storlekar p\u00e5 3, 10 eller 30 KB kr\u00e4vs 64 KB p\u00e5 disken. Om det finns en kvarts miljard filer, f\u00f6rlorar vi mellan 2 och 10 terabyte. Det \u00e4r inte m\u00f6jligt att skapa nya filer i o\u00e4ndlighet, eftersom MooseFS har en begr\u00e4nsning: h\u00f6gst 1 miljard med en replik av varje fil.<\/p>\n<p>Allt eftersom antalet filer \u00f6kar, beh\u00f6vs mycket RAM f\u00f6r metadata. Dessutom bidrar frekventa stora dumpningar av metadata till slitage p\u00e5 SSD-lagringsenheter.<\/p>\n<p><b>Server wZD. Vi ordnar upp p\u00e5 diskarna.<\/b><\/p>\n<p>Servern \u00e4r skriven i Go. F\u00f6rst och fr\u00e4mst beh\u00f6vde jag minska antalet filer. Hur g\u00f6r man detta? Genom att arkivera, men i detta fall utan kompression, eftersom mina filer \u00e4r en serie av komprimerade bilder. Till min hj\u00e4lp kom BoltDB, \u00e4ven om jag var tvungen att \u00e5tg\u00e4rda vissa brister, vilket \u00e4r dokumenterat.<\/p>\n<p>Ist\u00e4llet f\u00f6r en kvarts miljard filer kvarst\u00e5r det bara 10 miljoner Bolt-arkiv i mitt fall. Om jag haft m\u00f6jlighet att \u00e4ndra den nuvarande filstrukturen f\u00f6r katalogerna, skulle det kanske ha kunnat minskas till ungef\u00e4r 1 miljon filer. <\/p>\n<p>Alla sm\u00e5filer packas i Bolt-arkiv, som automatiskt f\u00e5r namn efter de kataloger d\u00e4r de ligger, medan alla stora filer f\u00f6rblir i n\u00e4rheten av arkiven; det \u00e4r meningsl\u00f6st att paketera dem, detta \u00e4r konfigurerbart. Sm\u00e5 \u2013 arkivera, stora \u2013 l\u00e4mna of\u00f6r\u00e4ndrade. Servern fungerar transparent f\u00f6r b\u00e5de och.<\/p>\n<p><b>Arkitekturen och egenskaperna hos servern wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServern k\u00f6rs under operativsystemen Linux, BSD, Solaris och OSX. Jag har testat endast f\u00f6r AMD64-arkitektur under Linux, men den b\u00f6r ocks\u00e5 fungera f\u00f6r ARM64, PPC64, MIPS64.<\/p>\n<p><b>Huvudfunktioner:<\/b><\/p>\n<ul>\n<li>Multithreading;<\/li>\n<li>Multiserver, vilket s\u00e4kerst\u00e4ller drifts\u00e4kerhet och lastbalansering;<\/li>\n<li>Maximal transparens f\u00f6r anv\u00e4ndaren eller utvecklaren;<\/li>\n<li>St\u00f6dda HTTP-metoder: GET, HEAD, PUT och DELETE;<\/li>\n<li>Hantera beteende vid l\u00e4sning och skrivning via klienthuvuden;<\/li>\n<li>St\u00f6d f\u00f6r flexibelt konfigurerbara virtuella v\u00e4rdar;<\/li>\n<li>St\u00f6d f\u00f6r CRC-integritet f\u00f6r data n\u00e4r de skrivs\/l\u00e4ses;<\/li>\n<li>Halvdynamiska buffrar f\u00f6r minimal minnesanv\u00e4ndning och optimal n\u00e4tverksprestanda;<\/li>\n<li>F\u00f6rdr\u00f6jd datakomprimering;<\/li>\n<li>Dessutom erbjuds den flerdelade arkivprogrammet wZA f\u00f6r migrering av filer utan att st\u00e4nga av tj\u00e4nsten.<\/li>\n<\/ul>\n<p>\n<b>Verklig erfarenhet:<\/b><\/p>\n<p>Jag har utvecklat och testat en server och en arkiverare med verkliga data under en ganska l\u00e5ng tid, och nu fungerar den framg\u00e5ngsrikt p\u00e5 ett kluster som inkluderar 250 000 000 sm\u00e5 filer (bilder), som \u00e4r bel\u00e4gna i 15 000 000 kataloger p\u00e5 separata SATA-diskar. Klustret av 10 servrar fungerar som en origin-server, installerad bakom ett CDN-n\u00e4tverk. F\u00f6r dess drift anv\u00e4nds 2 Nginx-servrar + 2 wZD-servrar.<\/p>\n<p>F\u00f6r dem som best\u00e4mmer sig f\u00f6r att anv\u00e4nda denna server \u00e4r det klokt att planera katalogstrukturen innan anv\u00e4ndning, om det \u00e4r till\u00e4mpligt. Jag vill genast p\u00e5peka att servern inte \u00e4r avsedd f\u00f6r att stoppa allt i 1 Bolt-arkiv.<\/p>\n<p><b>Prestandatestning:<\/b><\/p>\n<p>Ju mindre storleken p\u00e5 den arkiverade filen, desto snabbare utf\u00f6rs GET- och PUT-operationerna med den. Vi j\u00e4mf\u00f6r den totala skrivtiden fr\u00e5n HTTP-klienten till vanliga filer och Bolt-arkiv, liksom l\u00e4sningen. J\u00e4mf\u00f6relsen g\u00f6rs med filer av storlekarna 32 KB, 256 KB, 1024 KB, 4096 KB och 32768 KB.<\/p>\n<p>Vid arbete med Bolt-arkiv kontrolleras dataintegriteten f\u00f6r varje fil (CRC anv\u00e4nds), och b\u00e5de f\u00f6re och efter skrivning sker en l\u00e4sning och ber\u00e4kning i farten, vilket naturligtvis medf\u00f6r f\u00f6rdr\u00f6jningar, men viktigast av allt \u2014 dataskydd. <\/p>\n<p>Prestandatetterna utf\u00f6rde jag p\u00e5 SSD-lagringsenheter, eftersom tester p\u00e5 SATA-diskar inte visar n\u00e5gon tydlig skillnad.<\/p>\n<p><b>Diagram \u00f6ver testresultaten:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSom syns \u00e4r skillnaden i l\u00e4s- och skrivtid mellan arkiverade och icke-arkiverade filer liten f\u00f6r sm\u00e5 filer.<\/p>\n<p>En helt annan bild f\u00e5r vi vid test av l\u00e4sning och skrivning av filer av storleken 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSkillnaden i tid mellan l\u00e4sning av filer ligger inom 5-25 ms. F\u00f6r skrivning \u00e4r situationen s\u00e4mre, med en skillnad p\u00e5 cirka 150 ms. Men i detta fall kr\u00e4vs det inte att ladda upp stora filer, det finns helt enkelt ingen mening med det, de kan leva separat fr\u00e5n arkiven.<\/p>\n<p>*Tekniskt sett kan denna server \u00e4ven anv\u00e4ndas f\u00f6r uppgifter som kr\u00e4ver NoSQL.<\/p>\n<p><b>Huvudmetoder f\u00f6r arbete med wZD-servern:<\/b><\/p>\n<p>Uppladdning av en vanlig fil:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nUppladdning av en fil i Bolt-arkiv (om serverparametern fmaxsize, som best\u00e4mmer den maximala filstorleken som kan inkluderas i arkivet, inte \u00f6verskrids; om den \u00f6verskrids, laddas filen upp som vanligt bredvid arkivet):<\/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>\nNedladdning av fil (om det finns filer med samma namn p\u00e5 disken och i arkivet, ges prioritet till den oarkiverade filen som standard):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nNedladdning av fil fr\u00e5n Bolt-arkivet (tvingad):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Beskrivning av andra metoder finns i dokumentationen.<\/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>Servern st\u00f6der f\u00f6r n\u00e4rvarande endast HTTP-protokollet, HTTPS fungerar inte. POST-metoden st\u00f6ds inte heller (detta har \u00e4nnu inte beslutats om det beh\u00f6vs eller inte).<\/p>\n<p>Den som gr\u00e4ver i k\u00e4llkoden kommer att uppt\u00e4cka en godisbit, som inte alla gillar, men jag har inte kopplat huvudkoden till webbframework-funktionerna, f\u00f6rutom avbrottshanteraren, s\u00e5 jag kan snabbt skriva om den p\u00e5 n\u00e4stan vilken motor som helst.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Utveckling av egen replikator och distribut\u00f6r + geo f\u00f6r m\u00f6jligheter att anv\u00e4nda i stora system utan klusterfilsystem (Allt p\u00e5 vuxen niv\u00e5)<\/li>\n<li>M\u00f6jlighet till full reversibel \u00e5terst\u00e4llning av metadata vid total f\u00f6rlust (vid anv\u00e4ndning av distribut\u00f6ren)<\/li>\n<li>Nativt protokoll f\u00f6r m\u00f6jligheten att anv\u00e4nda permanenta n\u00e4tverksanslutningar och drivrutiner f\u00f6r olika programmeringsspr\u00e5k<\/li>\n<li>Ut\u00f6kade m\u00f6jligheter att anv\u00e4nda NoSQL-komponenten<\/li>\n<li>Kompressering av olika typer (gzip, zstd, snappy) f\u00f6r filer eller v\u00e4rden inuti Bolt-arkiven och f\u00f6r vanliga filer<\/li>\n<li>Kryptering av olika typer f\u00f6r filer eller v\u00e4rden inuti Bolt-arkiven och f\u00f6r vanliga filer<\/li>\n<li>F\u00f6rdr\u00f6jd serverbaserad videokonvertering, inklusive p\u00e5 GPU<\/li>\n<\/ul>\n<p>\nDet var allt, jag hoppas att denna server kommer att vara till nytta f\u00f6r n\u00e5gon, BSD-3 licens, dubbel upphovsr\u00e4tt, eftersom utan f\u00f6retaget jag arbetar p\u00e5 skulle jag inte ha skrivit servern. Jag \u00e4r utvecklaren i ental. Jag skulle vara tacksam f\u00f6r uppt\u00e4ckta buggar och funktionsf\u00f6rfr\u00e5gningar.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Effektiv lagring av hundratals miljoner sm\u00e5 filer. Sj\u00e4lvhostad l\u00f6sning | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}