SlideShare una empresa de Scribd logo
9
Lo más leído
16
Lo más leído
22
Lo más leído
CouchDB
Base de datos NoSQL
Contenido
• Descripción
• Arquitectura
• Replicación
• Seguridad
• Auditoria
• Performance Management
• Backup and Recovery
• Data warehouse Facilities
• DBA Tools existentes
• Conclusiones
Descripción
 Apache CouchDB es un software de gestión de bases de datos
OpenSource publicado por Apache Software Foundation. CouchDB
(Couch es un acrónimo para cluster of unreliable commodity hardware)
está escrito en Erlang, un lenguaje de programación funcional con
enfoque en la creación de aplicaciones tolerantes a fallos y altamente
concurrentes.
Descripción
 CouchDB usa HTTP como su interfaz de programación principal y JSON
para almacenamiento de datos.
 Todos los recursos de la base de datos tiene una URI única que expone
servicios a travez de los métodos que implementa HTTP(POST, GET, PUT Y
DELETED), estos métodos son utilizados para el CRUD.
Propiedades ACID
 La capa de archivos y el sistema de confirmaciones (commitment) de
CouchDB contribuyen a cumplir las características ACID .
 En disco CouchDB nunca sobre escribe información confirmada
(commited) o la que tenga estructuras asociadas, asegurando que los
archivos de la base datos están en un estado consistente.
 La actualización de documentos (add, edit, delete) son serializadas, lo que
permite escritura concurrente. El control de lectura lo hace utilizando
MVCC (Multi-Vesion Concurrency Control), este modelo permite que cada
cliente mire una instantánea coherente de la base de datos desde el
principio hasta el final de la operación de lectura
Propiedades ACID
 Los documentos se indexan en árboles B utilizando su nombre (DocID) y un
documento de identidad de secuencia.
 Cada actualización a una instancia de la base genera un nuevo número
secuencial.
 La secuencias de IDs son usados después para encontrar los cambios de
forma incremental.
 Los índices del árbol B se actualizan simultáneamente cuando los
documentos son guardados o borrados, hay que tener en cuenta que las
actualizaciones del índice siempre se efectúan al final del archivo
(append-only updates).
Views
 Las vistas (Views) son la herramienta utilizada para consultas y reportes en
los documentos de CouchDB, las vistas son utilizadas para algunos
propósitos, entre los cuales podemos mencionar:
 Filtrar los documentos en la base de datos para encontrar los que sean
relevantes para un proceso en particular.
 Extraer datos desde los documentos, y presentarlos en un orden especifico.
 Construcción de índices eficientes para la encontrar documentos por cualquier
valor o estructura que se encuentre en ellos.
 Uso de los índices para representar relaciones entre documentos.
 Operaciones con los tipos de datos de los documentos, ejemplo si los
documentos representan las transacciones financieras de la empresa, una vista
puede responder a la pregunta de cuál es el gasto en la última semana, mes o
año.
Modelo de Vista
 Para encarar el hecho de agregar estructuras de respaldo a los datos no
estructurados y semi-estructurados, CouchDB integra un modelo de vista,
las vistas son el método de agregación y representación de informes sobre
los documentos en una base de datos, y se construyen bajo demanda
para agregar, unir e informar sobre los documentos de la base de datos.
JavaScript Funciones de vista
 Las vistas se definen mediante las funciones de JavaScript, una función de
vista toma un documento CouchDB como un argumento y luego hace los
cálculos necesarios para determinar los datos que se van a poner a
disposición a través de la vista.
Arquitectura
Arquitectura
 HTTP Client: Permite realizar las peticiones contra el servidor de la base de
datos. Los clientes pueden ser cualquier aplicación que permita el uso de
HTTP, esto permite potenciar el uso de entones web, así como el trabajo
offline, apoyando la posibilidad de replicación cunado la aplicación
vuelva a online.
 Erlang HTTP: Basado en Mochiviewb un kit para servidores HTTP ligeros
escrito en ERLANG, permite el control y gestión de HTTP (gestión de
peticiones, concurrencia, cabeceras HTTP, encriptado, autentificación,…)
 Mod_Couch: Es el core de la máquina virtual de Erlang de CouchDB, este
componente implemente la API y es el encargado de entender y
gestionar las diferentes operaciones solicitadas por el cliente HTTP.
Arquitectura
 View_Engine: Este componente realiza todo el proceso de las vistas, el
diseño de los documentos, la indexación,…, utilizando arboles B.
 Storage_Engine: Gestiona las escrituras en Disco, este componente se
comunica activamente con el View Engine y el Replicador ya que las
vistas son incrementables y deben reflejar los cambios escritos a disco.
 Replicador: Permite la replicación de los documentos, ayuda a la
distribución entre diferentes dispositivos, tanto online como offline, este
componente solo actúa si es activado manual o programáticamente pero
no funciona de manera continua.
Replicación
 Para la replicación se envía una petición HTTP a CouchDB incluyendo la
base de datos origen (source) y una de destino (target), y CouchDB envía
los cambios del origen al destino, el siguiente código denota un ejemplo
de replicación en CouchDB.
POST /_replicate HTTP/1.1
{"source":"database","target":"http://example.org/ database "}
Replicación
 La sincronización se puede efectuar en ambas direcciones, para lo cual se
debe cambiar la fuente por el destino, es decir:
 La replicación es una forma de crear “snapshots” de las bases de datos en
una sola instancia de CouchDB, con esto se puede testear código sin
poner en riesgo los datos
.
POST /_replicate HTTP/1.1
{"source":"http://example.org/database","target":"da
tabase"}
Replicación
 Replicación Continua: Esta petición de replicación no se detiene cuando
se terminan de replicar los documentos del origen al destino, si no que
continua a la escucha de cambios en cualquier documento, una vez
encontrados los cambios se realiza la replicación, esta replicación no se la
efectúa de inmediato.
.
> curl -X POST http://127.0.0.1:5984/_replicate -d
'{"source":"db", "target":"db-replica",
"continuous":true}
Seguridad
 La instalación por defecto de CouchDB permite peticiones realizadas por
cualquier cliente, CouchDB llama a esto “The Admin Party”, todo mundo
tiene privilegios para hacer cualquier cosa.
 CouchDB contempla la idea de un usuario admin(superusuario, root,
administrador) el cual tiene permitido hacer cualquier petición a una
instancia de CouchDB.
 Un usuario admin puede ejecutar un las siguientes peticiones en la
instancia de CouchDB [5]:
 Creación de bases de datos (PUT /database)
 Eliminación de bases de datos (DELETE /database)
 Creación de un documento de diseño (PUT /database/_design/app)
Seguridad
 La actualización de un documento de diseño (PUT
/database/_design/apprev=1-4E2)
 Eliminación de un documento de diseño(DELETE
/database/_design/app?rev=1-6A7)
 Activación de comparación (POST /_restart)
 Lectura de la configuración activa (GET /_config)
 Actualización de la configuración activa (PUT /_config)
Seguridad
 Creación de usuarios admin:
 En la instalación inicial crea una base de datos por defecto, lo que se
debe crear como paso siguiente es un usuario administrador, en este caso
se creara un usuario jose, y su contraseña será adminJose
> curl -X PUT $HOST/_config/admins/jose -d '"adminJose"'
""
Seguridad
 Cookie de Autenticación: CouchDB genera un token de una sola vez que
el cliente podrá utilizar en su próxima solicitud a CouchDB, cunado
CouchDB ve el token en una solicitud posterior, se autenticara al usuario
basándose en el token sin la necesidad de requerir la contraseña, el token
tiene una duración de 10 minutos.
> HOST="http://127.0.0.1:5984"
> curl -vX POST $HOST/_session -H
'application/x-www-form-urlencoded' -d
'name=anna&password=secret'
Auditoria
 Audit CouchDB
 Es una herramienta simple, que solo utiliza la dirección URL de Apache
CouchDB, para responder a las preguntas comunes de auditoria tales
como:
 ¿Cuál es la configuración del servidor?
 ¿Cuántas cuentas de usuario existentes?
 ¿Qué funciones de usuario existen?
 ¿Cuál es la configuración de seguridad implementada en cada base de datos?
 ¿Cuáles son las funciones de validación en cada documento de diseño?
Auditoria
 La auditoría se puede implementar desde la consola web de CouchDB,
para lo cual basta con ir a Security-> Audit.
Performance Management
 Una vez que se empieza a manejar un número grade de documentos se
tiene que ser cuidadoso con el manejo del mismo, así como de la forma
de escribir el código, a continuación se presentan puntos a considerar
para un rendimiento óptimo de CouchDB.
 Disco Entrada/Salida
 Tamaño del archivo: El menor tamaño de sus archivos, menos operaciones
de E/S, dan como resultado un mayor número de archivos almacenados
en CouchDB y en sistema operativo. Se debe ser cuidadoso con los datos
que se está almacenando, por ejemplo es una mala práctica utilizar
claves demasiado largas o utilizar claves únicas de caracteres individuales.
Performance Management
 Rendimiento en disco y sistema de archivos
 Erlang sugiere la siguieren técnica para aumentar el rendimiento del
sistema de archivos.
 En sistemas operativos con soporte de threads, es posible hacer que las
operaciones de archivos sean mejoradas con threads. Para lo cual se
embrace en las variables de entorno de Erlang un número mayor de
threads, ya que en la instalación por defecto se especifican 0 threads,
para modificar el número de threads se debe ingresar el siguiente
comando:
export ERL_FLAGS="+A 4"
Limitaciones de los recursos del
Sistema
 Uno de los problemas latentes en implementaciones grandes es la
asignación por defecto de recursos que provee CouchDB y el sistema
operativo, el aumento de estos límites puede permitir que la
implementación de CouchDB crezca más allá de lo que la configuración
por defecto ofrece.
 Delayed_commits: Esto permite mejorar el rendimiento de escritura para
algunas cargas de trabajo.
 Esta configuración hace que CouchDB espere un segundo antes de que
confirmar nuevos datos después de una actualización, esta configuración
tiene el defecto de que si el servidor se bloquea antes de que la
instrucción sea completada, cualquier grabación desde el último commit
se pierde.
Limitaciones de los recursos del
Sistema
 Max_dbs_open: Esta configuración aumenta el límite de bases de datos
concurrentes. Esta configuración es recomendada en implementaciones
en las que muchas bases de datos estarán replicando de forma continua.
[couchdb]
max_dbs_open = 100
Red
 Hay que tener cuidado del tamaño que se elige para los lotes, ya que
lotes grandes requieren más tiempo en el cliente para codificar los
elementos en archivos JSON y aun mas tiempo para decodificar el número
de peticiones.
 Si se posee un sistema rápido de E/S, se puede utilizar la concurrencia para
tener múltiples peticiones/respuestas al mismo tiempo. Esto mitiga la
latencia involucrada en el uso de los archivos JSON, haciendo el trabajo
en red y la decodificación de JSON más eficiente.
Red
 Mochiweb implementa un buffet TCP, que almacena todas las peticiones
pequeñas y espera a que todas estas completen un tamaño mayor y las
envía por el protocolo TCP, este comportamiento TCP búfer puede ser
desactivado a través de httpd/sochet_options:
[httpd]
socket_options = [{nodelay, true}]
CouchDB
 IDs de los documentos: El tamaño del archivo de la base de datos se
deriva del tamaño de los documentos y de las vistas, pero también de
múltiples de los _id, ya que un ID presente en un documento se encuentra
duplicado en todo el árbol.
 La inserción de ID secuenciales es más rápida que las identificaciones
aleatorias, por tanto se debe tener en cuenta generar los IDs de manera
manual o supervisada, por ejemplo, algo que lleva 16 dígitos
hexadecimales se puede hacer de 4 dígitos de base 62 esto representa(10
números, 26 minúsculas, y 26 mayúsculas).
Vistas
 Las Vistas generadas con el servidor de consultas de JavaScript son
demasiado lentas, cuando existen un número excesivo de documentos
para procesar, la creación de las consultas no consume una sola CPU y
mucho menos el sistema de E/S, el problema se ve en la latencia que se
genera en la consulta, esto se debe a que el servidor de consulta de
CouchDB se encuentra separado del interprete couchjs.
 Reducción en la construcción de funciones: Si se hace el uso de funciones
sencillas como sumas o restas, se puede hacer su implementación
haciendo uso de las funciones por defecto de Erlang, por ejemplo _sum o
_count, esto ayuda al rendimiento ya que reduce la entrada y salida entre
CouchDB y el servidor de consultas JavaScript.
Metadata Management
 A diferencia de los archivos JSON normales, CouchDB agrega dos campos
especiales al documento: el “_id” y ”_rev”.
 El campo “_id” es un campo que permite identificar al documento, este
campo puede ser definido de manera manual, pero se recomienda
hacerlo de manera automática, ya que CouchDb asigna valores únicos y
universales, lo cual ayuda en temas de replicación o sincronización.
 El siguiente campo es “_rev”, este campo es importante para CuchDB, ya
que este maneja a sus archivos por numero de versión, es decir si un
documento es modificado, a diferencia de bases de datos
convencionales, CouchDB, genera un nuevo documento con un numero
de versión diferente. Este valor aumenta una unidad por cada cambio que
se realice
Metadata Management
 Sin estructura fija: En las bases de datos convencionales se definen las
características de los datos que se desean guardar, por ejemplo:
CREATE TABLE usuario
(nombre VARCHAR(20), correo VARCHAR(20),edad int(3));
{
"_id" : "234a41170621c326ec63382f846d5764",
"_rev" : "1-480277b989ff06c4fa87dfd0366677b6",
"nombre" : "Jose",
"correo" : "Jtapia@gmail.com",
"edad" : "45"
}
Backup and Recovery
 Las características previas discutidas acerca de CouchDB aseguran que se
trata de una base datos muy fiable, pero sin embargo se debe tener en
cuenta los agentes externos que pudiesen atentar con la integridad de la
mismas, ejemplo de esto pueden ser, accidentes del servidor
irrecuperables, hackers que encuentran las credenciales de administrador
y eliminan los datos…
 Existen estrategias de backup tradicionales para CouchDB entre las cuales
se puede mencionar:
 Replicación
 Archivo de copia de seguridad de base de datos.
 Instantáneas del sistema de archivos.
Backup and Recovery
 Replicación: CouchDB denota de las otras bases de datos, por la
implementación de la replicación tira y afloja, es decir cualquier base de
datos CouchDB puede ser replicada en cualquier otra si se tiene acceso
HTTP y as credenciales apropiadas.
 Archivo de copia de seguridad de base de datos: La similitud que
CouchDB posee con git permiten que la base de datos almacene índices
y archivos en el sistema de archivos subyacente, esta copia de seguridad
se puede hacer de manera programática usando la línea de comando, u
utilizando el cron en sistemas Unix o con el uso de herramientas como
rsync, estas alternativas, realizan Backus de manera incremental.
 Instantáneas del sistema de archivos: La utilización de la máquina virtual
de Erlang asegura la creación de instantáneas de los archivos, según esta
crea necesario, o según el administrador las programe.
Data warehouse Facilities
 Las características de CouchDB no son las idóneas para la implementación
de Data warehose, ya que el manejo de versiones temporales de
documentos y las vistas implementadas con JavaScript sugieren un
problema para bases de datos que cresen de manera exponencial.
 Sin embargo se puede hacer la implementación de CouchDB para bases
de datos que no cambien continuamente, esto se lo hace con el objetivo
de usar las facilidades que posee CouchDb para la manipulación de
archivos JSON, esto se lo puede hacer implementando NodeJS
Data warehouse Facilities
 CouchDB ofrece MapReduce como característica principal, a más de esto
cuenta con la interfaz Futon, que permite a los desarrolladores escribir
declaraciones MapReduce basadas en JavaScript en un entorno de
prueba, el código que se mostro pudo ser implementado utilizando una
vista almacenada en CouchDB, y su llamada sería igual que llamar un
procedimiento en un sistema RDBMS, la eficiencia de usar MapReduce se
ve en la implementación de CouchDB en varios servidores, esto ayuda a
escalar de manera rápida sin afectar el rendimiento de la consulta.
DBA Tools existentes
 Existen varias herramientas OpenSource, la herramienta por defecto en la
instalación de CouchDB es Futon, esta herramienta presenta una interfaz
muy amigable, la cual es accedida por el navegador una vez que se ha
iniciado el agente de CouchDB.
 Erica, es una herramienta que ayuda a crear el diseño de los documentos,
a más de esto brinda soporte para las aplicaciones web (couchapps), el
requerimiento mínimo es Erlang R14B04 o superiores.
 Situo.py: Es un cliente CouchApp que utiliza lenguaje Python, esta
herramienta permite realizar pruebas automatizadas.

Más contenido relacionado

DOCX
Apache CouchDB
DOCX
Arquitectura de los sistemas operativos
PDF
Tabla comparativa servidores web
PPTX
Comparativa sgbd comercial vs libre
PDF
Presentacion curso de php
PPTX
VLSM y CIDR (características, implementación torres gamarra
Apache CouchDB
Arquitectura de los sistemas operativos
Tabla comparativa servidores web
Comparativa sgbd comercial vs libre
Presentacion curso de php
VLSM y CIDR (características, implementación torres gamarra

La actualidad más candente (20)

PPTX
Sistemas distribuidos
PDF
Tabla comparativa- metodologías de desarrollo
PDF
Paradigmas de programacion
PPTX
Ventajas vs desventajas de los gestores de bases
PPTX
Administración de memoria
DOCX
Fragmentacion
PPTX
Modelo OSI
PDF
Sistema operativo GNU / Linux
PPTX
Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)
DOCX
Cuadro comparativo sgbd
PDF
Cuadro comparativo s.o
PPT
Sistema Operativo Linux
PDF
Transiciones de Procesos
DOC
Formato ieee830(srs lleno)
PPTX
Tarea 1 Reconocimiento
PDF
PROTOCOLO RIP V1 Y RIP V2 - REDES DE DATOS
PDF
Sistema de archivos distribuido o DFS
PDF
PDF
Areas donde implementamos los sistemas distribuidos
Sistemas distribuidos
Tabla comparativa- metodologías de desarrollo
Paradigmas de programacion
Ventajas vs desventajas de los gestores de bases
Administración de memoria
Fragmentacion
Modelo OSI
Sistema operativo GNU / Linux
Unidad 3 administracion de memoria(recoplilacion de todas las exposiciones)
Cuadro comparativo sgbd
Cuadro comparativo s.o
Sistema Operativo Linux
Transiciones de Procesos
Formato ieee830(srs lleno)
Tarea 1 Reconocimiento
PROTOCOLO RIP V1 Y RIP V2 - REDES DE DATOS
Sistema de archivos distribuido o DFS
Areas donde implementamos los sistemas distribuidos
Publicidad

Destacado (14)

PPT
Couch db
PPTX
Bases de datos orientadas a grafos y su enfoque en el Mundo Real
PPTX
Couch db
PDF
Intro To Couch Db
PPTX
Google - Bigtable
PPTX
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
PDF
Amazon Dynamo
PPTX
CSense: A Stream-Processing Toolkit for Robust and High-Rate Mobile Sensing A...
PDF
CouchDB – A Database for the Web
PPT
PDF
CouchDB Vs MongoDB
KEY
Real World CouchDB
PPTX
GOOGLE BIGTABLE
Couch db
Bases de datos orientadas a grafos y su enfoque en el Mundo Real
Couch db
Intro To Couch Db
Google - Bigtable
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Amazon Dynamo
CSense: A Stream-Processing Toolkit for Robust and High-Rate Mobile Sensing A...
CouchDB – A Database for the Web
CouchDB Vs MongoDB
Real World CouchDB
GOOGLE BIGTABLE
Publicidad

Similar a Couch db (20)

PDF
curso-servidores-apache-2
PPTX
base de datos con codigos abiertos.pptx
PDF
mini-taller de Base de Datos y PostgreSQL
PPTX
Obvios herramientas de un SGDB
PDF
Documento Web2Py
PPTX
Apache Derby
PPTX
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
PPTX
Taller básico Herramientas Rendimiento DB2 en iSeries
PDF
Proyecto X
PPTX
SGBD Postgresql
PPT
Introduccion a ORACLE
PPT
Subversion
PPTX
Creacion de un Repositorio Local en CentOS_6.0
PDF
guia-2.pdf
PPTX
PPTX
Proyecto teórico práctico
PPTX
Proyecto teórico práctico
PPTX
Tarea1 lruiz
PPTX
Tarea1 lruiz
curso-servidores-apache-2
base de datos con codigos abiertos.pptx
mini-taller de Base de Datos y PostgreSQL
Obvios herramientas de un SGDB
Documento Web2Py
Apache Derby
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Taller básico Herramientas Rendimiento DB2 en iSeries
Proyecto X
SGBD Postgresql
Introduccion a ORACLE
Subversion
Creacion de un Repositorio Local en CentOS_6.0
guia-2.pdf
Proyecto teórico práctico
Proyecto teórico práctico
Tarea1 lruiz
Tarea1 lruiz

Último (20)

DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Tomo 1 de biologia gratis ultra plusenmas
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
2 GRADO UNIDAD 5 - 2025.docx para primaria
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Tomo 1 de biologia gratis ultra plusenmas
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
ciencias-1.pdf libro cuarto basico niños
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
Cosacos y hombres del Este en el Heer.ppt
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
V UNIDAD - SEGUNDO GRADO. del mes de agosto
Fundamentos_Educacion_a_Distancia_ABC.pdf

Couch db

  • 2. Contenido • Descripción • Arquitectura • Replicación • Seguridad • Auditoria • Performance Management • Backup and Recovery • Data warehouse Facilities • DBA Tools existentes • Conclusiones
  • 3. Descripción  Apache CouchDB es un software de gestión de bases de datos OpenSource publicado por Apache Software Foundation. CouchDB (Couch es un acrónimo para cluster of unreliable commodity hardware) está escrito en Erlang, un lenguaje de programación funcional con enfoque en la creación de aplicaciones tolerantes a fallos y altamente concurrentes.
  • 4. Descripción  CouchDB usa HTTP como su interfaz de programación principal y JSON para almacenamiento de datos.  Todos los recursos de la base de datos tiene una URI única que expone servicios a travez de los métodos que implementa HTTP(POST, GET, PUT Y DELETED), estos métodos son utilizados para el CRUD.
  • 5. Propiedades ACID  La capa de archivos y el sistema de confirmaciones (commitment) de CouchDB contribuyen a cumplir las características ACID .  En disco CouchDB nunca sobre escribe información confirmada (commited) o la que tenga estructuras asociadas, asegurando que los archivos de la base datos están en un estado consistente.  La actualización de documentos (add, edit, delete) son serializadas, lo que permite escritura concurrente. El control de lectura lo hace utilizando MVCC (Multi-Vesion Concurrency Control), este modelo permite que cada cliente mire una instantánea coherente de la base de datos desde el principio hasta el final de la operación de lectura
  • 6. Propiedades ACID  Los documentos se indexan en árboles B utilizando su nombre (DocID) y un documento de identidad de secuencia.  Cada actualización a una instancia de la base genera un nuevo número secuencial.  La secuencias de IDs son usados después para encontrar los cambios de forma incremental.  Los índices del árbol B se actualizan simultáneamente cuando los documentos son guardados o borrados, hay que tener en cuenta que las actualizaciones del índice siempre se efectúan al final del archivo (append-only updates).
  • 7. Views  Las vistas (Views) son la herramienta utilizada para consultas y reportes en los documentos de CouchDB, las vistas son utilizadas para algunos propósitos, entre los cuales podemos mencionar:  Filtrar los documentos en la base de datos para encontrar los que sean relevantes para un proceso en particular.  Extraer datos desde los documentos, y presentarlos en un orden especifico.  Construcción de índices eficientes para la encontrar documentos por cualquier valor o estructura que se encuentre en ellos.  Uso de los índices para representar relaciones entre documentos.  Operaciones con los tipos de datos de los documentos, ejemplo si los documentos representan las transacciones financieras de la empresa, una vista puede responder a la pregunta de cuál es el gasto en la última semana, mes o año.
  • 8. Modelo de Vista  Para encarar el hecho de agregar estructuras de respaldo a los datos no estructurados y semi-estructurados, CouchDB integra un modelo de vista, las vistas son el método de agregación y representación de informes sobre los documentos en una base de datos, y se construyen bajo demanda para agregar, unir e informar sobre los documentos de la base de datos. JavaScript Funciones de vista  Las vistas se definen mediante las funciones de JavaScript, una función de vista toma un documento CouchDB como un argumento y luego hace los cálculos necesarios para determinar los datos que se van a poner a disposición a través de la vista.
  • 10. Arquitectura  HTTP Client: Permite realizar las peticiones contra el servidor de la base de datos. Los clientes pueden ser cualquier aplicación que permita el uso de HTTP, esto permite potenciar el uso de entones web, así como el trabajo offline, apoyando la posibilidad de replicación cunado la aplicación vuelva a online.  Erlang HTTP: Basado en Mochiviewb un kit para servidores HTTP ligeros escrito en ERLANG, permite el control y gestión de HTTP (gestión de peticiones, concurrencia, cabeceras HTTP, encriptado, autentificación,…)  Mod_Couch: Es el core de la máquina virtual de Erlang de CouchDB, este componente implemente la API y es el encargado de entender y gestionar las diferentes operaciones solicitadas por el cliente HTTP.
  • 11. Arquitectura  View_Engine: Este componente realiza todo el proceso de las vistas, el diseño de los documentos, la indexación,…, utilizando arboles B.  Storage_Engine: Gestiona las escrituras en Disco, este componente se comunica activamente con el View Engine y el Replicador ya que las vistas son incrementables y deben reflejar los cambios escritos a disco.  Replicador: Permite la replicación de los documentos, ayuda a la distribución entre diferentes dispositivos, tanto online como offline, este componente solo actúa si es activado manual o programáticamente pero no funciona de manera continua.
  • 12. Replicación  Para la replicación se envía una petición HTTP a CouchDB incluyendo la base de datos origen (source) y una de destino (target), y CouchDB envía los cambios del origen al destino, el siguiente código denota un ejemplo de replicación en CouchDB. POST /_replicate HTTP/1.1 {"source":"database","target":"http://example.org/ database "}
  • 13. Replicación  La sincronización se puede efectuar en ambas direcciones, para lo cual se debe cambiar la fuente por el destino, es decir:  La replicación es una forma de crear “snapshots” de las bases de datos en una sola instancia de CouchDB, con esto se puede testear código sin poner en riesgo los datos . POST /_replicate HTTP/1.1 {"source":"http://example.org/database","target":"da tabase"}
  • 14. Replicación  Replicación Continua: Esta petición de replicación no se detiene cuando se terminan de replicar los documentos del origen al destino, si no que continua a la escucha de cambios en cualquier documento, una vez encontrados los cambios se realiza la replicación, esta replicación no se la efectúa de inmediato. . > curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"db", "target":"db-replica", "continuous":true}
  • 15. Seguridad  La instalación por defecto de CouchDB permite peticiones realizadas por cualquier cliente, CouchDB llama a esto “The Admin Party”, todo mundo tiene privilegios para hacer cualquier cosa.  CouchDB contempla la idea de un usuario admin(superusuario, root, administrador) el cual tiene permitido hacer cualquier petición a una instancia de CouchDB.  Un usuario admin puede ejecutar un las siguientes peticiones en la instancia de CouchDB [5]:  Creación de bases de datos (PUT /database)  Eliminación de bases de datos (DELETE /database)  Creación de un documento de diseño (PUT /database/_design/app)
  • 16. Seguridad  La actualización de un documento de diseño (PUT /database/_design/apprev=1-4E2)  Eliminación de un documento de diseño(DELETE /database/_design/app?rev=1-6A7)  Activación de comparación (POST /_restart)  Lectura de la configuración activa (GET /_config)  Actualización de la configuración activa (PUT /_config)
  • 17. Seguridad  Creación de usuarios admin:  En la instalación inicial crea una base de datos por defecto, lo que se debe crear como paso siguiente es un usuario administrador, en este caso se creara un usuario jose, y su contraseña será adminJose > curl -X PUT $HOST/_config/admins/jose -d '"adminJose"' ""
  • 18. Seguridad  Cookie de Autenticación: CouchDB genera un token de una sola vez que el cliente podrá utilizar en su próxima solicitud a CouchDB, cunado CouchDB ve el token en una solicitud posterior, se autenticara al usuario basándose en el token sin la necesidad de requerir la contraseña, el token tiene una duración de 10 minutos. > HOST="http://127.0.0.1:5984" > curl -vX POST $HOST/_session -H 'application/x-www-form-urlencoded' -d 'name=anna&password=secret'
  • 19. Auditoria  Audit CouchDB  Es una herramienta simple, que solo utiliza la dirección URL de Apache CouchDB, para responder a las preguntas comunes de auditoria tales como:  ¿Cuál es la configuración del servidor?  ¿Cuántas cuentas de usuario existentes?  ¿Qué funciones de usuario existen?  ¿Cuál es la configuración de seguridad implementada en cada base de datos?  ¿Cuáles son las funciones de validación en cada documento de diseño?
  • 20. Auditoria  La auditoría se puede implementar desde la consola web de CouchDB, para lo cual basta con ir a Security-> Audit.
  • 21. Performance Management  Una vez que se empieza a manejar un número grade de documentos se tiene que ser cuidadoso con el manejo del mismo, así como de la forma de escribir el código, a continuación se presentan puntos a considerar para un rendimiento óptimo de CouchDB.  Disco Entrada/Salida  Tamaño del archivo: El menor tamaño de sus archivos, menos operaciones de E/S, dan como resultado un mayor número de archivos almacenados en CouchDB y en sistema operativo. Se debe ser cuidadoso con los datos que se está almacenando, por ejemplo es una mala práctica utilizar claves demasiado largas o utilizar claves únicas de caracteres individuales.
  • 22. Performance Management  Rendimiento en disco y sistema de archivos  Erlang sugiere la siguieren técnica para aumentar el rendimiento del sistema de archivos.  En sistemas operativos con soporte de threads, es posible hacer que las operaciones de archivos sean mejoradas con threads. Para lo cual se embrace en las variables de entorno de Erlang un número mayor de threads, ya que en la instalación por defecto se especifican 0 threads, para modificar el número de threads se debe ingresar el siguiente comando: export ERL_FLAGS="+A 4"
  • 23. Limitaciones de los recursos del Sistema  Uno de los problemas latentes en implementaciones grandes es la asignación por defecto de recursos que provee CouchDB y el sistema operativo, el aumento de estos límites puede permitir que la implementación de CouchDB crezca más allá de lo que la configuración por defecto ofrece.  Delayed_commits: Esto permite mejorar el rendimiento de escritura para algunas cargas de trabajo.  Esta configuración hace que CouchDB espere un segundo antes de que confirmar nuevos datos después de una actualización, esta configuración tiene el defecto de que si el servidor se bloquea antes de que la instrucción sea completada, cualquier grabación desde el último commit se pierde.
  • 24. Limitaciones de los recursos del Sistema  Max_dbs_open: Esta configuración aumenta el límite de bases de datos concurrentes. Esta configuración es recomendada en implementaciones en las que muchas bases de datos estarán replicando de forma continua. [couchdb] max_dbs_open = 100
  • 25. Red  Hay que tener cuidado del tamaño que se elige para los lotes, ya que lotes grandes requieren más tiempo en el cliente para codificar los elementos en archivos JSON y aun mas tiempo para decodificar el número de peticiones.  Si se posee un sistema rápido de E/S, se puede utilizar la concurrencia para tener múltiples peticiones/respuestas al mismo tiempo. Esto mitiga la latencia involucrada en el uso de los archivos JSON, haciendo el trabajo en red y la decodificación de JSON más eficiente.
  • 26. Red  Mochiweb implementa un buffet TCP, que almacena todas las peticiones pequeñas y espera a que todas estas completen un tamaño mayor y las envía por el protocolo TCP, este comportamiento TCP búfer puede ser desactivado a través de httpd/sochet_options: [httpd] socket_options = [{nodelay, true}]
  • 27. CouchDB  IDs de los documentos: El tamaño del archivo de la base de datos se deriva del tamaño de los documentos y de las vistas, pero también de múltiples de los _id, ya que un ID presente en un documento se encuentra duplicado en todo el árbol.  La inserción de ID secuenciales es más rápida que las identificaciones aleatorias, por tanto se debe tener en cuenta generar los IDs de manera manual o supervisada, por ejemplo, algo que lleva 16 dígitos hexadecimales se puede hacer de 4 dígitos de base 62 esto representa(10 números, 26 minúsculas, y 26 mayúsculas).
  • 28. Vistas  Las Vistas generadas con el servidor de consultas de JavaScript son demasiado lentas, cuando existen un número excesivo de documentos para procesar, la creación de las consultas no consume una sola CPU y mucho menos el sistema de E/S, el problema se ve en la latencia que se genera en la consulta, esto se debe a que el servidor de consulta de CouchDB se encuentra separado del interprete couchjs.  Reducción en la construcción de funciones: Si se hace el uso de funciones sencillas como sumas o restas, se puede hacer su implementación haciendo uso de las funciones por defecto de Erlang, por ejemplo _sum o _count, esto ayuda al rendimiento ya que reduce la entrada y salida entre CouchDB y el servidor de consultas JavaScript.
  • 29. Metadata Management  A diferencia de los archivos JSON normales, CouchDB agrega dos campos especiales al documento: el “_id” y ”_rev”.  El campo “_id” es un campo que permite identificar al documento, este campo puede ser definido de manera manual, pero se recomienda hacerlo de manera automática, ya que CouchDb asigna valores únicos y universales, lo cual ayuda en temas de replicación o sincronización.  El siguiente campo es “_rev”, este campo es importante para CuchDB, ya que este maneja a sus archivos por numero de versión, es decir si un documento es modificado, a diferencia de bases de datos convencionales, CouchDB, genera un nuevo documento con un numero de versión diferente. Este valor aumenta una unidad por cada cambio que se realice
  • 30. Metadata Management  Sin estructura fija: En las bases de datos convencionales se definen las características de los datos que se desean guardar, por ejemplo: CREATE TABLE usuario (nombre VARCHAR(20), correo VARCHAR(20),edad int(3)); { "_id" : "234a41170621c326ec63382f846d5764", "_rev" : "1-480277b989ff06c4fa87dfd0366677b6", "nombre" : "Jose", "correo" : "Jtapia@gmail.com", "edad" : "45" }
  • 31. Backup and Recovery  Las características previas discutidas acerca de CouchDB aseguran que se trata de una base datos muy fiable, pero sin embargo se debe tener en cuenta los agentes externos que pudiesen atentar con la integridad de la mismas, ejemplo de esto pueden ser, accidentes del servidor irrecuperables, hackers que encuentran las credenciales de administrador y eliminan los datos…  Existen estrategias de backup tradicionales para CouchDB entre las cuales se puede mencionar:  Replicación  Archivo de copia de seguridad de base de datos.  Instantáneas del sistema de archivos.
  • 32. Backup and Recovery  Replicación: CouchDB denota de las otras bases de datos, por la implementación de la replicación tira y afloja, es decir cualquier base de datos CouchDB puede ser replicada en cualquier otra si se tiene acceso HTTP y as credenciales apropiadas.  Archivo de copia de seguridad de base de datos: La similitud que CouchDB posee con git permiten que la base de datos almacene índices y archivos en el sistema de archivos subyacente, esta copia de seguridad se puede hacer de manera programática usando la línea de comando, u utilizando el cron en sistemas Unix o con el uso de herramientas como rsync, estas alternativas, realizan Backus de manera incremental.  Instantáneas del sistema de archivos: La utilización de la máquina virtual de Erlang asegura la creación de instantáneas de los archivos, según esta crea necesario, o según el administrador las programe.
  • 33. Data warehouse Facilities  Las características de CouchDB no son las idóneas para la implementación de Data warehose, ya que el manejo de versiones temporales de documentos y las vistas implementadas con JavaScript sugieren un problema para bases de datos que cresen de manera exponencial.  Sin embargo se puede hacer la implementación de CouchDB para bases de datos que no cambien continuamente, esto se lo hace con el objetivo de usar las facilidades que posee CouchDb para la manipulación de archivos JSON, esto se lo puede hacer implementando NodeJS
  • 34. Data warehouse Facilities  CouchDB ofrece MapReduce como característica principal, a más de esto cuenta con la interfaz Futon, que permite a los desarrolladores escribir declaraciones MapReduce basadas en JavaScript en un entorno de prueba, el código que se mostro pudo ser implementado utilizando una vista almacenada en CouchDB, y su llamada sería igual que llamar un procedimiento en un sistema RDBMS, la eficiencia de usar MapReduce se ve en la implementación de CouchDB en varios servidores, esto ayuda a escalar de manera rápida sin afectar el rendimiento de la consulta.
  • 35. DBA Tools existentes  Existen varias herramientas OpenSource, la herramienta por defecto en la instalación de CouchDB es Futon, esta herramienta presenta una interfaz muy amigable, la cual es accedida por el navegador una vez que se ha iniciado el agente de CouchDB.  Erica, es una herramienta que ayuda a crear el diseño de los documentos, a más de esto brinda soporte para las aplicaciones web (couchapps), el requerimiento mínimo es Erlang R14B04 o superiores.  Situo.py: Es un cliente CouchApp que utiliza lenguaje Python, esta herramienta permite realizar pruebas automatizadas.