{"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\/et\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAustatud kogukond, see artikkel k\u00e4sitleb sadade miljonite v\u00e4ikeste failide efektiivset salvestamist ja edastamist. K\u00e4esoleval etapil pakutakse t\u00e4ielikku lahendust POSIX \u00fchilduvatele failis\u00fcsteemidele, mis toetavad t\u00e4ielikult lukustusi, sealhulgas klastrite lukustusi, ja n\u00e4ib, et isegi ilma igasuguste lahendusteta.<\/p>\n<p>Seet\u00f5ttu kirjutasin selle eesm\u00e4rgi saavutamiseks enda spetsialiseeritud serveri.<br \/>\nSelle \u00fclesande t\u00e4itmise k\u00e4igus \u00f5nnestus lahendada peamine probleem ning samal ajal saavutada diskruumi ja RAM-i kokkuhoid, mida meie klastrifailis\u00fcsteem oli \u00e4\u00e4rmiselt palju kasutanud. T\u00f5epoolest, selline failide hulk on kahjulik igasugusele klastrifailis\u00fcsteemile. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Kava on j\u00e4rgmine:<\/p>\n<p>Lihtsate s\u00f5nadega, laaditakse serverisse v\u00e4ikesed failid, mis salvestatakse otse arhiivi ja loetakse sealt samuti, suuremad failid paigutatakse k\u00f5rvale. Skeem: 1 kaust = 1 arhiiv, kokku on meil mitmiljonite v\u00e4ikeste failidega arhiive, mitte sadu miljonite faile. Ja k\u00f5ik see on korralikult teostatud, ilma igasuguste skriptide ja failide jaotamiseta tar\/zip arhiividesse.<\/p>\n<p>P\u00fc\u00fcan l\u00fchidalt v\u00e4ljendada, vabandan ette, kui postitus osutub tihedaks.<\/p>\n<p>K\u00f5ik algas sellest, et ma ei suutnud leida sobivat serverit, mis suudaks salvestada andmeid, mis saadakse HTTP protokolli kaudu otse arhiividesse, nii et ei ilmneks tavaliste arhiivide ja objektide hoidlate puudusi. Otsingute p\u00f5hjuseks sai ulatuslik Origin klaster, mis koosnes 10 serverist ja milles oli juba 250 000 000 v\u00e4ikest faili, ning kasvutrend ei paistnud peatuvat.<\/p>\n<p><b>Neile, kes ei armasta artiklite lugemist ja eelistavad l\u00fchemat dokumentatsiooni:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">siia<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">siia<\/a><\/noindex>.<\/p>\n<p>Ja docker koos, praegu on variant ainult nginxiga sees, igaks juhuks:<\/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>\nEdasi:<\/p>\n<p>Kui faile on v\u00e4ga palju, on vajalikud suured ressursid, ja mis veelgi h\u00e4irivam, osa neist kaob raisku. N\u00e4iteks klasterfailis\u00fcsteemi (antud juhul \u2014 MooseFS) kasutamisel v\u00f5tab fail, s\u00f5ltumata tegelikust suurusest, alati v\u00e4hemalt 64 KB. See t\u00e4hendab, et 3, 10 v\u00f5i 30 KB suuruste failide jaoks on kettal vajalik 64 KB. Kui faile on veerand miljardit, kaotame 2 kuni 10 terabaiti. Uute failide l\u00f5putu loomine ei \u00f5nnestu, kuna MooseFS-is on piirang: mitte rohkem kui 1 miljard \u00fche faili repliiki.<\/p>\n<p>Failide arvu suurenedes on metainfo jaoks vajalik palju RAM-i. Samuti soodustavad tihedad suured metainfotuhandid SSD-kettaste kulumist.<\/p>\n<p><b>Server wZD. Teeme kettad korda.<\/b><\/p>\n<p>Server on kirjutatud Go keeles. Ennek\u00f5ike pidin v\u00e4hendama failide arvu. Kuidas seda teha? Arhiveerimise kaudu, kuid antud juhul ilma kompresseerimiseta, kuna mul on failid, mis on pidevalt kokku surutud pildid. Abiks tuli BoltDB, millel tuli veel puudusi k\u00f5rvaldada, mis kajastub dokumentatsioonis.<\/p>\n<p>Kokkuv\u00f5ttes on mul alles vaid 10 miljonit Bolt arhiivi, kuigi algselt oli neid veerand miljardit. Kui oleks v\u00f5imalik muuta praegust direktorite failistruktuuri, oleks v\u00f5imalik v\u00e4hendada nende arvu umbes miljoni faili peale. <\/p>\n<p>K\u00f5ik v\u00e4iksed failid pakitakse Bolt arhiividesse, mis automaatselt saavad direktorite nimed, milles nad asuvad, samas kui k\u00f5ik suured failid j\u00e4\u00e4vad arhivide k\u00f5rvale, neid pole m\u00f5tet pakkida, seda saab seadistada. V\u00e4ikesed \u2014 arhiveerime, suured \u2014 j\u00e4tame muutumatuks. Server t\u00f6\u00f6tab sujuvalt nii nende kui ka teistega.<\/p>\n<p><b>wZD serveri arhitektuur ja omadused.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServer t\u00f6\u00f6tab operatsioonis\u00fcsteemide Linux, BSD, Solaris ja OSX all. Olen testinud ainult AMD64 arhitektuuri Linuxis, kuid see peaks olema sobiv ka ARM64, PPC64, MIPS64 jaoks.<\/p>\n<p><b>Peamised omadused:<\/b><\/p>\n<ul>\n<li>Mitme tahkeline;<\/li>\n<li>Mitme serveri t\u00f6\u00f6, mis tagab katkestusteta t\u00f6\u00f6 ja koormuse tasakaalu;<\/li>\n<li>Maksimaalne l\u00e4bipaistvus kasutajale v\u00f5i arendajale;<\/li>\n<li>Toetatud HTTP meetodid: GET, HEAD, PUT ja DELETE;<\/li>\n<li>K\u00e4itumise juhtimine lugemise ja kirjutamise ajal l\u00e4bi kliendi pealkirjade;<\/li>\n<li>Kohandatavad virtuaalsed hostid;<\/li>\n<li>CRC andmete terviklikkuse tugi kirjutamisel\/loetamisel;<\/li>\n<li>Poold\u00fcnaamilised pusled minimaalsete m\u00e4lu n\u00f5udmiste ja optimaalse v\u00f5rgu j\u00f5udluse seadistamiseks;<\/li>\n<li>Kompaktsiooni edasil\u00fckkamine;<\/li>\n<li>Lisaks pakutakse mitme l\u00f5imega arhiveerijat wZA failide migreerimiseks teenuse katkestamata;<\/li>\n<\/ul>\n<p>\n<b>Tegeliku kogemuse p\u00f5hjal:<\/b><\/p>\n<p>Olen arendanud ja testinud serverit ja arhiveerijat reaalsetel andmetel \u00fcsna pikka aega, praegu t\u00f6\u00f6tab see edukalt klastris, mis sisaldab 250,000,000 v\u00e4ikest faili (pilti), mis asuvad 15,000,000 kaustas eraldiseisvates SATA-kettastes. 10-serverline klaster toimib Origin-serverina, mis on paigaldatud CDN-v\u00f5rgu taha. Selle haldamiseks kasutatakse 2 Nginx-serverit + 2 wZD-serverit.<\/p>\n<p>Neile, kes otsustavad seda serverit kasutada, on m\u00f5istlik enne kasutamist planeerida kausta struktuur, kui see on kohaldatav. Koheselt mainin, et server ei ole m\u00f5eldud k\u00f5ike \u00fchte Bolt arhiivi surumiseks.<\/p>\n<p><b>J\u00f5udluse testimine:<\/b><\/p>\n<p>Mida v\u00e4iksem on arhiveeritud faili suurus, seda kiiremini toimuvad GET ja PUT operatsioonid. Vaatleme HTTP kliendi kogu kirjutamise aega tavalfailides ja Bolt arhiivides, samuti lugemist. V\u00f5rdleme failide t\u00f6\u00f6tlemist suurustega 32 KB, 256 KB, 1024 KB, 4096 KB ja 32768 KB.<\/p>\n<p>Bolt arhiividega t\u00f6\u00f6tades kontrollitakse iga faili andmete terviklikkust (kasutatakse CRC), enne \u0437\u0430\u043f\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 ja p\u00e4rast \u0437\u0430\u043f\u0438\u0441imist toimub kohene lugemine ja \u00fcleloendamine, mis toob loomulikult kaasa viivitusi, kuid peamine on andmete turvalisus. <\/p>\n<p>Teostasin j\u00f5udlustestid SSD-m\u00e4luseadmetel, kuna SATA-diskide testid ei n\u00e4ita erilist erinevust.<\/p>\n<p><b>Testimistulemuste graafikud:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNagu n\u00e4ha, on v\u00e4ikeste failide vahel arhiveeritud ja arhiveerimata failide lugemise ja kirjutamise aja erinevus v\u00e4ike.<\/p>\n<p>Teistsuguse pildi saame faili suurusega 32 MB lugemise ja kirjutamise testil:<\/p>\n<p><img decoding=\"async\" alt=\"Efektiivne kui sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitud lahendus\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFailide lugemise vahel on aja erinevus 5-25 ms. Kirjutamise osas on asjad halvemini, erinevus ulatub umbes 150 ms. Siiski ei ole m\u00f5tet suuri faile \u00fcles laadida, need v\u00f5ivad eraldi eksisteerida arhiividest.<\/p>\n<p>*Tehniliselt saab seda serverit kasutada ka NoSQL n\u00f5udmistega \u00fclesannete jaoks.<\/p>\n<p><b>Peamised t\u00f6\u00f6 meetodid wZD serveriga:<\/b><\/p>\n<p>Tavalise faili \u00fcleslaadimine:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nFaili \u00fcleslaadimine Bolt arhiivi (kuni serveri parameeter fmaxsize, mis m\u00e4\u00e4rab maksimaalse faili suuruse, ei ole \u00fcletatud; kui on \u00fcletatud, laaditakse fail tavap\u00e4raselt arhiivi k\u00f5rvale):<\/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>\nFaili allalaadimine (kui kettal ja arhiivis on sama nimega faile, eelistatakse allalaadimisel vaikesena mitte-arhiveeritud faili):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nFaili allalaadimine Bolt arhiivist (sunditud):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>Muude meetodite kirjeldus on dokumentatsioonis.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">wZD dokumentatsioon<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">wZA dokumentatsioon<\/a><\/noindex><\/p>\n<p>Server toetab hetkel ainult HTTP protokolli, HTTPS ei t\u00f6\u00f6ta veel. Samuti ei toetata POST meetodit (kas see on vajalik, pole veel otsustatud).<\/p>\n<p>Kes uurib l\u00e4htekoodi, leiab sealt irise, mida k\u00f5ik ei armasta, aga ma ei sidunud p\u00f5hikoodi veebiraamistike funktsioonidega, v\u00e4lja arvatud katkestuste t\u00f6\u00f6tleja, nii et ma saan vajadusel kiiresti peaaegu iga mootori jaoks \u00fcmber kirjutada.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Oma replikatori ja distributori arendamine + geo v\u00f5imalus suurte s\u00fcsteemide kasutamiseks ilma klasterifailis\u00fcsteemideta (k\u00f5ik t\u00f5siselt)<\/li>\n<li>T\u00e4ieliku p\u00f6\u00f6rdprotsessimise v\u00f5imalus metandateede t\u00e4ieliku kadumise korral (distributori kasutamise juhul)<\/li>\n<li>Natiivne protokoll pidevate v\u00f5rgu\u00fchenduste kasutamise v\u00f5imaluseks ja draiverid erinevatele programmeerimiskeeltele<\/li>\n<li>T\u00e4psemad v\u00f5imalused NoSQL komponentide kasutamiseks<\/li>\n<li>Erinevate t\u00fc\u00fcpide tihendamine (gzip, zstd, snappy) failide v\u00f5i laskude jaoks Bolt arhiivides ja tavalisetes failides<\/li>\n<li>Erinevate t\u00fc\u00fcpide kr\u00fcpteerimine failide v\u00f5i laskude jaoks Bolt arhiivides ja tavalisetes failides<\/li>\n<li>Edasil\u00fckatud serveri videokonversioon, sealhulgas GPU kasutamine<\/li>\n<\/ul>\n<p>\nMinu poolt k\u00f5ik, loodan, et see server on kellelegi kasulik, BSD-3 litsents, kahekordne autorikaitse, kuna kui mitte firma, kus ma t\u00f6\u00f6tan, ei oleks ma serverit kirjutanud. Olen arendaja \u00fcksi. Olen t\u00e4nulik leitud bugide ja funktsioonide soovituste eest.<br \/>\n<br \/>Allikas: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/et\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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:description\" content=\"\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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47T\u00f5hus sadade miljonite v\u00e4ikeste failide salvestamine. Isehostitav lahendus | ProHoster","description":"Austatud kogukond, see artikkel k\u00e4sitleb t\u00f5husat sadade miljonite v\u00e4ikeste failide salvestamist ja v\u00e4ljastamist. Praegu pakutakse l\u00f5pliku lahendust POSIX-iga \u00fchilduvatele failis\u00fcsteemidele, mis pakuvad t\u00e4ielikku lukustust, sealhulgas klastrite toetust, ja tundub, et isegi ilma k\u00f5rvaliste lahendusteta. Seet\u00f5ttu kirjutasin sellele eesm\u00e4rgile oma spetsialiseeritud serveri. Projekti k\u00e4igus","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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:description":"\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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}