{"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\/sk\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00e1\u017een\u00e1 komunita, tento \u010dl\u00e1nok bude venovan\u00fd efekt\u00edvnemu skladovaniu a spr\u00e1ve stoviek mili\u00f3nov mal\u00fdch s\u00faborov. V tejto f\u00e1ze sa navrhuje kone\u010dn\u00e9 rie\u0161enie pre s\u00faborov\u00e9 syst\u00e9my kompatibiln\u00e9 s POSIX s plnou podporou zamykania, vr\u00e1tane klastra, a zd\u00e1 sa, \u017ee u\u017e aj bez obmedzen\u00ed.<\/p>\n<p>Preto som pre tento \u00fa\u010del nap\u00edsal vlastn\u00fd \u0161pecializovan\u00fd server.<br \/>\nPo\u010das realiz\u00e1cie tejto \u00falohy sa podarilo vyrie\u0161i\u0165 hlavn\u00fa problematiku, z\u00e1rove\u0148 dosiahnu\u0165 \u00fasporu diskov\u00e9ho priestoru a opera\u010dnej pam\u00e4te, ktor\u00fa nezadr\u017eate\u013ene spotrebov\u00e1val n\u00e1\u0161 klastrov\u00fd s\u00faborov\u00fd syst\u00e9m. Vlastne tak\u00e9 mno\u017estvo s\u00faborov je \u0161kodliv\u00e9 pre ak\u00fdko\u013evek klastrov\u00fd s\u00faborov\u00fd syst\u00e9m. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>My\u0161lienka je tak\u00e1:<\/p>\n<p>Jednoduch\u00fdmi slovami, cez server sa nahr\u00e1vaj\u00fa mal\u00e9 s\u00fabory, ktor\u00e9 sa ukladaj\u00fa priamo do arch\u00edvu a rovnako sa z neho na\u010d\u00edtavaj\u00fa, zatia\u013e \u010do ve\u013ek\u00e9 s\u00fabory sa ukladaj\u00fa ved\u013ea. Sch\u00e9ma: 1 prie\u010dinok = 1 arch\u00edv, tak\u017ee m\u00e1me nieko\u013eko mili\u00f3nov arch\u00edvov s mal\u00fdmi s\u00fabormi, nie nieko\u013eko stoviek mili\u00f3nov s\u00faborov. A to v\u0161etko je plne implementovan\u00e9, bez ak\u00fdchko\u013evek skriptov a rozkladania s\u00faborov do tar\/zip arch\u00edvov.<\/p>\n<p>Pok\u00fasim sa vysvetli\u0165 stru\u010dnej\u0161ie, vopred sa ospravedl\u0148ujem, ak bude pr\u00edspevok rozsiahly.<\/p>\n<p>V\u0161etko sa za\u010dalo t\u00fdm, \u017ee som nedok\u00e1zal n\u00e1js\u0165 vhodn\u00fd server na svete, ktor\u00fd by mohol uklada\u0165 d\u00e1ta prijat\u00e9 cez protokol HTTP priamo do arch\u00edvov, aby sa predi\u0161lo nedostatkom typick\u00fdm pre be\u017en\u00e9 arch\u00edvy a objektov\u00e9 \u00falo\u017eisk\u00e1. D\u00f4vodom mojich h\u013eadania bol roz\u0161\u00edren\u00fd klaster Origin s desiatimi servermi, v ktorom sa u\u017e nahromadilo 250 000 000 mal\u00fdch s\u00faborov a tendencia rastu sa nemala zastavi\u0165.<\/p>\n<p><b>T\u00fdm, ktor\u00ed nemaj\u00fa radi \u010d\u00edtanie \u010dl\u00e1nkov a trocha dokument\u00e1cie je jednoduch\u0161ia:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">sem<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">sem<\/a><\/noindex>.<\/p>\n<p>A docker z\u00e1rove\u0148, teraz je k dispoz\u00edcii iba s nginxom vo vn\u00fatri pre ka\u017ed\u00fd pr\u00edpad:<\/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>\n\u010ealej:<\/p>\n<p>Ak je s\u00faborov ve\u013emi ve\u013ea, potrebn\u00e9 s\u00fa zna\u010dn\u00e9 zdroje; \u010do je v\u0161ak najhor\u0161ie, \u010das\u0165 ich sa str\u00e1ca nadarmo. Napr\u00edklad pri pou\u017eit\u00ed klastrov\u00e9ho s\u00faborov\u00e9ho syst\u00e9mu (v tomto pr\u00edpade \u2013 MooseFS) s\u00fabor, bez oh\u013eadu na jeho skuto\u010dn\u00fa ve\u013ekos\u0165, v\u017edy zaber\u00e1 minim\u00e1lne 64 KB. To znamen\u00e1, \u017ee pre s\u00fabory ve\u013ekosti 3, 10 alebo 30 KB potrebujeme na disku 64 KB. Ak je s\u00faborov \u0161tvr\u0165 miliarda, prich\u00e1dzame o 2 a\u017e 10 terabajtov. S vytv\u00e1ran\u00edm nov\u00fdch s\u00faborov do nekone\u010dna to nebude mo\u017en\u00e9, preto\u017ee v tej istej MooseFS existuje obmedzenie: nie viac ako 1 miliarda s jednou replikou ka\u017ed\u00e9ho s\u00faboru.<\/p>\n<p>S rast\u00facim po\u010dtom s\u00faborov je potrebn\u00e9 ve\u013ea opera\u010dnej pam\u00e4te pre metad\u00e1ta. Rovnako \u010dast\u00e9 ve\u013ek\u00e9 dumpy metad\u00e1t prispievaj\u00fa k opotrebovaniu SSD \u00falo\u017e\u00edsk.<\/p>\n<p><b>Server wZD. Urob\u00edme poriadok na diskoch.<\/b><\/p>\n<p>Server je naprogramovan\u00fd v jazyku Go. Predov\u0161etk\u00fdm som potreboval zredukova\u0165 po\u010det s\u00faborov. Ako to spravi\u0165? Arch\u00edvovan\u00edm, ale v tomto pr\u00edpade bez kompresie, preto\u017ee m\u00e1m s\u00fabory, ktor\u00e9 s\u00fa vylo\u017eene zhu\u0161\u0165ovan\u00e9 obr\u00e1zky. Na pomoc mi pri\u0161la BoltDB, ktor\u00fa som musel e\u0161te zbavi\u0165 nedostatkov, \u010do je odr\u00e1\u017ean\u00e9 v dokument\u00e1cii.<\/p>\n<p>Tak namiesto \u0161tvr\u0165 miliardy s\u00faborov zostalo len 10 mili\u00f3nov Bolt arch\u00edvov. Keby som mal mo\u017enos\u0165 zmeni\u0165 aktu\u00e1lnu \u0161trukt\u00faru nap\u013a\u0148ania adres\u00e1rov s\u00fabormi, bolo by mo\u017eno mo\u017en\u00e9 zredukova\u0165 to na pribli\u017ene 1 mili\u00f3n s\u00faborov. <\/p>\n<p>V\u0161etky mal\u00e9 s\u00fabory s\u00fa zabalen\u00e9 do Bolt arch\u00edvov, ktor\u00e9 automaticky dost\u00e1vaj\u00fa n\u00e1zvy adres\u00e1rov, v ktor\u00fdch sa nach\u00e1dzaj\u00fa, a v\u0161etky ve\u013ek\u00e9 s\u00fabory ost\u00e1vaj\u00fa ved\u013ea arch\u00edvov, nem\u00e1 zmysel ich balenie, je to nastavite\u013en\u00e9. Mal\u00e9 \u2013 arch\u00edvujeme, ve\u013ek\u00e9 \u2013 ponech\u00e1vame bezo zmien. Server funguje transparentne s oboma typmi.<\/p>\n<p><b>Architekt\u00fara a vlastnosti servera wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServer funguje pod opera\u010dn\u00fdmi syst\u00e9mami Linux, BSD, Solaris a OSX. Testoval som ho len pre architekt\u00faru AMD64 pod Linuxom, ale mal by by\u0165 vhodn\u00fd aj pre ARM64, PPC64, MIPS64.<\/p>\n<p><b>Hlavn\u00e9 funkcie:<\/b><\/p>\n<ul>\n<li>Viacvl\u00e1kno;<\/li>\n<li>Multiservernos\u0165 zaru\u010duj\u00faca odolnos\u0165 vo\u010di zlyhaniu a vyv\u00e1\u017eenie za\u0165a\u017eenia;<\/li>\n<li>Maxim\u00e1lna transparentnos\u0165 pre pou\u017e\u00edvate\u013ea alebo v\u00fdvoj\u00e1ra;<\/li>\n<li>Podporovan\u00e9 HTTP met\u00f3dy: GET, HEAD, PUT a DELETE;<\/li>\n<li>Riadenie spr\u00e1vania pri \u010d\u00edtan\u00ed a z\u00e1pise prostredn\u00edctvom klientskych hlavi\u010diek;<\/li>\n<li>Podpora flexibilne nastavite\u013en\u00fdch virtu\u00e1lnych hostite\u013eov;<\/li>\n<li>Podpora CRC integrity d\u00e1t pri z\u00e1pise\/\u010d\u00edtan\u00ed;<\/li>\n<li>Polodynamick\u00e9 buffery pre minim\u00e1lnu spotrebu pam\u00e4te a optim\u00e1lne nastavenie sie\u0165ov\u00e9ho v\u00fdkonu;<\/li>\n<li>Odlo\u017een\u00e1 kompakcia d\u00e1t;<\/li>\n<li>Navy\u0161e sa pon\u00faka multithreaded archiver wZA na migr\u00e1ciu s\u00faborov bez zastavenia slu\u017eby.<\/li>\n<\/ul>\n<p>\n<b>Re\u00e1lny z\u00e1\u017eitok:<\/b><\/p>\n<p>Dlho som vyv\u00edjal a testoval server a archiver na \u017eiv\u00fdch d\u00e1tach, teraz \u00faspe\u0161ne funguje na klastri pozost\u00e1vaj\u00facom z 250 000 000 drobn\u00fdch s\u00faborov (obr\u00e1zkov), umiestnen\u00fdch v 15 000 000 adres\u00e1roch na oddelen\u00fdch SATA diskoch. Klastr z 10 serverov predstavuje Origin server umiestnen\u00fd za CDN sie\u0165ou. Na jeho \u00fadr\u017ebu sa pou\u017e\u00edvaj\u00fa 2 servery Nginx + 2 servery wZD.<\/p>\n<p>Pre t\u00fdch, ktor\u00ed sa rozhodn\u00fa pou\u017ei\u0165 tento server, m\u00e1 zmysel napl\u00e1nova\u0165 \u0161trukt\u00faru adres\u00e1rov pred jeho pou\u017eit\u00edm, ak je to aplikovate\u013en\u00e9. Hne\u010f na za\u010diatku by som mal poveda\u0165, \u017ee server nie je ur\u010den\u00fd na to, aby sa v\u0161etko natla\u010dilo do jedn\u00e9ho Bolt arch\u00edvu.<\/p>\n<p><b>Testovanie v\u00fdkonnosti:<\/b><\/p>\n<p>\u010c\u00edm men\u0161ia je ve\u013ekos\u0165 zaarchivovan\u00e9ho s\u00faboru, t\u00fdm r\u00fdchlej\u0161ie sa vykon\u00e1vaj\u00fa oper\u00e1cie GET a PUT. Porovn\u00e1me celkov\u00fd \u010das z\u00e1pisu HTTP klientom do be\u017en\u00fdch s\u00faborov a do Bolt arch\u00edvov, rovnako aj \u010d\u00edtanie. Porovn\u00e1va sa pr\u00e1ca so s\u00fabormi ve\u013ekosti 32 KB, 256 KB, 1024 KB, 4096 KB a 32768 KB.<\/p>\n<p>Pri pr\u00e1ci s Bolt arch\u00edvmi sa kontroluje integrita d\u00e1t ka\u017ed\u00e9ho s\u00faboru (pou\u017e\u00edva sa CRC), pred z\u00e1pisom a tie\u017e po z\u00e1pise sa vykon\u00e1va \u010d\u00edtanie za behu a prepo\u010det, to prirodzene sp\u00f4sobuje oneskorenia, ale najd\u00f4le\u017eitej\u0161ia je bezpe\u010dnos\u0165 d\u00e1t. <\/p>\n<p>Testy v\u00fdkonnosti som uskuto\u010d\u0148oval na SSD \u00falo\u017ei\u0161tiach, preto\u017ee na SATA diskoch testy neukazuj\u00fa jasn\u00fd rozdiel.<\/p>\n<p><b>Grafy pod\u013ea v\u00fdsledkov testovania:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAko vidno, pre mal\u00e9 s\u00fabory je rozdiel v \u010dase \u010d\u00edtania a z\u00e1pisu medzi zaarchivovan\u00fdmi a nezaarchivovan\u00fdmi s\u00fabormi mal\u00fd.<\/p>\n<p>\u00daplne in\u00fd obraz u\u017e z\u00edskame pri teste \u010d\u00edtania a z\u00e1pisu s\u00faborov ve\u013ekosti 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Self-Hosted rie\u0161enie\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRozdiel v \u010dase medzi \u010d\u00edtan\u00edm s\u00faborov je v rozmedz\u00ed 5-25 ms. So z\u00e1pisom je to hor\u0161ie, rozdiel je pribli\u017ene 150 ms. Ale v tomto pr\u00edpade ani nie je potrebn\u00e9 nahr\u00e1va\u0165 ve\u013ek\u00e9 s\u00fabory, v tom jednoducho nie je zmysel, m\u00f4\u017eu \u017ei\u0165 samostatne od arch\u00edvov.<\/p>\n<p>*Technicky je mo\u017en\u00e9 tento server pou\u017ei\u0165 aj pre \u00falohy vy\u017eaduj\u00face NoSQL.<\/p>\n<p><b>Hlavn\u00e9 met\u00f3dy pr\u00e1ce so serverom wZD:<\/b><\/p>\n<p>Nahr\u00e1vanie be\u017en\u00e9ho s\u00faboru:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nNahr\u00e1vanie s\u00faboru do Bolt arch\u00edvu (ak nebol prekro\u010den\u00fd serverov\u00fd parameter fmaxsize, ur\u010duj\u00faci maxim\u00e1lnu ve\u013ekos\u0165 s\u00faboru, ktor\u00fd m\u00f4\u017ee by\u0165 zahrnut\u00fd do arch\u00edvu, ak je prekro\u010den\u00fd, s\u00fabor sa nahr\u00e1 ako obvykle ved\u013ea arch\u00edvu):<\/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>\nS\u0165ahovanie s\u00faboru (ak na disku a v arch\u00edve existuj\u00fa s\u00fabory s rovnak\u00fdmi n\u00e1zvami, pri s\u0165ahovan\u00ed sa prednos\u0165 pod\u013ea predvolen\u00e9ho nastavenia d\u00e1va nezaarchivovan\u00e9mu s\u00faboru):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nS\u0165ahovanie s\u00faboru z Bolt arch\u00edvu (nasilu):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Popis in\u00fdch met\u00f3d je v dokument\u00e1cii.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Dokument\u00e1cia wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Dokument\u00e1cia wZA<\/a><\/noindex><\/p>\n<p>Server zatia\u013e podporuje iba protokol HTTP, s HTTPS zatia\u013e nefunguje. Tie\u017e nie je podporovan\u00e1 met\u00f3da POST (e\u0161te nie je rozhodnut\u00e9, \u010di je potrebn\u00e1).<\/p>\n<p>Kto sa pozrie do zdrojov\u00e9ho k\u00f3du, objav\u00ed tam bonb\u00f3n, nie v\u0161etk\u00fdm sa p\u00e1\u010di, ale neza\u010dlenil som hlavn\u00fd k\u00f3d do funkci\u00ed webov\u00e9ho r\u00e1mca, okrem obsluhova\u010da preru\u0161en\u00ed, tak\u017ee ho m\u00f4\u017eem r\u00fdchlo prek\u00f3di\u0165 na takmer ktor\u00fdko\u013evek motor.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>V\u00fdvoj vlastn\u00e9ho replik\u00e1tora a distrib\u00fatora + geo pre mo\u017enos\u0165 pou\u017eitia vo ve\u013ek\u00fdch syst\u00e9moch bez klastrov\u00fdch FS (V\u0161etko profesion\u00e1lne)<\/li>\n<li>Mo\u017enos\u0165 \u00fapln\u00e9ho reverzn\u00e9ho obnovenia metad\u00e1t pri ich \u00faplnej strate (v pr\u00edpade pou\u017eitia distrib\u00fatora)<\/li>\n<li>Nativn\u00fd protokol pre mo\u017enos\u0165 pou\u017e\u00edvania trval\u00fdch sie\u0165ov\u00fdch spojen\u00ed a ovl\u00e1da\u010de pre r\u00f4zne programovacie jazyky<\/li>\n<li>Roz\u0161\u00edren\u00e9 mo\u017enosti pou\u017e\u00edvania NoSQL komponentu<\/li>\n<li>Kompresie r\u00f4znych typov (gzip, zstd, snappy) pre s\u00fabory alebo hodnoty vn\u00fatri Bolt arch\u00edvov a pre be\u017en\u00e9 s\u00fabory<\/li>\n<li>\u0160ifrovanie r\u00f4znych typov pre s\u00fabory alebo hodnoty vn\u00fatri Bolt arch\u00edvov a pre be\u017en\u00e9 s\u00fabory<\/li>\n<li>Odlo\u017een\u00e1 serverov\u00e1 video konverzia, vr\u00e1tane GPU<\/li>\n<\/ul>\n<p>\nTo je v\u0161etko, d\u00fafam, \u017ee tento server niekomu posl\u00fa\u017ei, licencia BSD-3, dvojit\u00fd copyright, preto\u017ee keby nebolo firmy, v ktorej pracujem, nenap\u00edsal by som ani server. Som v\u00fdvoj\u00e1r v jedinom \u010d\u00edsle. Budem v\u010fa\u010dn\u00fd za n\u00e1jden\u00e9 chyby a n\u00e1vrhy na funkcie.<br \/>\n<br \/>Zdroj: <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\/sk\/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=\"sk_SK\" \/>\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\/sk\/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\udd47Efekt\u00edvne ukladanie stoviek mili\u00f3nov mal\u00fdch s\u00faborov. Rie\u0161enie Self-Hosted | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}