{"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\/fr\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCh\u00e8re communaut\u00e9, cet article sera consacr\u00e9 \u00e0 la gestion efficace de centaines de millions de petits fichiers. \u00c0 ce stade, une solution finale est propos\u00e9e pour les syst\u00e8mes de fichiers compatibles POSIX, avec un soutien complet pour les verrous, y compris les verrous clusteris\u00e9s, et apparemment m\u00eame sans b\u00e9quilles cette fois-ci.<\/p>\n<p>C'est pourquoi j'ai \u00e9crit mon propre serveur sp\u00e9cialis\u00e9 pour cet objectif.<br \/>\nAu cours de la mise en \u0153uvre de cette t\u00e2che, nous avons pu r\u00e9soudre le probl\u00e8me principal et \u00e9conomiser de l'espace disque et de la m\u00e9moire vive, que notre syst\u00e8me de fichiers en cluster consommait sans rel\u00e2che. En effet, une telle quantit\u00e9 de fichiers est nuisible pour n'importe quel syst\u00e8me de fichiers en cluster. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>L'id\u00e9e est simple :<\/p>\n<p>En termes simples, les petits fichiers sont t\u00e9l\u00e9charg\u00e9s via le serveur, ils sont enregistr\u00e9s directement dans une archive, puis \u00e9galement lus \u00e0 partir de celle-ci, tandis que les gros fichiers sont stock\u00e9s s\u00e9par\u00e9ment. Sch\u00e9ma : 1 dossier = 1 archive, ce qui nous donne plusieurs millions d'archives contenant de petits fichiers, et non pas plusieurs centaines de millions de fichiers. Et tout cela est r\u00e9alis\u00e9 pleinement, sans aucun script ni dispersion de fichiers dans des archives tar\/zip.<\/p>\n<p>Je vais essayer de r\u00e9sumer, je m'excuse d'avance si le post s'av\u00e8re dense.<\/p>\n<p>Tout a commenc\u00e9 lorsque je n'ai pas pu trouver de serveur ad\u00e9quat capable de stocker des donn\u00e9es re\u00e7ues via le protocole HTTP directement dans des archives, afin qu'il n'y ait pas d'inconv\u00e9nients typiques des archives ordinaires et des stockages d'objets. La raison de cette recherche \u00e9tait un cluster Origin en pleine expansion de 10 serveurs, qui avait accumul\u00e9 250 000 000 petits fichiers, et la tendance \u00e0 la hausse ne semblait pas vouloir s'arr\u00eater.<\/p>\n<p><b>Pour ceux qui n'aiment pas lire les articles, voici une documentation simplifi\u00e9e :<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">ici<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">ici<\/a><\/noindex>.<\/p>\n<p>Et docker au passage, actuellement il n'y a d'option qu'avec nginx \u00e0 l'int\u00e9rieur \u00e0 tout hasard :<\/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>\nSuivant :<\/p>\n<p>Lorsque le nombre de fichiers est tr\u00e8s \u00e9lev\u00e9, des ressources consid\u00e9rables sont n\u00e9cessaires, et, ce qui est le plus frustrant, une partie de celles-ci est gaspill\u00e9es. Par exemple, lors de l'utilisation d'un syst\u00e8me de fichiers en cluster (dans ce cas, MooseFS), un fichier, quelle que soit sa taille r\u00e9elle, occupe toujours au minimum 64 Ko. Donc, pour des fichiers de 3, 10 ou 30 Ko, 64 Ko sont n\u00e9cessaires sur le disque. Avec un quart de milliard de fichiers, nous perdons de 2 \u00e0 10 t\u00e9raoctets. Il est impossible de continuer \u00e0 cr\u00e9er de nouveaux fichiers ind\u00e9finiment, car dans MooseFS, il y a une limitation : pas plus d'un milliard avec une r\u00e9plique de chaque fichier.<\/p>\n<p>\u00c0 mesure que le nombre de fichiers augmente, il faut beaucoup de m\u00e9moire vive pour les m\u00e9tadonn\u00e9es. De plus, des copies de m\u00e9tadonn\u00e9es fr\u00e9quentes et volumineuses contribuent \u00e0 l'usure des disques SSD.<\/p>\n<p><b>Serveur wZD. Nous mettons de l'ordre sur les disques.<\/b><\/p>\n<p>Le serveur est \u00e9crit en Go. Tout d'abord, j'avais besoin de r\u00e9duire le nombre de fichiers. Comment faire cela ? Gr\u00e2ce \u00e0 l'archivage, mais dans ce cas, sans compression, car mes fichiers sont des images compress\u00e9es. BoltDB m'a aid\u00e9, bien que j'aie d\u00fb corriger certains d\u00e9fauts, ce qui est mentionn\u00e9 dans la documentation.<\/p>\n<p>Au total, au lieu d'un quart de milliard de fichiers, il ne reste que 10 millions d'archives Bolt dans mon cas. Si j'avais eu la possibilit\u00e9 de modifier la structure actuelle de remplissage des r\u00e9pertoires, il serait peut-\u00eatre possible de r\u00e9duire cela \u00e0 environ 1 million de fichiers. <\/p>\n<p>Tous les petits fichiers sont empaquet\u00e9s dans des archives Bolt, qui obtiennent automatiquement les noms des r\u00e9pertoires dans lesquels ils se trouvent, tandis que tous les gros fichiers restent \u00e0 c\u00f4t\u00e9 des archives, car il n'est pas judicieux de les emballer. C'est configurable. Les petits fichiers sont archiv\u00e9s, les gros restent inchang\u00e9s. Le serveur fonctionne de mani\u00e8re transparente avec les deux types.<\/p>\n<p><b>Architecture et caract\u00e9ristiques du serveur wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe serveur fonctionne sous les syst\u00e8mes d'exploitation Linux, BSD, Solaris et OSX. J'ai test\u00e9 uniquement pour l'architecture AMD64 sous Linux, mais il devrait \u00e9galement convenir pour ARM64, PPC64, MIPS64.<\/p>\n<p><b>Les principales fonctionnalit\u00e9s :<\/b><\/p>\n<ul>\n<li>Multithreading ;<\/li>\n<li>Multi-serveurs, assurant la tol\u00e9rance aux pannes et l'\u00e9quilibrage de la charge ;<\/li>\n<li>Transparence maximale pour l'utilisateur ou le d\u00e9veloppeur ;<\/li>\n<li>M\u00e9thodes HTTP prises en charge : GET, HEAD, PUT et DELETE ;<\/li>\n<li>Contr\u00f4le du comportement lors de la lecture et de l'\u00e9criture via des en-t\u00eates clients ;<\/li>\n<li>Support de l'h\u00e9bergement virtuel flexible ;<\/li>\n<li>Support de l'int\u00e9grit\u00e9 des donn\u00e9es CRC lors de l'\u00e9criture\/lecture ;<\/li>\n<li>Buffers semi-dynamiques pour une consommation minimale de m\u00e9moire et un r\u00e9glage optimal des performances r\u00e9seau ;<\/li>\n<li>Compactage des donn\u00e9es \u00e0 la demande ;<\/li>\n<li>En compl\u00e9ment, un archiveur multithread\u00e9 wZA est propos\u00e9 pour la migration des fichiers sans arr\u00eater le service.<\/li>\n<\/ul>\n<p>\n<b>Exp\u00e9rience r\u00e9elle :<\/b><\/p>\n<p>J'ai d\u00e9velopp\u00e9 et test\u00e9 un serveur et un archiveur sur des donn\u00e9es en direct pendant une dur\u00e9e assez longue, et maintenant il fonctionne avec succ\u00e8s sur un cluster comprenant 250 000 000 de petits fichiers (images), r\u00e9partis dans 15 000 000 de r\u00e9pertoires sur des disques SATA s\u00e9par\u00e9s. Le cluster de 10 serveurs repr\u00e9sente un serveur d'origine, install\u00e9 derri\u00e8re un r\u00e9seau CDN. Pour son entretien, on utilise 2 serveurs Nginx + 2 serveurs wZD.<\/p>\n<p>Pour ceux qui d\u00e9cident d'utiliser ce serveur, il est judicieux de planifier la structure des r\u00e9pertoires avant utilisation, si cela est applicable. Je pr\u00e9cise imm\u00e9diatement que le serveur n'est pas con\u00e7u pour tout entasser dans un seul archive Bolt.<\/p>\n<p><b>Test de performance :<\/b><\/p>\n<p>Plus la taille du fichier archiv\u00e9 est petite, plus les op\u00e9rations GET et PUT sont rapides. Comparons le temps total d'\u00e9criture d'un client HTTP dans des fichiers normaux et dans des archives Bolt, ainsi que la lecture. Nous comparons le travail avec des fichiers de tailles 32 Ko, 256 Ko, 1024 Ko, 4096 Ko et 32768 Ko.<\/p>\n<p>Lors de l'utilisation des archives Bolt, l'int\u00e9grit\u00e9 des donn\u00e9es de chaque fichier est v\u00e9rifi\u00e9e (un CRC est utilis\u00e9), et avant l'\u00e9criture ainsi qu'apr\u00e8s l'\u00e9criture, une lecture \u00e0 la vol\u00e9e et un nouveau calcul ont lieu, ce qui entra\u00eene naturellement des d\u00e9lais, mais l'essentiel est la s\u00e9curit\u00e9 des donn\u00e9es. <\/p>\n<p>J'ai effectu\u00e9 les tests de performance sur des SSD, car sur des disques SATA, les tests ne montrent pas de diff\u00e9rence claire.<\/p>\n<p><b>Graphiques des r\u00e9sultats des tests :<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComme on peut le voir, pour les petits fichiers, la diff\u00e9rence de temps de lecture et d'\u00e9criture entre les fichiers archiv\u00e9s et non archiv\u00e9s est faible.<\/p>\n<p>Nous obtiendrons une image compl\u00e8tement diff\u00e9rente lors du test de lecture et d'\u00e9criture de fichiers de 32 Mo :<\/p>\n<p><img decoding=\"async\" alt=\"Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa diff\u00e9rence de temps entre la lecture des fichiers est d'environ 5 \u00e0 25 ms. Pour l'\u00e9criture, la situation est pire, la diff\u00e9rence est d'environ 150 ms. Mais dans ce cas, il n'est pas n\u00e9cessaire de t\u00e9l\u00e9charger de gros fichiers, cela n'a tout simplement pas de sens, ils peuvent vivre s\u00e9par\u00e9ment des archives.<\/p>\n<p>*Techniquement, ce serveur peut \u00e9galement \u00eatre utilis\u00e9 pour des t\u00e2ches n\u00e9cessitant NoSQL.<\/p>\n<p><b>Principales m\u00e9thodes de travail avec le serveur wZD :<\/b><\/p>\n<p>T\u00e9l\u00e9chargement d'un fichier normal :<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nT\u00e9l\u00e9chargement d'un fichier dans une archive Bolt (si la parameter serveur fmaxsize, qui d\u00e9termine la taille maximale du fichier pouvant \u00eatre inclus dans l'archive, n'est pas d\u00e9pass\u00e9; si elle est d\u00e9pass\u00e9e, le fichier sera t\u00e9l\u00e9charg\u00e9 normalement \u00e0 c\u00f4t\u00e9 de l'archive) :<\/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>\nT\u00e9l\u00e9chargement de fichier (si le disque et l'archive contiennent des fichiers avec les m\u00eames noms, par d\u00e9faut, la priorit\u00e9 est donn\u00e9e au fichier non archiv\u00e9) :<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nT\u00e9l\u00e9chargement forc\u00e9 d'un fichier depuis l'archive Bolt :<\/p>\n<pre><code class=\"bash\">curl -o test.jpg -H &quot;FromArchive: 1&quot; http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>La description d'autres m\u00e9thodes se trouve dans la documentation.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Documentation wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Documentation wZA<\/a><\/noindex><\/p>\n<p>Le serveur ne prend pour l'instant en charge que le protocole HTTP, HTTPS n'est pas encore op\u00e9rationnel. La m\u00e9thode POST n'est pas non plus support\u00e9e (il n'est pas encore d\u00e9termin\u00e9 si elle est n\u00e9cessaire ou non).<\/p>\n<p>Quiconque fouille dans le code source y d\u00e9couvrira une petite friandise, que tout le monde n'appr\u00e9cie pas, mais je n'ai pas li\u00e9 le code principal aux fonctions du framework web, \u00e0 part le gestionnaire d'interruptions, donc je peux le r\u00e9\u00e9crire rapidement sur presque n'importe quel moteur par la suite.<\/p>\n<p><b>\u00c0 faire :<\/b><\/p>\n<ul>\n<li>D\u00e9veloppement d'un r\u00e9plica et d'un distributeur personnalis\u00e9s + g\u00e9o pour une utilisation dans de grands syst\u00e8mes sans syst\u00e8mes de fichiers en cluster (tout en grand)<\/li>\n<li>Possibilit\u00e9 de restauration compl\u00e8te des m\u00e9tadonn\u00e9es en cas de perte totale (en cas d'utilisation du distributeur)<\/li>\n<li>Protocole natif pour permettre l'utilisation de connexions r\u00e9seau constantes et pilotes pour diff\u00e9rents langages de programmation<\/li>\n<li>Fonctionnalit\u00e9s avanc\u00e9es d'utilisation de la composante NoSQL<\/li>\n<li>Compression de diff\u00e9rents types (gzip, zstd, snappy) pour des fichiers ou des valeurs \u00e0 l'int\u00e9rieur des archives Bolt et pour des fichiers ordinaires<\/li>\n<li>Chiffrement de diff\u00e9rents types pour des fichiers ou des valeurs \u00e0 l'int\u00e9rieur des archives Bolt et pour des fichiers ordinaires<\/li>\n<li>Conversion vid\u00e9o serveur diff\u00e9r\u00e9e, y compris sur GPU<\/li>\n<\/ul>\n<p>\nC'est tout pour moi, j'esp\u00e8re que ce serveur sera utile \u00e0 quelqu'un, licence BSD-3, copyright double, car sans l'entreprise o\u00f9 je travaille, je n'aurais pas \u00e9crit ce serveur. Je suis le seul d\u00e9veloppeur. Je serais reconnaissant pour les bugs trouv\u00e9s et les demandes de fonctionnalit\u00e9s.<br \/>\n<br \/>Source : <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\/fr\/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=\"fr_FR\" \/>\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\/fr\/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\udd47Stockage efficace de centaines de millions de petits fichiers. Solution auto-h\u00e9berg\u00e9e | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}