Mostrando entradas con la etiqueta CouchDB. Mostrar todas las entradas
Mostrando entradas con la etiqueta CouchDB. Mostrar todas las entradas

martes, 15 de diciembre de 2009

CouchDB: Primeros pasos

INSTALACION DE CouchDB

Antes de instalar CouchDB, existe una serie de dependencias, y éstas deben satisfacerse previamente.

La primera dependencia será “Visual C++ 2008 Redistributables (for openssl binary)”, disponible en las siguientes URL’s:

http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en

http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf

El archivo a descargar se llama

vcredist_x86.exe

Una vez ejecutado el archivo e instalado el paquete, la siguiente dependencia es OpenSSL, que se podrá descargar en la siguiente URL:

http://www.openssl.org/related/binaries.html

El enlace directo para la versión para Windows es la siguiente:

http://www.slproweb.com/products/Win32OpenSSL.html

Hay que descargar “Win32 OpenSSL v0.9.8l”, cuya URL directa es la siguiente:

http://www.slproweb.com/download/Win32OpenSSL-0_9_8l.exe

El archivo ocupa unos 7 MB.

Una vez instalado el segundo paquete, la última dependencia es ERLANG, un lenguaje de programación potente orientado a sistemas concurrentes distribuidos, y sobre el cual se ha escrito el código de CouchDB. La URL es la siguiente:

http://www.erlang.org/download.html

La última versión (a la edición de este artículo) es la versión R13B03, del 25 de Noviembre de 2009. Hay que descargar el binario para Windows, cuyo archivo es:

otp_win32_R13B03.exe

Ocupa unos 80,5 MB, incluyendo también la documentación.

Una vez instaladas las dependencias, se procederá a instalar CouchDB. La URL donde se encuentra disponible el archivo de instalación es la siguiente:

http://wiki.apache.org/couchdb/Windows_binary_installer

que tiene un enlace al siguiente repositorio:

http://people.apache.org/~mhammond/dist/0.10.0/

La última versión (a la edición de este artículo) es la 0.10, cuyo archivo es:

setup-couchdb-0.10.0.exe

El tamaño del archivo es de unos 44,5 MB.


ARRANQUE DE CouchDB

Para arrancar el gestor de base de datos CouchDB, se procederá a ejecutar el archivo
couchdb.bat

que se encuentra dentro del directorio bin. Si la instalación de CouchDB se realizó correctamente, se habrá creado un acceso directo en

Inicio > Todos los programas > Apache CouchDB > Start CouchDB

Se abrirá una consola MS-DOS con la secuencia de arranque (similar a ésta):

CouchDB 0.10.0 - prepare to relax...
Eshell V5.7.2 (abort with ^G)
1> Apache CouchDB 0.10.0 (LogLevel=info) is starting.
1> Apache CouchDB has started. Time to relax.
1> [info] [<0.1.0>] Apache CouchDB has started on http://127.0.0.1:5984/
1>


Para comprobar que está funcionando correctamente, abrir un navegador y escribir la siguiente URL:

http://127.0.0.1:5984/

Deberá dar como respuesta la bienvenida a CouchDB y la versión que se está ejecutando:

{"couchdb":"Welcome","version":"0.10.0"}


Nota: Es recomendable añadir alguna regla de excepción en el cortafuegos (firewall) que permita el acceso por el puerto 5984. De esta manera, no tendremos problemas con este puerto.


COMANDOS EN CouchDB

La comunicación con el gestor de base de datos será principalmente a través del protocolo http, por lo que se podrá utilizar simple navegador. También puede hacerse uso de un comando Unix llamado curl, con una sintaxis similar a la siguiente:

curl http://127.0.0.1:5984 (equivale al mensaje de bienvenida)
curl –X GET/PUT http://127.0.01:5984/_comando


Para visualizar todas las bases de datos creadas, utilizar el siguiente comando:

http://127.0.0.1:5984/_all_dbs

Si no hay creada ninguna base de datos, el resultado será el siguiente:

[]


FUTON
Existen comandos curl para casi todo, pero lo mejor será utilizar FUTON, una interfaz de usuario a través del navegador. Esta herramienta permitirá, entre otras cosas, crear y eliminar bases de datos, ver y editar documentos, componer y ejecutar vistas MapReduce o lanzar replicaciones entre bases de datos.

Para lanzar FUTON, escribir la siguiente URL:

http://127.0.0.1:5984/_utils

También puede ser lanzada, desde Windows, mediante el siguiente acceso:

Inicio > Todos los programas > Apache CouchDB > Futon (CouchDB web interface)

Se mostrará la siguiente interfaz:


Al inicio, mostrará las bases de datos que están creadas.

Para crear una base de datos, hacer clic en la opción “Create Database…” situada en la parte superior izquierda, junto al icono “+”. Aparecerá una caja de diálogo solicitando el nombre de la nueva base de datos.



Introducir “tarjetas” y hacer clic en el botón “Create”. Una vez creada la base de datos “tarjetas”, aparecerá a siguiente imagen:



En la parte derecha se observará que la base de datos se ha creado, y en la URL aparecerá el comando:

http://127.0.0.1:5984/_utils/database.html?tarjetas

el cual indic a que se está utilizando la base de datos “tarjetas”. Como se acaba de crear la base de datos, no hay todavía ningún documento.

En la parte superior nos da las siguientes opciones:
- New Document: Crea un nuevo documento
- Compact Database…: Compacta la base de datos.
- Delete Database…: Elimina la base de datos

Si se crea un nuevo documento, aparecerá lo siguiente:



Automáticamente ha generado un documento, cuyo _id ha sido etiquetado con un valor que no se repetirá jamás, y que identificará al documento de manera única.

En la parte superior aparecerán las siguientes opciones:
- Save Document: Guarda el documento actual
- Add Field: Agregar un campo
- Upload Attachment…: Adjuntar (archivo)

Hacer clic en la opción “Add Field”, con lo que nos permitirá introducir el nombre de un campo y el valor del mismo (haciendo doble clic).


Una vez introducidos todos los valores del documento, se guarda el documento mediante la opción “Save Document”. El resultado será el siguiente:


Los datos han sido guardados, y los campos ordenados por su nombre. En la parte inferior tendremos acceso a las opciones “Previous version” y “Next version", que nos permitirá llegar a las versiones del documento actual que se hayan registrado.
Si se hace clic sobre el botón “Source” (pestaña superior derecha), se mostrará el código del documento en formato JSON:

{
"_id": "e8c79ce94ac50a136ec02164212b695c",
"_rev": "2-5892a9350b124b19fa7393f4c936d040",
"nombre": "Rafael Hernampérez Martín",
"empresa": "Tecnillusions",
"telefono": "999-999-999",
"email": "info@tecnillusions.com",
"web": "http://www.tecnillusions.com"
}


La pestaña “Fields” mostrará nuevamente el documento en formato de tabla.

La franja superior (en negro) muestra la navegación actual:

Overview > baseDatos > id_documento

Cada uno de los niveles de navegación es accesible. Así, si hacemos clic sobre “Overview” se accederá directamente a la página principal, donde se muestran las bases de datos existentes:



Por último, para parar y cerrar la ejecución del servidor CouchDB, acceder a la consola de MS-DOS que se abrió al arrancar CouchDB, y detenerlo pulsando las teclas Ctrl+C. Solicitará confirmación sobre la terminación del proceso de lotes. Si se confirma (con S y la tecla Enter), se detendrá CouchDB.

CONCLUSION
En este artículo hemos aprendido a:
- Instalar CouchDB en un sistema Windows
- Arrancar el servidor de base de datos CouchDB
- Acceder a los comandos mediante navegador y comando curl
- Acceder a la herramienta FUTON
- Crear una base de datos
- Añadir un documento a la base de datos
- Añadir campos y valores a un documento
- Navegar por la herramienta FUTON
- Detener el servidor de base de datos CouchDB

Safe Creative #0912155119950

CouchDB: Introducción

CONCEPTO

Couch (sofá, diván) DB (DataBase) es un nuevo concepto de bases de datos, de la mano de la comunidad Apache. El nombre no ha sido elegido al azar, ni de manera casuística. Su nombre evoca relax, y ésa es su filosofía. Evoca tranquilidad, debido a que todo ahora es más sencillo y produce menos problemas, incluso para personas no técnicas.



Lo primero que llama la atención de CouchDB es que no sigue el concepto de base de datos tradicional entidad-relación (modelo relacional), si no un modelo de almacenamiento documental, gestionado por un potente motor de consultas sencillísimo de utilizar.

El modelo entidad-relación está basado en la definición de tablas de datos, estructuradas por columnas (campos) y filas (registros). Para la creación de un documento complejo, como una factura, es necesario definir varias tablas para evitar la repetición de datos, y relacionar estas tablas mediante claves (id cliente, id proveedor, nº factura…). Este sistema, tiene la ventaja de ahorrar información y establecer reglas relacionales (constraints), de tal forma que no se pueda cometer errores ni quebrantar las relaciones, obligando a tener una fila en cada una de las tablas involucradas. Este sistema, sin embargo, supone definir una estructura muy compleja y poco flexible, y cualquier cambio o normalización impactaría seriamente al resto de datos y a la aplicación. Otro inconveniente derivado del modelo entidad-relación, es que se obliga a definir y completar campos que son opcionales (aunque sea con un valor NULL o vacío).

CouchDB adopta un modelo de datos “auto-contenidos”, con lo que es posible tener una colección de documentos del mismo tipo (semántica), con variantes en cómo está estructurada la información (sintaxis), tal y como se tiene en el mundo real. Un ejemplo sencillo sería una colección de tarjetas de visita. Casi todas las tarjetas tienen una información común (nombre, apellidos, dirección, teléfono), pero alguna omitirá o añadirá algún dato, como el fax, la página web o el correo electrónico. Mientras que en el modelo entidad-relación habría que definir estos campos, el modelo documental permite que una tarjeta tenga o no estos campos.
Una base de datos CouchDB es una colección de documentos. Los documentos son objetos compuestos por campos, cuyos valores pueden ser cadenas de texto, números, fechas, listas ordenadas y mapas asociativos. Un ejemplo de documento podría ser el siguiente:

"Asunto": "Introducción a CouchDB"
"Autor": "Rafael Hernampérez"
"Fecha": "15/12/2006"
"Etiquetas": ["CouchDB", "Base de datos", "Apache"]
"Resumen": "Introducción a la base de datos documental CouchDB y diferencias con respecto a bases de datos relacionales"


Cada documento está identificado por un ID único (código o identificador).
Para gestionar los documentos, CouchDB integra un modelo de vistas que utilizan JavaScript, las cuales permiten agregar y reportar en los documentos en la base de datos. Las vistas son construidas dinámicamente y no afectan por debajo al documento, pudiendo tener tantas vistas diferentes de los mismos datos como se desee.

A diferencia de una base de datos relacional, CouchDB está diseñado para almacenar y reportar grandes cantidades de datos semi-estructuradas orientadas a documentos, sin un esquema o estructura. En una base de datos relacional, el esquema es predefinido y limita la información que es necesaria, especialmente cuando las necesidades cambian con respecto a las anticipadas en el diseño. Esto ocasiona problemas en la actualización en un medio distribuido. CouchDB no está forzado por un esquema, y los nuevos tipos de datos pueden ser añadidos sin problemas en documentos similares.
CouchDB posee utilidades para trabajar en línea de comandos o directamente a través de una URL y un navegador, hablando con el gestor en formato JSON (JavaScript Object Notation). Asimismo, posee utilidades en una interfaz de administración, que permiten al usuario realizar las operaciones sin necesidad de comandos, a través de la URL:

http://127.0.0.1:5984/_utils/


Arquitectura de CouchDB

En su motor late un corazón tolerante a fallos, los cuales se producen en un entorno controlado, y son tratados de forma que no afectan al sistema servidor, si no en peticiones aisladas. No se esperan comportamientos aleatorios ni errores no traceables en las operaciones. Asimismo, gestiona perfectamente un entorno de tráfico variable, absorbiendo peticiones concurrentes sin errores, tomando para ello, más tiempo para cada petición hasta su finalización. Por otra parte, CouchDB está diseñado para escalabilidad extrema, permitiendo el crecimiento o la disminución del hardware, y la replicación incremental.

CouchDB puede ser integrado en sistemas grandes y complejos de información, gracias a sus componentes que pueden ser usados como bloques de construcción, adaptándose a las necesidades del sistema, garantizando la flexibilidad, el rendimiento y la fiabilidad, incluso cuando el sistema requiere de una escalabilidad cambiante y rápida.

Uno de estos componentes está enfocado a la replicación incremental, capaz de sincronizar varias bases de datos con la fiabilidad de poder hacerlo entre máquinas por almacenamiento redundante, distribuir datos a un cluster que comparte un subconjunto del total de peticiones (balanceo de carga), o distribuir datos entre localizaciones físicas distantes.

CouchDB es una base de datos nacida en la red (no desarrollada para la web). Esta filosofía toma especial relevancia en cuanto a latencia se refiere. La experiencia del usuario radica principalmente en su satisfacción en cuanto a la respuesta de datos. Lo normal en las aplicaciones web es solicitar datos, crear una conexión, realizar una consulta, esperar respuesta y transmitir la respuesta. Este proceso puede llevar segundos de demora, y más si hay demasiada concurrencia. Si a esto le unimos el estar offline, la cosa empeora, pues si no hay conectividad no hay datos. CouchDB permite un escenario en el que, por ejemplo, un dispositivo móvil tiene CouchDB, y que se sincroniza mientras está online, y la latencia es muy baja mientras accede a los datos de forma local.

CouchDB toma como referente el teorema de CAP:
- Consistency: Consistencia o la capacidad de que todos los clientes vean los mismos datos, incluso con actualizaciones concurrentes
- Availability: Disponibilidad o la capacidad de que todos los clientes accedan a la misma versión de los datos.
- Partition tolerance: Partición tolerante o la capacidad de que la base de datos pueda estar dividida en múltiples servidores.

El verdadero corazón de CouchDB es un potente motor de almacenamiento B-Tree, una estructura de datos ordenada que permite búsquedas, inserciones y eliminaciones en tiempo logarítmico. Este sistema permite un alto rendimiento, una alta disponibilidad, mejoras de velocidad, y la partición de los datos en múltiples nodos sin afectar a la disponibilidad de consultar cada nodo aisladamente.

El cálculo de los resultados de una vista es realizado mediante MapReduces (mapeo y reducción), que son aplicados a cada documento de forma aislada, lo que presta a sí mismo una computación paralela e incremental. Estas funciones (mapeo y reducción) producen pares de clave/valor, que son insertados en el motor de almacenamiento B-Tree, ordenados por clave, haciendo extremadamente eficiente las búsquedas por clave o por rango.

Otra característica de CouchDB es que no utiliza bloqueos, como en las bases de datos relacionales, en donde una actualización de un dato provoca un bloqueo que impide a cualquier consulta acceder al dato mientras dure la actualización. Cuando hay múltiples actualizaciones/peticiones concurrentes, se está desperdiciando un enorme poder de procesamiento de los servidores, tomando mucho tempo en decidir quién hace qué, cuándo y en qué orden, en lugar de realizar su trabajo. En lugar de ello, CouchDB utiliza un sistema de Control de Concurrencia Multi Versión (MVCC en inglés), para gestionar el acceso concurrente a la base de datos, ejecutando en paralelo las peticiones, incluso en un sistema de carga extrema. Los documentos son versionados con un sistema de control de versiones (de forma similar a Subversion). Cada actualización genera una nueva versión del documento y lo guarda por encima del antiguo. Esto optimiza el rendimiento concurrente, ya que una lectura puede leer la última versión mientras aún se está actualizando, sin tener que esperar la actualización.

La validación previa de los datos complejos es posible gracias a funciones JavaScript, lo que permite que cuando se actualiza un documento se realice una validación del mismo en una copia del documento, denegando o aprobando el mismo según sus reglas.

Cuando se trabaja con varios nodos, la consistencia distribuida está asegurada con CouchDB, gracias a la replicación incremental, que evita preocuparnos de la disponibilidad de la información en caso que uno de los nodos deje de funcionar, gracias a la copia periódica entre servidores de los cambios realizados en los documentos. Esta replicación se puede programar mediante un gestor de tareas. Después de cada replicación, cada nodo es capaz de trabajar de forma independiente.

Además, CouchDB posee un sistema automático detección y resolución de conflictos, en el caso de que un documento se intente actualizar en distintos nodos, guardando varias versiones las actualizaciones, y poniendo como la versión más reciente la versión ganadora. Para gestionar conflictos, CouchDB permite acceder a las versiones, cambiar el orden de las versiones, y guardarlas.


ENLACES:
Sitio oficial: http://couchdb.apache.org/
Guía de CouchDB: http://books.couchdb.org/relax
Wiki: http://wiki.apache.org/couchdb/
Planet CouchDB: http://planet.couchdb.org/

Creative Commons License
Introducción a CouchDB by Rafael Hernamperez is licensed under a Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 3.0 Unported License.
Based on a work at rafinguer.blogspot.com.
Safe Creative #0912155118793