{"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\/da\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00e6re f\u00e6llesskab, denne artikel vil fokusere p\u00e5 effektiv opbevaring og udlevering af hundredvis af millioner sm\u00e5 filer. P\u00e5 nuv\u00e6rende tidspunkt pr\u00e6senteres der en endelig l\u00f8sning for POSIX-kompatible filsystemer med fuld underst\u00f8ttelse af l\u00e5se, herunder klyngel\u00e5se, og angiveligt uden brug af hurtigfikser.<\/p>\n<p>Derfor har jeg skrevet min egen specialiserede server til dette form\u00e5l.<br \/>\nUnder implementeringen af denne opgave lykkedes det at l\u00f8se det prim\u00e6re problem og samtidig opn\u00e5 besparelser p\u00e5 diskplads og RAM, som vores klyngedrevne filsystem ellers forbrugte ukontrolleret. En s\u00e5dan m\u00e6ngde filer er skadelig for ethvert klyngedrevet filsystem. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Id\u00e9en er s\u00e5dan:<\/p>\n<p>Kort sagt, sm\u00e5 filer uploades via serveren, de gemmes direkte i arkivet og l\u00e6ses ogs\u00e5 derfra, mens store filer placeres ved siden af. Skema: 1 mappe = 1 arkiv, hvilket resulterer i flere millioner arkiver med sm\u00e5 filer i stedet for flere hundrede millioner filer. Og alt dette er implementeret fuldst\u00e6ndigt, uden brug af scripts eller opdeling af filer i tar\/zip-arkiver.<\/p>\n<p>Jeg vil fors\u00f8ge at v\u00e6re kortfattet, og jeg beklager p\u00e5 forh\u00e5nd, hvis indl\u00e6gget bliver omfangsrigt.<\/p>\n<p>Det hele startede med, at jeg ikke kunne finde en passende server i verden, der kunne gemme data modtaget via HTTP-protokollen direkte i arkiver, s\u00e5 der ikke ville v\u00e6re ulemper forbundet med almindelige arkiver og objektlagre. \u00c5rsagen til s\u00f8gningen var en oprindelig klynge best\u00e5ende af 10 servere, der voksede sig stor, og som allerede havde samlet 250.000.000 sm\u00e5 filer, og tendensen til v\u00e6kst skulle ikke stoppe.<\/p>\n<p><b>Til dem, der ikke kan lide at l\u00e6se artikler, er her en kortere dokumentation:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">herhen<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">herhen<\/a><\/noindex>.<\/p>\n<p>Og Docker samtidig, der er i \u00f8jeblikket kun en mulighed for dette med Nginx indeni for sikkerheds skyld:<\/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\u00e6ste:<\/p>\n<p>Hvis der er mange filer, kr\u00e6ves der betydelige ressourcer, og det mest frustrerende er, at en del af dem g\u00e5r til spilde. For eksempel, ved brug af et klyngesystem til filh\u00e5ndtering (i dette tilf\u00e6lde - MooseFS), optager en fil, uanset dens faktiske st\u00f8rrelse, altid minimum 64 KB. Det betyder, at for filer p\u00e5 3, 10 eller 30 KB, kr\u00e6ves der stadig 64 KB plads p\u00e5 disken. Hvis der er en kvart milliard filer, mister vi mellem 2 til 10 terabyte. Det vil ikke v\u00e6re muligt uendeligt at oprette nye filer, da der i MooseFS er en gr\u00e6nse: h\u00f8jst 1 milliard med \u00e9n kopi af hver fil.<\/p>\n<p>Efterh\u00e5nden som antallet af filer stiger, kr\u00e6ves der meget RAM til metadataene. Hyppige store dumps af metadata bidrager ogs\u00e5 til slid p\u00e5 SSD-diskene.<\/p>\n<p><b>Server wZD. Vi rydder op p\u00e5 diskene.<\/b><\/p>\n<p>Serveren er skrevet i Go. F\u00f8rst og fremmest havde jeg brug for at reducere antallet af filer. Hvordan g\u00f8r man det? Ved at arkivere, men i dette tilf\u00e6lde uden kompression, da mine filer er fuldst\u00e6ndig komprimerede billeder. BoltDB kom til hj\u00e6lp, som jeg ogs\u00e5 m\u00e5tte rette nogle mangler ved, hvilket er beskrevet i dokumentationen.<\/p>\n<p>I alt er der i mit tilf\u00e6lde kun blevet 10 millioner Bolt-arkiver tilbage i stedet for en kvart milliard filer. Hvis jeg havde mulighed for at \u00e6ndre den nuv\u00e6rende struktur for udfyldning af mapper med filer, kunne man m\u00e5ske reducere det til cirka 1 million filer. <\/p>\n<p>Alle sm\u00e5 filer pakkes i Bolt-arkiver, som f\u00e5r navne automatisk baseret p\u00e5 de mapper, de ligger i, mens alle store filer forbliver t\u00e6t p\u00e5 arkiverne; det giver ikke mening at pakke dem, og det er konfigurerbart. Sm\u00e5 filer arkiveres, store filer forbliver u\u00e6ndrede. Serveren fungerer problemfrit med b\u00e5de typer.<\/p>\n<p><b>Arkitektur og funktioner af serveren wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServeren fungerer under styresystemerne Linux, BSD, Solaris og OSX. Jeg har kun testet det for AMD64-arkitekturen under Linux, men det burde ogs\u00e5 fungere for ARM64, PPC64, MIPS64.<\/p>\n<p><b>Hovedfunktionerne:<\/b><\/p>\n<ul>\n<li>Multitr\u00e5dning;<\/li>\n<li>Multiserverops\u00e6tning, der sikrer fejl tolerance og belastningsbalancering;<\/li>\n<li>Maksimal gennemsigtighed for brugerne eller udvikleren;<\/li>\n<li>Underst\u00f8ttede HTTP-metoder: GET, HEAD, PUT og DELETE;<\/li>\n<li>Styring af adf\u00e6rd ved l\u00e6sning og skrivning gennem klientoverskrifter;<\/li>\n<li>Underst\u00f8ttelse af fleksibelt konfigurerbare virtuelle v\u00e6rter;<\/li>\n<li>Underst\u00f8ttelse af CRC-integritet ved skrivning\/l\u00e6sning;<\/li>\n<li>Halvdynamiske buffere for minimal hukommelsesforbrug og optimal justering af netv\u00e6rksydelse;<\/li>\n<li>Forsinket komprimering af data;<\/li>\n<li>Der tilbydes desuden en multitr\u00e5det arkiveringsl\u00f8sning wZA til migrering af filer uden nedetid for tjenesten.<\/li>\n<\/ul>\n<p>\n<b>Reelle erfaringer:<\/b><\/p>\n<p>Jeg har udviklet og testet serveren og arkivsystemet med live data i et stykke tid, og det fungerer nu tilfredsstillende p\u00e5 et cluster best\u00e5ende af 250.000.000 sm\u00e5 filer (billeder) placeret i 15.000.000 mapper p\u00e5 forskellige SATA-diske. Clusteren best\u00e5ende af 10 servere fungerer som en origin-server, der er placeret bag et CDN-netv\u00e6rk. Til betjening bruges 2 Nginx-servere + 2 wZD-servere.<\/p>\n<p>For dem, der overvejer at bruge denne server, giver det mening at planl\u00e6gge mappestrukturen p\u00e5 forh\u00e5nd, hvis det er relevant. Jeg skal straks sige, at serveren ikke er beregnet til at putte alt i \u00e9t Bolt-arkiv.<\/p>\n<p><b>Ydelsestest:<\/b><\/p>\n<p>Jo mindre st\u00f8rrelsen p\u00e5 den arkiverede fil er, desto hurtigere udf\u00f8res GET- og PUT-operationer p\u00e5 den. Lad os sammenligne den samlede tid til at skrive via HTTP-klienter til almindelige filer og Bolt-arkiver, samt l\u00e6sning. Der sammenlignes arbejde med filer af st\u00f8rrelserne 32 KB, 256 KB, 1024 KB, 4096 KB og 32768 KB.<\/p>\n<p>N\u00e5r der arbejdes med Bolt-arkiver, kontrolleres dataintegriteten for hver fil (CRC anvendes), der sker afl\u00e6sning on-the-fly f\u00f8r og efter skrivning, og dette medf\u00f8rer naturligvis forsinkelser, men det vigtigste er datasikkerheden. <\/p>\n<p>Jeg udf\u00f8rte ydelsestests p\u00e5 SSD-drev, da tester p\u00e5 SATA-diske ikke viste nogen klar forskel.<\/p>\n<p><b>Diagrammer baseret p\u00e5 testresultater:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSom det fremg\u00e5r, er forskellen i tid til l\u00e6sning og skrivning mellem arkiverede og ikke-arkiverede filer ubetydelig for sm\u00e5 filer.<\/p>\n<p>Vi f\u00e5r et helt andet billede ved testen af l\u00e6sning og skrivning af filer p\u00e5 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Effektiv opbevaring af hundredvis af millioner sm\u00e5 filer. Selvhostet l\u00f8sning\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nForskellen i tid mellem l\u00e6sning af filer er mellem 5-25 ms. Med skrivning ser det v\u00e6rre ud, forskellen er omkring 150 ms. Men i dette tilf\u00e6lde er det ikke n\u00f8dvendigt at uploade store filer; det giver simpelthen ikke mening, de kan eksistere separat fra arkiverne.<\/p>\n<p>*Teknisk set kan denne server ogs\u00e5 bruges til opgaver, der kr\u00e6ver NoSQL.<\/p>\n<p><b>De grundl\u00e6ggende metoder til arbejde med wZD-serveren:<\/b><\/p>\n<p>Upload af en almindelig fil:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nUpload af en fil til et Bolt-arkiv (hvis serverparameteren fmaxsize, der bestemmer den maksimale st\u00f8rrelse p\u00e5 en fil, der kan inkluderes i arkivet, ikke overskrides, ellers vil filen blive uploadet normalt ved siden af 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>\nHentning af filen (hvis der er filer med samme navn p\u00e5 disken og i arkivet, gives der som standard prioritet til filen, der ikke er komprimeret):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nTvangsm\u00e6ssig hentning af fil fra Bolt-arkiv:<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Beskrivelse af andre metoder findes 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>Serveren underst\u00f8tter kun HTTP-protokollen i \u00f8jeblikket; HTTPS fungerer endnu ikke. POST-metoden underst\u00f8ttes heller ikke (det er stadig ikke afklaret, om det er n\u00f8dvendigt).<\/p>\n<p>Den, der graver i kildekoden, vil finde et slik, ikke alle kan lide det, men jeg har ikke bundet hovedkoden til webframeworkets funktioner, bortset fra behandleren for afbrydelser, s\u00e5 jeg kan hurtigt omskrive til n\u00e6sten enhver motor senere.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Udvikling af en egen replikator og distribut\u00f8r + geo for mulighed for brug i store systemer uden kluster-FS (alt sammen professionelt)<\/li>\n<li>Mulighed for fuld reversibel gendannelse af metadata ved fuld tab (ved brug af distribut\u00f8r)<\/li>\n<li>Nativ protokol for mulighed for brug af permanente netv\u00e6rksforbindelser og drivere til forskellige programmeringssprog<\/li>\n<li>Udvidede muligheder for brug af NoSQL komponenten<\/li>\n<li>Komprimering af forskellige typer (gzip, zstd, snappy) for filer eller v\u00e6rdier inden for Bolt-arkiver og for almindelige filer<\/li>\n<li>Kryptering af forskellige typer for filer eller v\u00e6rdier inden for Bolt-arkiver og for almindelige filer<\/li>\n<li>Forsinket server video konvertering, inklusiv p\u00e5 GPU<\/li>\n<\/ul>\n<p>\nDet var alt, jeg h\u00e5ber denne server vil v\u00e6re nyttig for nogen, BSD-3 licens, dobbelt copyright, da jeg ikke ville have skrevet serveren, hvis ikke for virksomheden, hvor jeg arbejder. Jeg er udvikler i ental. Jeg ville s\u00e6tte pris p\u00e5 at f\u00e5 rapporteret fejl og funktionsanmodninger.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 opbevaring af hundreder af millioner sm\u00e5 filer. Self-Hosted l\u00f8sning | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}