{"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\/es\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","title":{"rendered":"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada\" src=\"\/wp-content\/uploads\/2020\/01\/39cbe3b73cf4a20dba7e9383f922704f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEstimado comunidad, este art\u00edculo estar\u00e1 dedicado al almacenamiento y recuperaci\u00f3n eficientes de cientos de millones de peque\u00f1os archivos. En esta etapa, se presenta una soluci\u00f3n final para sistemas de archivos compatibles con POSIX con soporte completo para bloqueos, incluidos los de cl\u00faster, y parece que incluso sin parches.<\/p>\n<p>Por lo tanto, para este prop\u00f3sito, escrib\u00ed mi propio servidor especializado.<br \/>\nA medida que implementaba esta tarea, pude resolver el problema principal y, al mismo tiempo, lograr un ahorro en el espacio en disco y la memoria RAM que consum\u00eda nuestra sistem\u00e1tica de archivos en cl\u00faster. Tal cantidad de archivos es perjudicial para cualquier sistema de archivos de cl\u00faster. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>La idea es la siguiente:<\/p>\n<p>En t\u00e9rminos simples, a trav\u00e9s del servidor se cargan archivos peque\u00f1os, que se almacenan directamente en un archivo de archivero, y as\u00ed tambi\u00e9n se leen desde \u00e9l, mientras que los archivos grandes se colocan al lado. Esquema: 1 carpeta = 1 archivo de archivero, lo que resulta en varios millones de archivos de archivero con peque\u00f1os archivos, en lugar de varios cientos de millones de archivos. Y todo esto est\u00e1 completamente implementado, sin ning\u00fan script y distribuciones de archivos en archivos tar\/zip.<\/p>\n<p>Tratar\u00e9 de exponerlo m\u00e1s brevemente, pido disculpas de antemano si la publicaci\u00f3n es extensa.<\/p>\n<p>Todo comenz\u00f3 porque no pude encontrar un servidor adecuado en el mundo que pudiera almacenar datos recibidos a trav\u00e9s del protocolo HTTP directamente en archivos de archivero, de manera que no hubiera las desventajas inherentes a los archivos de archivero comunes y a los almacenes de objetos. La raz\u00f3n de la b\u00fasqueda fue el cl\u00faster de Origin, que se hab\u00eda expandido a gran escala con 10 servidores, y que ya acumulaba 250,000,000 archivos peque\u00f1os, mientras que la tendencia de crecimiento no mostraba signos de detenerse.<\/p>\n<p><b>Para aquellos que no les gusta leer art\u00edculos y prefieren una documentaci\u00f3n m\u00e1s simple:<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">: uno de los indicadores m\u00e1s importantes sobre DEX).<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">: uno de los indicadores m\u00e1s importantes sobre DEX).<\/a><\/noindex>.<\/p>\n<p>Y docker tambi\u00e9n, ahora hay una opci\u00f3n solo junto con nginx por si acaso:<\/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>\nSiguiente:<\/p>\n<p>Si hay muchos archivos, se requieren recursos significativos, y lo m\u00e1s lamentable es que parte de ellos se desperdicia. Por ejemplo, al utilizar un sistema de archivos en cl\u00faster (en este caso, MooseFS), un archivo, independientemente de su tama\u00f1o real, siempre ocupa un m\u00ednimo de 64 KB. Es decir, para archivos de 3, 10 o 30 KB se requieren 64 KB en el disco. Si hay un cuarto de mil millones de archivos, perdemos entre 2 y 10 terabytes. No ser\u00e1 posible crear nuevos archivos indefinidamente, ya que en MooseFS hay una limitaci\u00f3n: no m\u00e1s de 1 mil millones con una r\u00e9plica de cada archivo.<\/p>\n<p>A medida que aumenta la cantidad de archivos, se necesita mucha memoria RAM para los metadatos. Adem\u00e1s, los frecuentes grandes vol\u00famenes de metadatos contribuyen al desgaste de las unidades SSD.<\/p>\n<p><b>Servidor wZD. Organizando los discos.<\/b><\/p>\n<p>El servidor est\u00e1 escrito en Go. Primero necesitaba reducir la cantidad de archivos. \u00bfC\u00f3mo hacerlo? A trav\u00e9s de la archivaci\u00f3n, pero en este caso sin compresi\u00f3n, ya que mis archivos son im\u00e1genes comprimidas. BoltDB fue de gran ayuda, aunque hubo que eliminarle algunos inconvenientes, lo que est\u00e1 reflejado en la documentaci\u00f3n.<\/p>\n<p>En total, en lugar de un cuarto de mil millones de archivos, en mi caso solo quedaron 10 millones de archivos Bolt. Si hubiera tenido la posibilidad de cambiar la estructura actual de llenado de las carpetas, posiblemente se podr\u00eda haber reducido a aproximadamente 1 mill\u00f3n de archivos. <\/p>\n<p>Todos los archivos peque\u00f1os se empaquetan en archivos Bolt, que autom\u00e1ticamente reciben los nombres de las carpetas en las que se encuentran, mientras que todos los archivos grandes permanecen al lado de los archivos comprimidos, no tiene sentido empaquetarlos, esto es configurable. Los peque\u00f1os, se archivan, los grandes, se dejan sin cambios. El servidor funciona de manera transparente con ambos.<\/p>\n<p><b>Arquitectura y caracter\u00edsticas del servidor wZD.<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada\" src=\"\/wp-content\/uploads\/2020\/01\/38e2c6ad50bffe6c2ced460f8dc3e65a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl servidor funciona bajo sistemas operativos Linux, BSD, Solaris y OSX. Solo lo he probado para la arquitectura AMD64 bajo Linux, pero deber\u00eda ser adecuado tambi\u00e9n para ARM64, PPC64, MIPS64.<\/p>\n<p><b>Principales caracter\u00edsticas:<\/b><\/p>\n<ul>\n<li>Servidor de composici\u00f3n y ventanas<\/li>\n<li>Multiservidoridad, que asegura alta disponibilidad y balanceo de carga;<\/li>\n<li>M\u00e1xima transparencia para el usuario o desarrollador;<\/li>\n<li>M\u00e9todos HTTP soportados: GET, HEAD, PUT y DELETE;<\/li>\n<li>Control del comportamiento de lectura y escritura a trav\u00e9s de encabezados de cliente;<\/li>\n<li>Soporte para hosts virtuales configurables de manera flexible;<\/li>\n<li>Soporte para la integridad de datos CRC al escribir\/leer;<\/li>\n<li>Buffers semi-din\u00e1micos para un consumo m\u00ednimo de memoria y una configuraci\u00f3n \u00f3ptima del rendimiento de red;<\/li>\n<li>Compactaci\u00f3n de datos diferida;<\/li>\n<li>Adem\u00e1s, se ofrece el archivador multihilo wZA para migrar archivos sin detener el servicio.<\/li>\n<\/ul>\n<p>\n<b>Experiencia real:<\/b><\/p>\n<p>He estado desarrollando y probando un servidor y un archivador con datos reales durante bastante tiempo, y ahora funciona con \u00e9xito en un cl\u00faster que incluye 250,000,000 de peque\u00f1os archivos (im\u00e1genes), repartidos en 15,000,000 de directorios en discos SATA separados. El cl\u00faster de 10 servidores act\u00faa como un servidor de origen, instalado detr\u00e1s de una red CDN. Para su mantenimiento, se utilizan 2 servidores Nginx + 2 servidores wZD.<\/p>\n<p>Aquellos que decidan utilizar este servidor deben planificar la estructura de directorios antes de usarlo, si es aplicable. Aclaro de inmediato que el servidor no est\u00e1 dise\u00f1ado para que todo se concentre en un archivo Bolt.<\/p>\n<p><b>Pruebas de rendimiento:<\/b><\/p>\n<p>Cuanto menor sea el tama\u00f1o del archivo comprimido, m\u00e1s r\u00e1pidas ser\u00e1n las operaciones GET y PUT realizadas con \u00e9l. Compararemos el tiempo total de escritura de un cliente HTTP en archivos normales y en archivos Bolt, as\u00ed como la lectura. Se comparan archivos de 32 KB, 256 KB, 1024 KB, 4096 KB y 32768 KB.<\/p>\n<p>Al trabajar con archivos Bolt, se verifica la integridad de los datos de cada archivo (se utiliza CRC), antes de la escritura y tambi\u00e9n se realiza una lectura en tiempo real y un rec\u00e1lculo despu\u00e9s de la escritura, lo cual naturalmente introduce retrasos, pero lo m\u00e1s importante es la seguridad de los datos. <\/p>\n<p>Realic\u00e9 pruebas de rendimiento en unidades SSD, ya que en discos SATA las pruebas no muestran una diferencia clara.<\/p>\n<p><b>Gr\u00e1ficos de los resultados de las pruebas:<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada\" src=\"\/wp-content\/uploads\/2020\/01\/298ae08420f476ebb128d5254921973a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada\" src=\"\/wp-content\/uploads\/2020\/01\/a7b081be88d894b50942a98f5a666e0e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo se puede ver, para archivos peque\u00f1os la diferencia en el tiempo de lectura y escritura entre archivos comprimidos y no comprimidos no es significativa.<\/p>\n<p>Ya obtendremos una imagen completamente diferente al probar la lectura y escritura de archivos de 32 MB:<\/p>\n<p><img decoding=\"async\" alt=\"Almacenamiento eficiente de cientos de millones de peque\u00f1os archivos. Soluci\u00f3n autogestionada\" src=\"\/wp-content\/uploads\/2020\/01\/d908560a26df34c4253c5ed5bd879727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa diferencia de tiempo entre la lectura de archivos es de entre 5-25 ms. La escritura es un poco peor, con una diferencia de aproximadamente 150 ms. Pero en este caso, no se requiere subir archivos grandes, no tiene sentido, pueden existir por separado de los archivos comprimidos.<\/p>\n<p>*T\u00e9cnicamente, este servidor tambi\u00e9n se puede usar para tareas que requieren NoSQL.<\/p>\n<p><b>M\u00e9todos principales de trabajo con el servidor wZD:<\/b><\/p>\n<p>Subida de un archivo normal:<\/p>\n<pre><code class=\"bash\">curl -X PUT --data-binary @test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nSubida de un archivo en un archivo Bolt (si no se supera el par\u00e1metro del servidor fmaxsize, que determina el tama\u00f1o m\u00e1ximo de archivo que puede incluirse en el archivo, si se supera, el archivo se cargar\u00e1 normalmente junto al archivo):<\/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>\nDescarga de archivo (si hay archivos con los mismos nombres en el disco y en el archivo comprimido, al descargar se da prioridad por defecto al archivo no comprimido):<\/p>\n<pre><code class=\"bash\">curl -o test.jpg http:\/\/localhost\/test\/test.jpg<\/code><\/pre>\n<p>\nDescarga de archivo del archivo Bolt (forzado):<\/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 descripci\u00f3n de otros m\u00e9todos est\u00e1 en la documentaci\u00f3n.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wzd\/blob\/master\/README-RUS.md\">Documentaci\u00f3n wZD<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/eltaline\/wza\/blob\/master\/README-RUS.md\">Documentaci\u00f3n wZA<\/a><\/noindex><\/p>\n<p>El servidor solo admite el protocolo HTTP por el momento; HTTPS a\u00fan no est\u00e1 operativo. Tambi\u00e9n, el m\u00e9todo POST no es compatible (a\u00fan no se ha decidido si es necesario o no).<\/p>\n<p>Quien examine el c\u00f3digo fuente encontrar\u00e1 un dulce, no a todos les gusta, pero no he vinculado el c\u00f3digo principal a las funciones del marco web, excepto al manejador de interrupciones, as\u00ed que en el futuro puedo reescribirlo r\u00e1pidamente en casi cualquier motor.<\/p>\n<p><b>ToDo:<\/b><\/p>\n<ul>\n<li>Desarrollo de un replicador y distribuidor propio + geolocalizaci\u00f3n para su uso en sistemas grandes sin sistemas de archivos en cl\u00faster (todo de manera profesional)<\/li>\n<li>Posibilidad de recuperaci\u00f3n inversa total de metadatos en caso de p\u00e9rdida total (si se usa el distribuidor)<\/li>\n<li>Protocolo nativo para permitir el uso de conexiones de red permanentes y controladores para diferentes lenguajes de programaci\u00f3n<\/li>\n<li>Funcionalidades avanzadas para el uso de componentes NoSQL<\/li>\n<li>Compresiones de diferentes tipos (gzip, zstd, snappy) para archivos o valores dentro de los archivos Bolt y para archivos comunes<\/li>\n<li>Cifrado de diferentes tipos para archivos o valores dentro de los archivos Bolt y para archivos comunes<\/li>\n<li>Conversi\u00f3n de video en servidor diferido, incluyendo en GPU<\/li>\n<\/ul>\n<p>\nEso es todo, espero que este servidor le sea \u00fatil a alguien, licencia BSD-3, copyright dual, ya que si no fuera por la empresa donde trabajo, no habr\u00eda escrito el servidor. Soy el \u00fanico desarrollador. Agradecer\u00eda los errores encontrados y las solicitudes de caracter\u00edsticas.<br \/>\n<br \/>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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 Almacenamiento eficiente de cientos de millones de archivos peque\u00f1os. Soluci\u00f3n auto-hospedada | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/effektivnoe-hranenie-soten-millionov-malenkih-fajlov-self-hosted-reshenie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/55408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=55408"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/55408\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=55408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=55408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=55408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}