Couch db

christianecastillo1 2,384 views 35 slides Nov 20, 2016
Slide 1
Slide 1 of 35
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35

About This Presentation

Descripciones sobre couchDB


Slide Content

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
OpenSourcepublicado por Apache Software Foundation. CouchDB
(Couches un acrónimo para clusterof unreliablecommodityhardware)
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 travezde 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-VesionConcurrencyControl), 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 IDsson 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-onlyupdates).

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.
ErlangHTTP: Basado en Mochiviewbun 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 Erlangde 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 /_replicateHTTP/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ónContinua:Estapeticióndereplicaciónnosedetienecuando
seterminandereplicarlosdocumentosdelorigenaldestino,sinoque
continuaalaescuchadecambiosencualquierdocumento,unavez
encontradosloscambiosserealizalareplicación,estareplicaciónnosela
efectúadeinmediato.
.
>curl -X POST http://127.0.0.1:5984/_replicate -d
'{"source":"db", "target":"db -replica",
"continuous":true}

Seguridad
LainstalaciónpordefectodeCouchDBpermitepeticionesrealizadaspor
cualquiercliente,CouchDBllamaaesto“TheAdminParty”,todomundo
tieneprivilegiosparahacercualquiercosa.
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 adminpuede 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/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)

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
AuditCouchDB
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
Erlangsugiere 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 Erlangun 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:
exportERL_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
Mochiwebimplementa 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
IDsde 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 IDsde 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.

MetadataManagement
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 CouchDbasigna 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

MetadataManagement
Sinestructurafija:Enlasbasesdedatosconvencionalessedefinenlas
característicasdelosdatosquesedeseanguardar,porejemplo:
CREATETABLEusuario
(nombre VARCHAR(20),correo VARCHAR(20),edad int(3));
{
"_id":"234a41170621c326ec63382f846d5764" ,
"_rev":"1-480277b989ff06c4fa87dfd0366677b6" ,
"nombre":"Jose",
"correo":"[email protected]",
"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 backuptradicionales 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 gitpermiten 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 Erlangasegura 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 CouchDbpara la manipulación de
archivos JSON, esto se lo puede hacer implementando NodeJS

Data warehouse Facilities
CouchDB ofrece MapReducecomo característica principal, a más de esto
cuenta con la interfaz Futon, que permite a los desarrolladores escribir
declaraciones MapReducebasadas 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 MapReducese
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 ErlangR14B04 o superiores.
Situo.py: Es un cliente CouchAppque utiliza lenguaje Python, esta
herramienta permite realizar pruebas automatizadas.