{"id":2100,"date":"2016-01-01T00:39:08","date_gmt":"2016-01-01T00:39:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2100"},"modified":"2023-01-25T15:49:35","modified_gmt":"2023-01-25T23:49:35","slug":"the-best-database-for-storing-images-might-not-be-a-database-at-all","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/","title":{"rendered":"La mejor base de datos para almacenar im\u00e1genes podr\u00eda no ser una base de datos en absoluto"},"content":{"rendered":"<p>\u00bfQu\u00e9 base de datos es mejor para almacenar im\u00e1genes? A menudo me preguntan sobre el almacenamiento de im\u00e1genes, documentos, PDF u otros objetos binarios en Couchbase. <span style=\"font-weight: 400\">O, casi con la misma frecuencia, \u00bfes Couchbase la mejor base de datos para almacenar im\u00e1genes?<\/span><\/p>\n<p>Como arquitecto de servicios y bases de datos, suelo dar la misma respuesta: para este tipo de objetos, es una idea mediocre almacenar archivos en una base de datos. Cuando digo esto, hablo desde mi experiencia personal a lo largo de una larga carrera trabajando con muchas bases de datos relacionales y NoSQL.<\/p>\n<p>S\u00e9 que desde el punto de vista del desarrollador es f\u00e1cil y c\u00f3modo almacenar archivos en la base de datos. Incluso es l\u00f3gico hacerlo. Tengo datos, necesito almacenarlos. Quiero tener informaci\u00f3n sobre esos datos para poder buscarlos y servirlos a mis usuarios. Todo esto tambi\u00e9n tiene sentido para m\u00ed.<\/p>\n<p>Tengo dos argumentos de por qu\u00e9 es una idea mediocre almacenar este tipo de objetos en una base de datos (Couchbase u otra). Tambi\u00e9n propondr\u00e9 una soluci\u00f3n para utilizar mejor la base de datos de almacenamiento de im\u00e1genes Couchbase a un coste que sea eficiente y para servir mejor al usuario final. Al fin y al cabo, para eso estamos todos aqu\u00ed de verdad, \u00bfno?<\/p>\n<h2>Gasto operativo y rendimiento<\/h2>\n<p>Al almacenar permanentemente objetos grandes en una base de datos, estar\u00e1 utilizando su capa m\u00e1s cara y la que deber\u00eda ser una de las de mayor rendimiento para objetos que suelen ser est\u00e1ticos y cambian con poca frecuencia en la mayor\u00eda de los casos de uso. Basta con pensar en el coste por GB de almacenamiento en una instancia EC2 en AWS en comparaci\u00f3n con el almacenamiento de ese objeto en S3. Cuando utilic\u00e9 la calculadora de AWS en el momento de escribir esto, el almacenamiento en S3 costaba al menos 1\/5 del coste del almacenamiento m\u00e1s barato en EC2.<\/p>\n<p>Digo al menos porque las configuraciones no son una comparaci\u00f3n 1:1 de posibilidades, ya que realmente est\u00e1n pensadas para cosas diferentes. S3 est\u00e1 pensado espec\u00edficamente para albergar montones de objetos est\u00e1ticos con una tasa de durabilidad muy alta por un coste muy razonable y EC2 est\u00e1 pensado para tener almacenamiento operativo.<\/p>\n<p>Ahora piense en el coste f\u00edsico de almacenar im\u00e1genes de ese objeto en una base de datos y luego replicarlas, hacer copias de seguridad, etc. durante meses o a\u00f1os. Los costes y tiempos operativos de transportar ese volumen de datos se hacen evidentes. Con el tiempo, estos objetos se convierten en anclas alrededor del cuello del equipo de operaciones. Adem\u00e1s, si no gestionas las cosas correctamente, podr\u00edas tener una base de datos dentro de dos a\u00f1os almacenando, haciendo copias de seguridad y replicando im\u00e1genes de un usuario que dej\u00f3 de utilizar tu servicio hace 1,5 a\u00f1os mientras sigues pagando por cada KB utilizado varias veces.<\/p>\n<p>Toda esa sobrecarga simplemente para facilitar el desarrollo. Simplemente no vale la pena o no es eficiente a largo plazo. De nuevo, esto no es exclusivo de Couchbase.<\/p>\n<h2>Utilizar cada herramienta para lo que es mejor<\/h2>\n<p>Couchbase puede servir objetos directamente desde la cach\u00e9 gestionada en RAM con un gran rendimiento si accedes a trav\u00e9s del ID del objeto o si has identificado qu\u00e9 objeto quieres a partir de una consulta. \u00bfPuede Couchbase almacenar y servir esa imagen o binario m\u00e1s grande muy r\u00e1pido desde RAM tambi\u00e9n? Por supuesto que puede, pero consumir\u00e1 costosos recursos del servidor, no s\u00f3lo de almacenamiento, para obtener ese rendimiento. Couchbase tambi\u00e9n tiene un l\u00edmite de tama\u00f1o de objeto de 20MB. Incluso si tus objetos no se acercan a ese tama\u00f1o, todav\u00eda puede ser una mala idea almacenar este tipo de objetos en una base de datos de forma permanente. Como mencion\u00e9 antes, Amazon S3 y HDFS son excelentes para almacenar y servir contenido est\u00e1tico como este. Esto es para lo que fueron dise\u00f1ados. Ofrecen un gran rendimiento a un gran valor para ese tipo de carga de trabajo. Lo mejor es utilizar las herramientas adecuadas para los trabajos adecuados. Aunque podemos almacenar en la base de datos im\u00e1genes de gran tama\u00f1o, as\u00ed como objetos est\u00e1ticos, no es para lo que son mejores.<\/p>\n<h2>Entonces, \u00bfc\u00f3mo puedo resolver esto para almacenar grandes datos en la base de datos? \u00a1Tengo tantas cosas que almacenar!<\/h2>\n<p>Para este ejemplo, hablaremos de un almac\u00e9n de im\u00e1genes, ya que es el caso de uso m\u00e1s com\u00fan que escucho, pero podr\u00eda ser cualquier tipo de objeto est\u00e1tico grande. A un alto nivel para este caso de uso, deber\u00edas buscar almacenar s\u00f3lo los datos en Couchbase que son requeridos por la aplicaci\u00f3n cuando un usuario est\u00e1 buscando una imagen. Cuando planifiques tus patrones de acceso a datos y por tanto tu modelo de objetos de base de datos, hazte algunas preguntas.<\/p>\n<ul>\n<li>\u00bfQu\u00e9 datos debe presentar la aplicaci\u00f3n al usuario sobre cada imagen y en qu\u00e9 momento del flujo?<\/li>\n<li>\u00bfQu\u00e9 b\u00fasquedas se har\u00e1n sobre la imagen y c\u00f3mo se presentar\u00e1n los resultados? (Palabras clave, t\u00edtulo, creador, fecha de creaci\u00f3n, etc.) Si se ajusta a su caso de uso, podr\u00eda incluso almacenar una peque\u00f1a miniatura de la imagen en la base de datos de almacenamiento para tener la opci\u00f3n de una entrega r\u00e1pida.<\/li>\n<li>\u00bfEn qu\u00e9 momento del flujo de la aplicaci\u00f3n se necesitar\u00e1 cada dato?<\/li>\n<li>\u00bfCu\u00e1l ser\u00e1 el patr\u00f3n de ID de objeto para el objeto de metadatos de cada imagen? Para obtener m\u00e1s informaci\u00f3n sobre el modelado de objetos Couchbase y ejemplos de ID de objetos, lee las entradas de mi blog <a href=\"\/blog\/es\/user-profile-store-advanced-data-modeling\/\">aqu\u00ed<\/a> y <a href=\"\/blog\/es\/advanced-object-modeling-for-high-write-rates-with-logging-and-event-data\/\">aqu\u00ed<\/a> para coger ideas.<\/li>\n<\/ul>\n<p>Ahora que tienes los datos de cara al usuario en Couchbase, puedes hacer b\u00fasquedas r\u00e1pidas de claves, vistas map reduce o consultas N1QL completas contra \u00edndices secundarios para llegar a los datos. Las im\u00e1genes grandes deben almacenarse en algo como AWS S3, HDFS, una red de distribuci\u00f3n de contenidos (CDN), un servidor web, un servidor de archivos o cualquier otra cosa que sea ideal para servir objetos est\u00e1ticos grandes, de acuerdo con tu caso de uso y presupuesto.<\/p>\n<p>Profundicemos un poco m\u00e1s y hablemos de c\u00f3mo lo conseguimos.<\/p>\n<h2>Ejemplo de modelo de objetos<\/h2>\n<p>Propongo dos objetos en Couchbase para cada imagen real de tu aplicaci\u00f3n:<\/p>\n<ol>\n<li>Un objeto JSON que contiene los metadatos sobre la imagen. Estar\u00e1 en JSON para que podamos indexarla, consultarla con N1QL o Views, lo que necesite la aplicaci\u00f3n. En este objeto tambi\u00e9n estar\u00e1 el puntero a la imagen principal en el otro sistema.<\/li>\n<li>Un objeto Key\/Value que contiene datos para las im\u00e1genes en miniatura de la imagen principal y se almacena en un bucket separado de Couchbase. Estamos manteniendo la miniatura en Couchbase para tener una r\u00e1pida presentaci\u00f3n de la misma a un usuario. En teor\u00eda, podr\u00edamos tener esto como un valor en el documento JSON con los metadatos, pero las ventajas de tenerlos separados cuando se trata de la indexaci\u00f3n y la utilizaci\u00f3n de recursos Couchbase compensar eso, especialmente si usted planea en una alta tasa de mutaci\u00f3n de datos.<\/li>\n<\/ol>\n<p>Ya que cada objeto en Couchbase tiene que tener un ID de objeto \u00fanico (dentro de un bucket) y podemos tener 250 bytes en ese ID, usemos eso a nuestro favor y tengamos un patr\u00f3n de ID de objeto estandarizado para una f\u00e1cil y r\u00e1pida recuperaci\u00f3n de objetos. Un ID de objeto estandarizado nos ayudar\u00e1 a recuperar f\u00e1cilmente una imagen y su contenido relacionado r\u00e1pidamente desde el Servicio de Datos de Couchbase o cuando realicemos una consulta utilizando N1QL.<\/p>\n<p>El patr\u00f3n de ID de objeto para cada documento ser\u00e1 el siguiente:<\/p>\n<ul>\n<li>objeto de metadatos: <span style=\"font-size: 14.6667px;font-family: 'Courier New';font-style: italic;vertical-align: baseline\">metadatos::<\/span> donde el identificador \u00fanico es asignado a esa imagen por la aplicaci\u00f3n. Dado que vamos a encontrar im\u00e1genes mediante consultas con N1QL, no voy con un ID de objeto m\u00e1s descriptivo.<\/li>\n<li>Objeto miniatura: <span style=\"font-size: 14.6667px;font-family: 'Courier New';vertical-align: baseline\">miniatura:: <\/span>donde el nombre es el que hemos utilizado para el objeto de metadatos. De este modo, establecemos una relaci\u00f3n informal entre los objetos. Sabemos que cada <span style=\"font-size: 14.6667px;font-family: 'Courier New';vertical-align: baseline\">metadatos<\/span> tiene un objeto <span style=\"font-size: 14.6667px;font-family: 'Courier New';vertical-align: baseline\">miniatura<\/span> objeto. As\u00ed que si necesitamos obtener ambos, podemos hacerlo. Una vez que conocemos el UUID, podemos obtener la miniatura muy r\u00e1pidamente o viceversa.<\/li>\n<\/ul>\n<p>Para los propios objetos:<\/p>\n<ul>\n<li>El objeto de metadatos ser\u00e1 un documento JSON y podr\u00eda tener el siguiente aspecto:<br \/>\n<table>\n<tbody>\n<tr>\n<td>{<\/p>\n<p>\"title\" : \"Lindo gatito y perrito\",<\/p>\n<p>\"file-location\" : \"https:\/\/s3.amazonaws.com\/kittypics\/cutekittyanddoggy.jpg\",<\/p>\n<p>\"thumbnail1\" : \"thumbnail::<\/p>\n<p>\u201c,<\/p>\n<p>\"dimensiones-px\" : \"50\u00d750\"<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La parte de la miniatura donde dice .<\/p>\n<p>ser\u00eda sustituido por el ID de ese objeto, por supuesto. De esta forma, cuando obtengamos el objeto de metadatos, tendremos el ID del objeto miniatura y podremos cogerlo r\u00e1pidamente. Esta es una de esas veces en las que probablemente es mejor hacer m\u00faltiples llamadas a Couchbase que como lo har\u00edas en otra base de datos donde ser\u00eda mejor hacerlo en una sola llamada.<\/li>\n<li>El objeto miniatura ser\u00e1 simplemente una clave\/valor siendo el valor binario.<\/li>\n<\/ul>\n<h2>Configuraci\u00f3n espec\u00edfica de Couchbase<\/h2>\n<h3>Cubos<\/h3>\n<p>Propongo dos buckets Couchbase. Uno para los documentos JSON que contienen los metadatos sobre cada imagen y otro para la miniatura. Las dos razones espec\u00edficas para esto son:<\/p>\n<ol>\n<li>Los cubos separados permiten ajustar la cach\u00e9 gestionada seg\u00fan las necesidades de los objetos. Por ejemplo, quiz\u00e1s quiero que los metadatos de cada imagen est\u00e9n siempre disponibles lo m\u00e1s r\u00e1pido posible. Dimensiono la cuota de RAM para el bucket de \"metadatos\" para tener todos esos objetos en la cach\u00e9 gestionada para obtener el mejor rendimiento. Cuando se trata del almacenamiento de datos de valores clave para las miniaturas, quiz\u00e1s queramos ahorrar un poco de dinero en el tama\u00f1o de nuestras instancias y no mantener tantas de ellas en la cach\u00e9, porque si aparecen unos segundos m\u00e1s tarde, no pasa nada. Podr\u00edamos dimensionar la cuota de RAM para el cubo de metadatos a 300 GB en todo el cl\u00faster, pero las miniaturas a 50 GB en todo el cl\u00faster, a pesar de que las miniaturas podr\u00edan ser el conjunto de datos m\u00e1s grande en el disco.<\/li>\n<li>Nunca necesitaremos indexar o consultar los objetos miniatura. Siempre podemos cogerlos por el ID de objeto que obtuvimos del documento JSON de metadatos o por la aplicaci\u00f3n que lo construye. Para profundizar un poco m\u00e1s en la raz\u00f3n por la que queremos estos objetos en dos buckets separados, cuando indexas en Couchbase, cada objeto de un bucket es interrogado en alg\u00fan momento para ver si debe ser incluido en un \u00edndice. Esto lo hace el View Indexer si est\u00e1s usando Views o el Projector si est\u00e1s usando GSI (Global Secondary Indexing). Si tenemos estos dos tipos de datos en buckets separados, el indexador y el proyector, que necesitamos para consultar los documentos JSON nunca tendr\u00e1n que molestarse con los objetos miniatura y desperdiciar ciclos o recursos ya que los \u00edndices son espec\u00edficos de bucket. Otra ventaja es que, si usas vistas de Couchbase que se almacenan junto con los datos, los tiempos de reequilibrio del cl\u00faster deber\u00edan reducirse, ya que el indexador de vistas no tiene que consultar las miniaturas a medida que se mueven los datos. En general, esto significa que necesitas menos recursos de servidor, por lo que es m\u00e1s rentable.<\/li>\n<\/ol>\n<p>A efectos de este ejemplo, llamaremos a los dos cubos algo cr\u00edptico como \"metadatos\" y \"miniaturas\".<\/p>\n<h3>Valor Desalojar (por defecto) o Desalojar completamente<\/h3>\n<p>Lo m\u00e1s probable es que quieras evitar usar la funci\u00f3n de desalojo completo de Couchbase para este caso de uso en particular. Es una gran caracter\u00edstica, pero parte de la raz\u00f3n para almacenar estos objetos de metadatos de imagen en Couchbase es la funcionalidad, pero tambi\u00e9n el rendimiento que se obtiene de la cach\u00e9 gestionada. Lo m\u00e1s probable es que tu caso de uso requiera comprobar la existencia de un objeto en alg\u00fan punto del flujo de la aplicaci\u00f3n. Si ese es el caso, usar la evicci\u00f3n completa ser\u00e1 malo ya que tendr\u00e1s que ir al disco para comprobarlo. Si usas el \"desalojo de valores\" por defecto, entonces ser\u00e1s capaz de saber muy r\u00e1pidamente si el objeto existe ya que los datos de Couchbase sobre cada objeto estar\u00e1n en la cach\u00e9 gestionada en todo momento. As\u00ed que usa esta caracter\u00edstica sabiamente y s\u00f3lo activa la evicci\u00f3n completa si sabes exactamente lo que har\u00e1 a tu aplicaci\u00f3n y por qu\u00e9.<\/p>\n<h2>Una excepci\u00f3n a la regla<\/h2>\n<p>Como siempre, hay excepciones que van en contra de las reglas. Hay un cliente de Couchbase que conozco que pone objetos binarios (archivos de audio para ser espec\u00edficos) en Couchbase Server con un \u00e9xito asombroso. Lo hacen por una raz\u00f3n muy espec\u00edfica que utiliza Couchbase a su favor. Introducen grabaciones de audio en Couchbase, pero la clave es que su aplicaci\u00f3n divide los archivos de audio en trozos m\u00e1s peque\u00f1os y los transmite a Couchbase a medida que llegan, junto con un documento de metadatos para esa grabaci\u00f3n. Lo interesante es que no <b>permanentemente<\/b> almacenar el archivo de audio en la base de datos por las razones que ya he expuesto en este art\u00edculo. Transcurridos unos minutos, si no se ha accedido al archivo de audio, un proceso en segundo plano reconstruye cada archivo y lo traslada a Amazon S3 para almacenarlo durante m\u00e1s tiempo. A continuaci\u00f3n, actualizan el documento JSON de metadatos del archivo de audio con un puntero al archivo en S3. Ingesti\u00f3n muy r\u00e1pida y de alta velocidad con Couchbase y almacenamiento de objetos est\u00e1ticos a largo plazo con S3. Es un gran ejemplo del uso de las mejores herramientas para lo que son mejores.<\/p>\n<h2>Resumen<\/h2>\n<p><span style=\"font-weight: 400\">No te hagas preguntas equivocadas. \u00bfCu\u00e1l es la mejor base de datos para im\u00e1genes? \u00bfCu\u00e1l es la mejor base de datos para almacenar archivos? <\/span>Colocar permanentemente objetos grandes en una base de datos es una idea mediocre, en el mejor de los casos, independientemente de la plataforma de base de datos que utilices. Incluso si hay un sistema de archivos especial en la base de datos que dividir\u00e1 los archivos binarios grandes en archivos m\u00e1s peque\u00f1os para almacenarlos en la base de datos y volver a montarlos autom\u00e1ticamente. Se aplican los mismos conceptos. Est\u00e1s cambiando facilidad de desarrollo por una vida m\u00e1s cara y operacionalmente m\u00e1s dif\u00edcil en el futuro. Esto le perseguir\u00e1 m\u00e1s tarde.<\/p>\n<p>Para obtener la mejor soluci\u00f3n, utilice cada herramienta para lo que es mejor. Almacena en Couchbase un documento JSON de metadatos para cada objeto, tal vez una peque\u00f1a imagen en miniatura como mucho. En ese documento est\u00e1n los datos que necesitas sobre ese objeto en tu aplicaci\u00f3n r\u00e1pidamente, pero tambi\u00e9n un puntero a un almac\u00e9n de objetos construido a prop\u00f3sito como S3, un sistema de archivos o HDFS. Obtendr\u00e1 lo mejor de todos los mundos. Rendimiento, facilidad de operaciones y rentabilidad por no mucho trabajo extra.<\/p>\n<p>\u00bfNo est\u00e1 de acuerdo? \u00bfTienes otra excepci\u00f3n a la regla? A\u00f1\u00e1dela a los comentarios y hablemos.<\/p>","protected":false},"excerpt":{"rendered":"<p>Which database is best for storing images? I am asked routinely about storing images, documents, PDFs or other binary objects in Couchbase. Or, almost as frequently, is Couchbase the best database for storing images? As an architect for services and [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815],"tags":[],"ppma_author":[9008],"class_list":["post-2100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Database for Storing Images: Which is Best for Key Values?<\/title>\n<meta name=\"description\" content=\"From a developer perspective, it is easy and convenient to store files in a database. But the best database for storing images might not be a database all.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Best Database For Storing Images Might Not Be a Database At All\" \/>\n<meta property=\"og:description\" content=\"From a developer perspective, it is easy and convenient to store files in a database. But the best database for storing images might not be a database all.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-01T00:39:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-25T23:49:35+00:00\" \/>\n<meta name=\"author\" content=\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/\"},\"author\":{\"name\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/2887e38425754897cea2d896bf082e6d\"},\"headline\":\"The Best Database For Storing Images Might Not Be a Database At All\",\"datePublished\":\"2016-01-01T00:39:08+00:00\",\"dateModified\":\"2023-01-25T23:49:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/\"},\"wordCount\":2374,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/\",\"name\":\"Database for Storing Images: Which is Best for Key Values?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-01-01T00:39:08+00:00\",\"dateModified\":\"2023-01-25T23:49:35+00:00\",\"description\":\"From a developer perspective, it is easy and convenient to store files in a database. But the best database for storing images might not be a database all.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/the-best-database-for-storing-images-might-not-be-a-database-at-all\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Best Database For Storing Images Might Not Be a Database At All\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/04\\\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/2887e38425754897cea2d896bf082e6d\",\"name\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g60a4ddb304fde12e65369919433b8dc7\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g\",\"caption\":\"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase\"},\"description\":\"Kirk Kirkconnell was a Senior Solutions Engineer at Couchbase working with customers in multiple capacities to assist them in architecting, deploying, and managing Couchbase. His expertise is in operations, hosting, and support of large-scale application and database infrastructures.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/kirk-kirkconnell\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Database for Storing Images: Which is Best for Key Values?","description":"Desde el punto de vista del desarrollador, es f\u00e1cil y c\u00f3modo almacenar archivos en una base de datos. Pero puede que la mejor base de datos para almacenar im\u00e1genes no sea una base de datos en absoluto.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/","og_locale":"es_MX","og_type":"article","og_title":"The Best Database For Storing Images Might Not Be a Database At All","og_description":"From a developer perspective, it is easy and convenient to store files in a database. But the best database for storing images might not be a database all.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-01-01T00:39:08+00:00","article_modified_time":"2023-01-25T23:49:35+00:00","author":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/"},"author":{"name":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2887e38425754897cea2d896bf082e6d"},"headline":"The Best Database For Storing Images Might Not Be a Database At All","datePublished":"2016-01-01T00:39:08+00:00","dateModified":"2023-01-25T23:49:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/"},"wordCount":2374,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/","url":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/","name":"Database for Storing Images: Which is Best for Key Values?","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-01-01T00:39:08+00:00","dateModified":"2023-01-25T23:49:35+00:00","description":"Desde el punto de vista del desarrollador, es f\u00e1cil y c\u00f3modo almacenar archivos en una base de datos. Pero puede que la mejor base de datos para almacenar im\u00e1genes no sea una base de datos en absoluto.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/the-best-database-for-storing-images-might-not-be-a-database-at-all\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Best Database For Storing Images Might Not Be a Database At All"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/2887e38425754897cea2d896bf082e6d","name":"Kirk Kirkconnell, Ingeniero Superior de Soluciones, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g60a4ddb304fde12e65369919433b8dc7","url":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","caption":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase"},"description":"Kirk Kirkconnell fue Ingeniero Senior de Soluciones en Couchbase trabajando con clientes en m\u00faltiples capacidades para ayudarles en la arquitectura, despliegue y gesti\u00f3n de Couchbase. Su experiencia se centra en operaciones, alojamiento y soporte de aplicaciones a gran escala e infraestructuras de bases de datos.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/kirk-kirkconnell\/"}]}},"acf":[],"authors":[{"term_id":9008,"user_id":23,"is_guest":0,"slug":"kirk-kirkconnell","display_name":"Kirk Kirkconnell, Senior Solutions Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f704905856dcd1767d50024da51e2fa159eea665c85aff3224bc8763551d4e35?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2100"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2100\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2100"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}