couch db

35
CouchDB Base de datos NoSQL

Upload: christian-castillo

Post on 16-Apr-2017

102 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Couch db

CouchDBBase de datos NoSQL

Page 2: Couch db

Contenido

• Descripción

• Arquitectura

• Replicación

• Seguridad

• Auditoria

• Performance Management

• Backup and Recovery

• Data warehouse Facilities

• DBA Tools existentes

• Conclusiones

Page 3: Couch db

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.

Page 4: Couch db

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.

Page 5: Couch db

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

Page 6: Couch db

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).

Page 7: Couch db

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.

Page 8: Couch db

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.

Page 9: Couch db

Arquitectura

Page 10: Couch db

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.

Page 11: Couch db

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.

Page 12: Couch db

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 "}

Page 13: Couch db

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"}

Page 14: Couch db

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 vezencontrados 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}

Page 15: Couch db

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)

Page 16: Couch db

Seguridad

La actualización de un documento de diseño (PUT

/database/_design/app\rev=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)

Page 17: Couch db

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"'

""

Page 18: Couch db

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'

Page 19: Couch db

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?

Page 20: Couch db

Auditoria

La auditoría se puede implementar desde la consola web de CouchDB,

para lo cual basta con ir a Security-> Audit.

Page 21: Couch db

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.

Page 22: Couch db

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"

Page 23: Couch db

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 commitse pierde.

Page 24: Couch db

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

Page 25: Couch db

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.

Page 26: Couch db

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}]

Page 27: Couch db

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).

Page 28: Couch db

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.

Page 29: Couch db

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

Page 30: Couch db

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" : "[email protected]",

"edad" : "45"

}

Page 31: Couch db

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.

Page 32: Couch db

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.

Page 33: Couch db

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

Page 34: Couch db

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.

Page 35: Couch db

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.