{"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\/sq\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE dashur komunitet, ky artikull do t\u00eb fokusohet n\u00eb ruajtjen dhe shp\u00ebrndarjen efektive t\u00eb qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. N\u00eb k\u00ebt\u00eb faz\u00eb, po propozohet nj\u00eb zgjidhje p\u00ebrfundimtare p\u00ebr sistemet e skedar\u00ebve q\u00eb jan\u00eb t\u00eb pajtueshme me POSIX, me mb\u00ebshtetje t\u00eb plot\u00eb p\u00ebr bllokimet, p\u00ebrfshir\u00eb ato klasterike, dhe duket se madje edhe pa ndihm\u00ebs p\u00ebr zgjidhje.<\/p>\n<p>Prandaj, p\u00ebr k\u00ebt\u00eb q\u00ebllim, kam shkruar serverin tim t\u00eb specializuar.<br \/>\nN\u00eb procesin e zbatimit t\u00eb k\u00ebsaj detyre arrita t\u00eb zgjidh problemin kryesor, duke arrijtur gjithashtu nj\u00eb kursim t\u00eb hap\u00ebsir\u00ebs n\u00eb disk dhe memories operative, t\u00eb cilat sistemet tona klasterike t\u00eb skedar\u00ebve i konsumonin pa m\u00ebshir\u00eb. N\u00eb fund t\u00eb fundit, kaq shum\u00eb skedar\u00eb \u00ebsht\u00eb e d\u00ebmshme p\u00ebr \u00e7do sistem klaster t\u00eb skedar\u00ebve. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ideja \u00ebsht\u00eb k\u00ebshtu:<\/p>\n<p>Me fjal\u00eb t\u00eb thjeshta, skedar\u00ebt e vegj\u00ebl ngarkohen p\u00ebrmes serverit, ata ruhen drejtp\u00ebrdrejt n\u00eb arkiv dhe gjithashtu lexohen prej tij, nd\u00ebrsa skedar\u00ebt e m\u00ebdhenj vendosen af\u00ebr. Schemat: 1 dosje = 1 arkiv, k\u00ebshtu kemi disa milion\u00eb arkiva me skedar\u00eb t\u00eb vegj\u00ebl, e jo disa qindra milion\u00eb skedar\u00eb. Dhe gjith\u00e7ka \u00ebsht\u00eb realizuar n\u00eb m\u00ebnyr\u00eb t\u00eb plot\u00eb, pa ndonj\u00eb skript dhe pa shp\u00ebrndarjen e skedar\u00ebve n\u00eb arkiva tar\/zip.<\/p>\n<p>Do t\u00eb p\u00ebrpiqem t\u00eb shpjegoj shkurtimisht, paraprakisht k\u00ebrkoj falje n\u00ebse posta do t\u00eb jet\u00eb e gjat\u00eb.<\/p>\n<p>E gjith\u00eb filloi kur nuk mund t\u00eb gjeja nj\u00eb server t\u00eb p\u00ebrshtatsh\u00ebm n\u00eb bot\u00eb q\u00eb mund t\u00eb ruante t\u00eb dh\u00ebnat, t\u00eb marra p\u00ebrmes protokollit HTTP, drejtp\u00ebrdrejt n\u00eb arkiva, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mos kishte disavantazhe tipike t\u00eb arkivave t\u00eb zakonsh\u00ebm dhe ruajtjeve objektive. Arsyeja e k\u00ebrkimeve ishte nj\u00eb klaster Origin i rritur n\u00eb p\u00ebrmasa t\u00eb m\u00ebdha me 10 server\u00eb, n\u00eb t\u00eb cilin kishim grumbulluar tashm\u00eb 250,000,000 skedar\u00eb t\u00eb vegj\u00ebl dhe tendenca e rritjes nuk kishte nd\u00ebrmend t\u00eb ndalonte.<\/p>\n<p><b>P\u00ebr ata q\u00eb nuk e duan t\u00eb lexojn\u00eb artikuj dhe preferojn\u00eb dokumentacionin e vog\u00ebl m\u00eb t\u00eb thjesht\u00eb:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">k\u00ebtu<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">k\u00ebtu<\/a><\/noindex>.<\/p>\n<p>Dhe docker gjithashtu, tani ka nj\u00eb opsion vet\u00ebm me nginx brenda p\u00ebr \u00e7do rast:<\/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>\nPastaj:<\/p>\n<p>N\u00ebse ka shum\u00eb skedar\u00eb, nevojiten burime t\u00eb konsiderueshme, dhe, m\u00eb e keqja, nj\u00eb pjes\u00eb e tyre humbet n\u00eb m\u00ebnyr\u00eb t\u00eb panevojshme. P\u00ebr shembull, kur p\u00ebrdoret nj\u00eb sistem skedar\u00ebsh n\u00eb klaster (n\u00eb k\u00ebt\u00eb rast - MooseFS), skedari, pavar\u00ebsisht nga madh\u00ebsia reale, gjithmon\u00eb z\u00eb t\u00eb pakt\u00ebn 64 KB. K\u00ebshtu q\u00eb p\u00ebr skedar\u00ebt me madh\u00ebsi 3, 10 ose 30 KB nevojiten 64 KB n\u00eb disk. N\u00ebse ka nj\u00eb \u00e7erek miliard skedar\u00eb, humbim nga 2 deri n\u00eb 10 terabajt. Nuk \u00ebsht\u00eb e mundur t\u00eb krijosh skedar\u00eb t\u00eb rinj deri n\u00eb pafund\u00ebsi, sepse n\u00eb MooseFS ka nj\u00eb kufizim: jo m\u00eb shum\u00eb se 1 miliard me nj\u00eb replik\u00eb p\u00ebr \u00e7do skedar.<\/p>\n<p>Me rritjen e numrit t\u00eb skedar\u00ebve, nevojitet shum\u00eb memorie p\u00ebr metadat\u00eb. Gjithashtu, dump-et e shpeshta t\u00eb m\u00ebdha t\u00eb metadatave kontribuojn\u00eb n\u00eb konsumimin e SSD-ve.<\/p>\n<p><b>Serveri wZD. Rregullojm\u00eb rendin n\u00eb disqet.<\/b><\/p>\n<p>Serveri \u00ebsht\u00eb shkruar n\u00eb gjuh\u00ebn Go. Para s\u00eb gjithash, m\u00eb duhej t\u00eb reduktonja numrin e skedar\u00ebve. Si ta b\u00ebj k\u00ebt\u00eb? P\u00ebrmes arkivimit, por n\u00eb k\u00ebt\u00eb rast pa kompresim, sepse skedar\u00ebt e mi jan\u00eb imazhe t\u00eb ngjeshur. N\u00eb ndihm\u00eb erdhi BoltDB, t\u00eb cil\u00ebn gjithashtu duhej ta hiqja nga mang\u00ebsit\u00eb e saj, si\u00e7 \u00ebsht\u00eb reflektuar n\u00eb dokumentacion.<\/p>\n<p>P\u00ebrfundimisht, n\u00eb vend t\u00eb \u00e7erek miliard skedar\u00ebve, n\u00eb rastin tim mbet\u00ebn vet\u00ebm 10 milion arkivash Bolt. Po t\u00eb kishim mund\u00ebsin\u00eb t\u00eb ndryshonim struktur\u00ebn aktuale t\u00eb mbushjes s\u00eb skedar\u00ebve n\u00eb direktori, ndoshta do t\u00eb ishte e mundur ta ulja at\u00eb edhe deri n\u00eb 1 milion skedar\u00eb. <\/p>\n<p>T\u00eb gjith\u00eb skedar\u00ebt e vegj\u00ebl paketohet n\u00eb arkivat Bolt, duke marr\u00eb automatikisht emrat e direktorive n\u00eb t\u00eb cilat ndodhen, nd\u00ebrsa t\u00eb gjith\u00eb skedar\u00ebt e m\u00ebdhenj mbeten af\u00ebr arkivave; nuk ka kuptim t'i paketojm\u00eb, kjo \u00ebsht\u00eb e konfigurable. T\u00eb vegjlit - arkivohen, t\u00eb m\u00ebdhenjt - mbeten pa ndryshim. Serveri punon n\u00eb m\u00ebnyr\u00eb t\u00eb transparent\u00eb si me ato ashtu edhe me k\u00ebta.<\/p>\n<p><b>Arkitektura dhe ve\u00e7orit\u00eb e serverit wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServeri funksionon n\u00ebn sistemet operative Linux, BSD, Solaris dhe OSX. E kam testuar vet\u00ebm p\u00ebr arkitektur\u00ebn AMD64 n\u00ebn Linux, por duhet t\u00eb jet\u00eb e p\u00ebrshtatshme edhe p\u00ebr ARM64, PPC64, MIPS64.<\/p>\n<p><b>Ve\u00e7orit\u00eb kryesore:<\/b><\/p>\n<ul>\n<li>Multithreading;<\/li>\n<li>Multi-serverizmi, q\u00eb siguron q\u00ebndrueshm\u00ebri dhe balancim ngarkese;<\/li>\n<li>Transparenc\u00eb maksimale p\u00ebr p\u00ebrdoruesin ose zhvilluesin;<\/li>\n<li>Metoda HTTP t\u00eb mb\u00ebshtetura: GET, HEAD, PUT dhe DELETE;<\/li>\n<li>Menaxhimi i sjelljes gjat\u00eb leximit dhe shk writing, p\u00ebrmes titrave t\u00eb klientit;<\/li>\n<li>Mb\u00ebshtetje p\u00ebr hoste virtuale t\u00eb konfiguruesh\u00ebm;<\/li>\n<li>Mb\u00ebshtetje p\u00ebr CRC p\u00ebr integritetin e t\u00eb dh\u00ebnave gjat\u00eb shk writing \/ leximit;<\/li>\n<li>Buffera gjysm\u00eb-dinamik p\u00ebr konsum minimal t\u00eb memories dhe optimizimin e performanc\u00ebs rrjetore;<\/li>\n<li>Kompaktimi i vonuar i t\u00eb dh\u00ebnave;<\/li>\n<li>Si nj\u00eb opsion, ofrohet nj\u00eb arkivues me shum\u00ebThreads wZA p\u00ebr migron e skedar\u00ebve pa ndalur sh\u00ebrbimin.<\/li>\n<\/ul>\n<p>\n<b>P\u00ebrvoja reale:<\/b><\/p>\n<p>Kam zhvilluar dhe testuar serverin dhe arkivuesin me t\u00eb dh\u00ebna t\u00eb jetuara p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, tani ai funksionon me sukses n\u00eb nj\u00eb klaster me 250,000,000 skedar\u00eb t\u00eb vegj\u00ebl (imazhe), t\u00eb vendosur n\u00eb 15,000,000 direktor\u00eb n\u00eb disqe SATA t\u00eb ndara. Klasteri prej 10 serverash \u00ebsht\u00eb nj\u00eb server Origin, i vendosur pas rrjetit CDN. P\u00ebr mir\u00ebmbajtjen e tij p\u00ebrdoren 2 servera Nginx + 2 servera wZD.<\/p>\n<p>P\u00ebr ata q\u00eb vendosin t\u00eb p\u00ebrdorin k\u00ebt\u00eb server, ka kuptim t\u00eb planifikoni struktur\u00ebn e direktor\u00ebve para p\u00ebrdorimit, n\u00ebse \u00ebsht\u00eb e aplikueshme. D\u00ebshiroj t\u00eb theksoj se serveri nuk \u00ebsht\u00eb i destinuar p\u00ebr t\u00eb futur gjith\u00e7ka n\u00eb nj\u00eb arkiv Bolt.<\/p>\n<p><b>Testimi i performanc\u00ebs:<\/b><\/p>\n<p>Sa m\u00eb i vog\u00ebl t\u00eb jet\u00eb madh\u00ebsia e skedarit t\u00eb arkivuar, aq m\u00eb shpejt kryhen operacionet GET dhe PUT. Krahasojm\u00eb koh\u00ebn e plot\u00eb t\u00eb shkruar nga klienti HTTP n\u00eb skedar\u00eb t\u00eb zakonsh\u00ebm dhe n\u00eb arkivat Bolt, po ashtu edhe leximin. Krahasohet puna me skedar\u00eb me madh\u00ebsi 32 KB, 256 KB, 1024 KB, 4096 KB dhe 32768 KB.<\/p>\n<p>Kur punojm\u00eb me arkivat Bolt, kontrollohet integriteti i t\u00eb dh\u00ebnave t\u00eb \u00e7do skedari (p\u00ebrdoret CRC), para shkruarjes dhe gjithashtu pas shkruarjes, lexohet n\u00eb flak\u00eb dhe p\u00ebrs\u00ebritet, kjo natyrisht sjell vonesa, por m\u00eb e r\u00ebnd\u00ebsishmja \u2014 siguria e t\u00eb dh\u00ebnave. <\/p>\n<p>Testet e performanc\u00ebs i kam k\u00ebrkuar n\u00eb disqe SSD, pasi n\u00eb disqe SATA testet nuk tregojn\u00eb nj\u00eb diferenc\u00eb t\u00eb qart\u00eb.<\/p>\n<p><b>Grafik\u00ebt e rezultateve t\u00eb testimeve:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi\u00e7 duket, p\u00ebr skedar\u00ebt e vegj\u00ebl, ndryshimi n\u00eb koh\u00ebn e leximit dhe shkruarjes midis skedar\u00ebve t\u00eb arkivuar dhe t\u00eb paarkivuar \u00ebsht\u00eb i vog\u00ebl.<\/p>\n<p>Nj\u00eb pamje t\u00ebrheq\u00ebse do t\u00eb marrim kur testojm\u00eb leximin dhe shkruarjen e skedar\u00ebve me madh\u00ebsi 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Ruajtja efikase e qindra milion\u00eb skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhja e vet\u00eb-hostuar\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDiferenca n\u00eb koh\u00ebn midis leximit t\u00eb skedar\u00ebve \u2014 \u00ebsht\u00eb rreth 5-25 ms. Me shkruarjen, situata \u00ebsht\u00eb m\u00eb e keqe, diferenca \u00ebsht\u00eb rreth 150 ms. Por n\u00eb k\u00ebt\u00eb rast, nuk ka nevoj\u00eb t\u00eb ngarkohet skedar\u00eb t\u00eb m\u00ebdhenj, n\u00eb t\u00eb v\u00ebrtet\u00eb, nuk ka kuptim, ata mund t\u00eb jetojn\u00eb ve\u00e7mas nga arkivat.<\/p>\n<p>*Teknikisht, mund t\u00eb p\u00ebrdoret ky server edhe p\u00ebr detyra q\u00eb k\u00ebrkojn\u00eb NoSQL.<\/p>\n<p><b>Metodat kryesore t\u00eb pun\u00ebs me serverin wZD:<\/b><\/p>\n<p>Ngarkimi i nj\u00eb skedari t\u00eb zakonsh\u00ebm:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nNgarkimi i skedarit n\u00eb arkivin Bolt (n\u00ebse nuk \u00ebsht\u00eb tejkaluar parametri serveror fmaxsize, i cili p\u00ebrcakton madh\u00ebsin\u00eb maksimale t\u00eb skedarit q\u00eb mund t\u00eb p\u00ebrfshihet n\u00eb arkiv, dhe n\u00ebse \u00ebsht\u00eb tejkaluar, skedari do t\u00eb ngarkohet si zakonisht pran\u00eb arkivit):<\/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>\nShkarkimi i skedarit (n\u00ebse n\u00eb disk dhe n\u00eb arkiv ka skedar\u00eb me emra t\u00eb nj\u00ebjt\u00eb, at\u00ebher\u00eb gjat\u00eb shkarkimit prioriteti nga e drejta jepet skedarit t\u00eb paarkivuar):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nShkarkimi i skedarit nga arkivi Bolt (me detyrim):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>P\u00ebrshkrimi i metodave t\u00eb tjera ndodhet n\u00eb dokumentacion.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Dokumentacioni wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Dokumentacioni wZA<\/a><\/noindex><\/p>\n<p>Serveri p\u00ebr momentin mb\u00ebshtet vet\u00ebm protokollin HTTP, me HTTPS nuk funksionon ende. Po ashtu metoda POST nuk mb\u00ebshtetet ( ende nuk \u00ebsht\u00eb vendosur n\u00ebse \u00ebsht\u00eb e nevojshme apo jo).<\/p>\n<p>Kush do t\u00eb hulumtoj\u00eb n\u00eb kodin burim do t\u00eb zbuloj\u00eb aty nj\u00eb \u00ebmb\u00eblsir\u00eb, nuk e duan t\u00eb gjith\u00eb, por un\u00eb nuk e kam lidhur kodin kryesor me funksionet e framework-ut t\u00eb internetit, p\u00ebrve\u00e7 menaxhuesit t\u00eb nd\u00ebrprerjeve, k\u00ebshtu q\u00eb m\u00eb von\u00eb mund ta rishkruaj shpejt thuajse n\u00eb \u00e7do motor.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Zhvillimi i nj\u00eb replikatori dhe distributor t\u00eb vetin + geo p\u00ebr mund\u00ebsin\u00eb e p\u00ebrdorimit n\u00eb sisteme t\u00eb m\u00ebdha pa FS klastere (Gjith\u00e7ka n\u00eb rregull)<\/li>\n<li>Mund\u00ebsia e rikuperimit t\u00eb plot\u00eb t\u00eb metadatat\u00ebve n\u00eb rast t\u00eb humbjes s\u00eb plot\u00eb (n\u00eb rastin e p\u00ebrdorimit t\u00eb distributorit)<\/li>\n<li>Protokoll nativ p\u00ebr mund\u00ebsin\u00eb e p\u00ebrdorimit t\u00eb lidhjeve t\u00eb p\u00ebrhershme t\u00eb rrjetit dhe drivere p\u00ebr gjuh\u00eb t\u00eb ndryshme programimi<\/li>\n<li>Mund\u00ebsi t\u00eb zgjeruara p\u00ebr p\u00ebrdorimin e komponentit NoSQL<\/li>\n<li>Kompresimi i llojeve t\u00eb ndryshme (gzip, zstd, snappy) p\u00ebr skedar\u00eb ose vlera brenda arkivave Bolt dhe p\u00ebr skedar\u00eb t\u00eb zakonsh\u00ebm<\/li>\n<li>Kriptimi i llojeve t\u00eb ndryshme p\u00ebr skedar\u00eb ose vlera brenda arkivave Bolt dhe p\u00ebr skedar\u00eb t\u00eb zakonsh\u00ebm<\/li>\n<li>Konvertimi vones\u00eb i videove n\u00eb server, duke p\u00ebrfshir\u00eb edhe n\u00eb GPU<\/li>\n<\/ul>\n<p>\nKam p\u00ebrfunduar, shpresoj q\u00eb ky server do t\u00eb jet\u00eb i dobish\u00ebm p\u00ebr dik\u00eb, licenca BSD-3, t\u00eb drejtat e autorit jan\u00eb t\u00eb dyfishta, p\u00ebr shkak se n\u00ebse nuk do t\u00eb ishte kompania ku punoj, nuk do ta kisha shkruar as serverin. Un\u00eb jam zhvilluesi i vet\u00ebm. Do t\u00eb jem mir\u00ebnjoh\u00ebs p\u00ebr \u00e7do bug q\u00eb gjeni dhe k\u00ebrkesat p\u00ebr karakteristika.<br \/>\n<br \/>Burimi: <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.2 - 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\/sq\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47 Ruajtje efektive e qindra milion skedar\u00ebve t\u00eb vegj\u00ebl. Zgjidhje e vet\u00eb-hostuar | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}