{"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\/ro\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStimat\u0103 comunitate, acest articol va fi dedicat stoc\u0103rii eficiente \u0219i livr\u0103rii a sute de milioane de fi\u0219iere mici. \u00cen aceast\u0103 etap\u0103, se propune o solu\u021bie final\u0103 pentru sistemele de fi\u0219iere compatibile POSIX, cu suport complet pentru bloc\u0103ri, inclusiv cele de tip cluster, \u0219i se pare c\u0103 deja f\u0103r\u0103 col\u021buri t\u0103iate.<\/p>\n<p>De aceea, pentru aceast\u0103 scop, am scris propriul meu server specializat.<br \/>\nPe parcursul implement\u0103rii acestei sarcini, am reu\u0219it s\u0103 rezolv\u0103m problema principal\u0103, ob\u021bin\u00e2nd \u00een acela\u0219i timp economii de spa\u021biu pe disc \u0219i memorie RAM, pe care sistemul nostru de fi\u0219iere \u00een cluster o consuma f\u0103r\u0103 mil\u0103. Aceast\u0103 cantitate de fi\u0219iere este d\u0103un\u0103toare oric\u0103rui sistem de fi\u0219iere \u00een cluster. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ideea este urm\u0103toarea:<\/p>\n<p>Pe scurt, prin server sunt \u00eenc\u0103rcate fi\u0219ierele mici, acestea fiind salvate direct \u00een arhiv\u0103 \u0219i la fel citite din aceasta, iar fi\u0219ierele mari sunt stocate separat. Schema: 1 folder = 1 arhiv\u0103, avem astfel c\u00e2teva milioane de arhive cu fi\u0219iere mici, \u00een loc de c\u00e2teva sute de milioane de fi\u0219iere. \u0218i totul este realizat complet, f\u0103r\u0103 scripturi \u0219i f\u0103r\u0103 a distribui fi\u0219iere \u00een arhive tar\/zip.<\/p>\n<p>Voi \u00eencerca s\u0103 fiu scurt, \u00eemi cer scuze dinainte dac\u0103 articolul va fi dens.<\/p>\n<p>A \u00eenceput totul cu faptul c\u0103 nu am g\u0103sit un server potrivit \u00een lume care s\u0103 poat\u0103 salva datele primite prin protocolul HTTP direct \u00een arhive, astfel \u00eenc\u00e2t s\u0103 nu existe dezavantajele asociate arhivelor obi\u0219nuite \u0219i stoc\u0103rii de obiecte. Iar cauzele c\u0103ut\u0103rilor au fost un cluster Origin extins la scar\u0103 mare din 10 servere, \u00een care s-au adunat deja 250.000.000 de fi\u0219iere mici, iar tendin\u021ba de cre\u0219tere nu p\u0103rea s\u0103 se opreasc\u0103.<\/p>\n<p><b>Pentru cei care nu iubesc s\u0103 citeasc\u0103 articole \u0219i prefer\u0103 o documenta\u021bie mai succint\u0103:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">aici<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">aici<\/a><\/noindex>.<\/p>\n<p>\u0218i docker, de asemenea, acum exist\u0103 o variant\u0103 doar \u00eempreun\u0103 cu nginx \u00een interior, pentru orice eventualitate:<\/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>\nApoi:<\/p>\n<p>Dac\u0103 exist\u0103 foarte multe fi\u0219iere, sunt necesare resurse semnificative, iar, din p\u0103cate, o parte din acestea se pierd \u00een van. De exemplu, atunci c\u00e2nd se utilizeaz\u0103 un sistem de fi\u0219iere \u00een cluster (\u00een acest caz - MooseFS), un fi\u0219ier, indiferent de dimensiunea real\u0103, ocup\u0103 \u00eentotdeauna minimum 64 KB. Asta \u00eenseamn\u0103 c\u0103 pentru fi\u0219iere de 3, 10 sau 30 KB pe disc sunt necesare 64 KB. Dac\u0103 sunt un sfert de miliard de fi\u0219iere, pierdem \u00eentre 2 \u0219i 10 terabyte. Crearea de fi\u0219iere noi la nesf\u00e2r\u0219it nu este posibil\u0103, deoarece \u00een MooseFS exist\u0103 o limitare: nu mai mult de 1 miliard cu o replic\u0103 pentru fiecare fi\u0219ier.<\/p>\n<p>Pe m\u0103sur\u0103 ce num\u0103rul fi\u0219ierelor cre\u0219te, este nevoie de mult\u0103 memorie RAM pentru metadate. De asemenea, dump-urile mari ale metadatelor contribuie la uzura SSD-urilor.<\/p>\n<p><b>Server wZD. Facem ordine pe discuri.<\/b><\/p>\n<p>Serverul este scris \u00een limbajul Go. \u00cen primul r\u00e2nd, trebuia s\u0103 reduc num\u0103rul fi\u0219ierelor. Cum s\u0103 fac asta? Prin arhivare, dar \u00een acest caz f\u0103r\u0103 compresie, deoarece fi\u0219ierele mele sunt doar imagini comprimate. BoltDB a venit \u00een ajutor, pe care a trebuit s\u0103 o \u00eembun\u0103t\u0103\u021besc, ceea ce este reflectat \u00een documenta\u021bie.<\/p>\n<p>Astfel, \u00een loc de un sfert de miliard de fi\u0219iere, \u00een cazul meu au r\u0103mas doar 10 milioane de arhive Bolt. Dac\u0103 a\u0219 fi avut ocazia s\u0103 modific structura actual\u0103 de umplere a directorilor cu fi\u0219iere, ar fi fost posibil s\u0103 reduc aproximativ la 1 milion de fi\u0219iere. <\/p>\n<p>Toate fi\u0219ierele mici sunt comprimate \u00een arhive Bolt, care primesc automat numele directorilor \u00een care se afl\u0103, iar toate fi\u0219ierele mari r\u0103m\u00e2n al\u0103turi de arhive; nu este sens s\u0103 le comprimi, acest lucru este configurabil. Mici - arhiv\u0103m, mari - le l\u0103s\u0103m nemodificate. Serverul func\u021bioneaz\u0103 transparent at\u00e2t cu acestea, c\u00e2t \u0219i cu celelalte.<\/p>\n<p><b>Arhitectura \u0219i caracteristicile serverului wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServerul func\u021bioneaz\u0103 sub sistemele de operare Linux, BSD, Solaris \u0219i OSX. Am testat doar pentru arhitectura AMD64 sub Linux, dar ar trebui s\u0103 fie compatibil \u0219i pentru ARM64, PPC64, MIPS64.<\/p>\n<p><b>Caracteristicile principale:<\/b><\/p>\n<ul>\n<li>Multithreading;<\/li>\n<li>Multiserveritate, asigur\u00e2nd redundan\u021b\u0103 \u0219i echilibrarea \u00eenc\u0103rc\u0103rii;<\/li>\n<li>Transparen\u021b\u0103 maxim\u0103 pentru utilizator sau dezvoltator;<\/li>\n<li>Metode HTTP suportate: GET, HEAD, PUT \u0219i DELETE;<\/li>\n<li>Gestionarea comportamentului la citire \u0219i scriere prin antetele clientului;<\/li>\n<li>Suport pentru gazde virtuale configurabile flexibil;<\/li>\n<li>Suport pentru integritatea datelor CRC la scriere\/lectur\u0103;<\/li>\n<li>Bufferi semi-dinamici pentru un consum minim de memorie \u0219i optimizarea performan\u021bei re\u021belei;<\/li>\n<li>Compac\u021bie a datelor \u00eent\u00e2rziat\u0103;<\/li>\n<li>\u00cen plus, se ofer\u0103 un arhivator multi-threaded wZA pentru migrarea fi\u0219ierelor f\u0103r\u0103 a opri serviciul.<\/li>\n<\/ul>\n<p>\n<b>Experien\u021b\u0103 real\u0103:<\/b><\/p>\n<p>Am dezvoltat \u0219i testat un server \u0219i un arhivator pe date live timp de o perioad\u0103 destul de \u00eendelungat\u0103, acum acesta func\u021bioneaz\u0103 cu succes pe un cluster care include 250.000.000 de fi\u0219iere mici (imagini), situate \u00een 15.000.000 de directoare pe discuri SATA separate. Clusterul format din 10 servere reprezint\u0103 un server Origin, situat \u00een spatele unei re\u021bele CDN. Pentru \u00eentre\u021binerea acestuia se folosesc 2 servere Nginx + 2 servere wZD.<\/p>\n<p>Celor care decid s\u0103 foloseasc\u0103 acest server, are sens s\u0103 planifice structura directoarelor \u00eenainte de utilizare, dac\u0103 este cazul. Precizez c\u0103 serverul nu este destinat pentru a \u00eempacheta totul \u00eentr-un singur arhiv\u0103 Bolt.<\/p>\n<p><b>Testarea performan\u021bei:<\/b><\/p>\n<p>Cu c\u00e2t dimensiunea fi\u0219ierului arhivat este mai mic\u0103, cu at\u00e2t opera\u021biile GET \u0219i PUT se execut\u0103 mai repede. S\u0103 compar\u0103m timpul total de scriere al clientului HTTP \u00een fi\u0219ierele obi\u015fnuite \u0219i \u00een arhivele Bolt, de asemenea, \u0219i citirea. Se compar\u0103 lucrul cu fi\u0219iere de dimensiuni de 32 KB, 256 KB, 1024 KB, 4096 KB \u0219i 32768 KB.<\/p>\n<p>Atunci c\u00e2nd lucr\u0103m cu arhivele Bolt, se verific\u0103 integritatea datelor fiec\u0103rui fi\u0219ier (se folose\u0219te CRC), \u00eenainte de scriere \u0219i de asemenea, dup\u0103 scriere se face citirea \u201ela zbor\u201d \u0219i recalcularea, acest lucru aduce, desigur, \u00eent\u00e2rzieri, dar principalul este siguran\u021ba datelor. <\/p>\n<p>Am efectuat teste de performan\u021b\u0103 pe unit\u0103\u021bi SSD, deoarece testele pe discuri SATA nu arat\u0103 o diferen\u021b\u0103 clar\u0103.<\/p>\n<p><b>Graficele rezultatelor test\u0103rii:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 cum se poate observa, pentru fi\u0219ierele mici, diferen\u021ba de timp de citire \u0219i scriere \u00eentre fi\u0219ierele arhivate \u0219i cele nearhivate este pu\u021bin semnificativ\u0103.<\/p>\n<p>O imagine complet diferit\u0103 va ap\u0103rea \u00een testul de citire \u0219i scriere a fi\u0219ierelor de dimensiune 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Stocarea eficient\u0103 a sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiferen\u021ba de timp \u00eentre citirea fi\u0219ierelor este de 5-25 ms. \u00cen ceea ce prive\u0219te scrierea, situa\u021bia este mai grav\u0103, diferen\u021ba este de aproximativ 150 ms. Dar \u00een acest caz, nu este necesar s\u0103 \u00eenc\u0103rca\u021bi fi\u0219iere mari, pur \u0219i simplu nu are sens, ele pot tr\u0103i separat de arhive.<\/p>\n<p>*Tehnic, acest server poate fi utilizat \u0219i pentru sarcini care necesit\u0103 NoSQL.<\/p>\n<p><b>Principalele metode de lucru cu serverul wZD:<\/b><\/p>\n<p>\u00cenc\u0103rcarea unui fi\u0219ier obi\u0219nuit:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\n\u00cenc\u0103rcarea unui fi\u0219ier \u00een arhiva Bolt (dac\u0103 nu este dep\u0103\u0219it\u0103 parametrul serverului fmaxsize, care define\u0219te dimensiunea maxim\u0103 a fi\u0219ierului care poate fi inclus \u00een arhiv\u0103, dac\u0103 este dep\u0103\u0219it, atunci fi\u0219ierul se va \u00eenc\u0103rca ca de obicei, l\u00e2ng\u0103 arhiv\u0103):<\/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>\nDesc\u0103rcarea fi\u0219ierului (dac\u0103 pe disc \u0219i \u00een arhiv\u0103 exist\u0103 fi\u0219iere cu nume identice, \u00een timpul desc\u0103rc\u0103rii prioritatea este dat\u0103 de default fi\u0219ierului nearchivat):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nDesc\u0103rcarea fi\u0219ierului din arhiva Bolt (for\u021bat):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Descrierea altor metode este disponibil\u0103 \u00een documenta\u021bie.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Documenta\u021bia wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Documenta\u021bia wZA<\/a><\/noindex><\/p>\n<p>Serverul suport\u0103 \u00een prezent doar protocolul HTTP, HTTPS nu func\u021bioneaz\u0103 \u00eenc\u0103. De asemenea, metoda POST nu este suportat\u0103 (\u00eenc\u0103 nu este decis dac\u0103 este necesar\u0103 sau nu).<\/p>\n<p>Cine se va uita \u00een codul surs\u0103 va descoperi acolo un caramel, nu toat\u0103 lumea \u00eel \u00eendr\u0103ge\u0219te, dar eu nu am legat codul principal de func\u021biile framework-ului web, cu excep\u021bia handlerului de \u00eentreruperi, a\u0219a c\u0103 \u00een viitor pot s\u0103-l rescriu rapid pe aproape orice motor.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Dezvoltarea unui replicator \u0219i distribuitor propriu + geo pentru a putea fi utilizat \u00een sisteme mari f\u0103r\u0103 FS-uri clusterizate (totul la un nivel profesional)<\/li>\n<li>Posibilitatea recuper\u0103rii complete a metadatelor \u00een caz de pierdere total\u0103 (\u00een cazul utiliz\u0103rii distribuitorului)<\/li>\n<li>Protocol nativ pentru posibilitatea utiliz\u0103rii conexiunilor de re\u021bea permanente \u0219i drivere pentru diferite limbaje de programare<\/li>\n<li>Func\u021bionalit\u0103\u021bi extinse de utilizare a componentei NoSQL<\/li>\n<li>Compresie de diferite tipuri (gzip, zstd, snappy) pentru fi\u0219iere sau valori din arhivele Bolt \u0219i pentru fi\u0219iere normale<\/li>\n<li>Criptare de diferite tipuri pentru fi\u0219iere sau valori din arhivele Bolt \u0219i pentru fi\u0219iere normale<\/li>\n<li>Conversie video server-side \u00eent\u00e2rziat\u0103, inclusiv pe GPU<\/li>\n<\/ul>\n<p>\nAsta e tot, sper c\u0103 acest server va fi util cuiva, licen\u021ba BSD-3, drepturi de autor duble, deoarece f\u0103r\u0103 compania \u00een care lucrez, nu a\u0219 fi scris acest server. Sunt singurul dezvoltator. A\u0219 fi recunosc\u0103tor pentru bug-urile g\u0103site \u0219i cererile de func\u021bii.<br \/>\n<br \/>Sursa: <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\/ro\/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=\"ro_RO\" \/>\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\/ro\/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\udd47Stocare eficient\u0103 pentru sute de milioane de fi\u0219iere mici. Solu\u021bie Self-Hosted | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}