sql >> Base de Datos >  >> NoSQL >> CouchDB

Primeros pasos con CouchDB

NoSQL ha sido uno de los temas más discutidos en los últimos meses. Este tutorial le presentará CouchDB, una implementación de NoSQL y le enseñará cómo comenzar con la plataforma.

¿Qué es NoSQL?

NoSQL no tiene esquemas, no necesita decidir la estructura por adelantado.

NoSQL [no solo SQL ] es un movimiento hacia almacenes de documentos que no hacen uso del modelo relacional. El cambio de paradigma fundamental está en la forma en que almacenan los datos. Por ejemplo, cuando necesita almacenar datos sobre una factura, en RDBMS necesita destilar esta información en tablas y luego usar un lenguaje del lado del servidor para transformar estos datos nuevamente en objetos de la vida real. Por otro lado, en NoSQL, solo almacena la factura. NoSQL no tiene esquemas, lo que significa que no necesita diseñar sus tablas y estructura por adelantado; simplemente puede comenzar a almacenar nuevos valores.

Continuando con el ejemplo de la factura, algunas facturas pueden incluir un número de IVA, otras no. En un RDBMS, debe decirle a su tabla que primero acepte un número de IVA y luego que posiblemente sea nulo. En NoSQL, sin embargo, solo puede almacenar facturas con o sin un número de IVA, no hay esquema. Tenga en cuenta que NoSQL no es una panacea. Si sus datos son verdaderamente relacionales, seguir con su RDBMS sería la elección correcta.

Consultar bases de datos NoSQL

MapReducing tiene ventajas sobre las consultas SQL porque la tarea de asignación/reducción se puede distribuir entre varios nodos, algo que no es posible en RDBMS.

Las bases de datos NoSQL usan map/reduce para consultar e indexar la base de datos. En RDBMS, ejecuta una consulta que une varias tablas para crear primero un grupo de datos y luego la consulta se ejecuta creando un conjunto de resultados, un subconjunto de los datos generales. En NoSQL, usa map/reduce para crear una 'vista' (similar a un conjunto de resultados), esta vista es un subconjunto de los datos generales.

El mapa esencialmente extrae datos y reduce la agregación de datos. Cuanto más familiarizado esté con RDBMS, más difícil será comprender el mapa/reducir. MapReducing se beneficia de las consultas SQL porque la tarea de asignación/reducción se puede distribuir entre varios nodos, algo que no es posible en RDBMS. Agregar un nuevo registro a la base de datos no siempre constituye que la tarea de asignación/reducción se vuelva a ejecutar por completo.

Presentamos CouchDB

Algunos datos sobre CouchDB que debe conocer:

  • CouchDB es una base de datos orientada a documentos JSON escrita en Erlang.
  • Es una base de datos altamente concurrente diseñada para ser fácilmente replicable, horizontalmente, a través de numerosos dispositivos y ser tolerante a fallas.
  • Forma parte de la generación de bases de datos NoSQL.
  • Es un proyecto de la fundación Apache de código abierto.
  • Permite que las aplicaciones almacenen documentos JSON a través de su interfaz RESTful.
  • Hace uso de map/reduce para indexar y consultar la base de datos.

Principales beneficios de CouchDB

  • Documentos JSON - Todo lo almacenado en CouchDB se reduce a un documento JSON.
  • Interfaz RESTful - Desde la creación hasta la replicación y la inserción de datos, todas las tareas de administración y datos en CouchDB se pueden realizar a través de HTTP.
  • Replicación N-Master - Puede hacer uso de una cantidad ilimitada de 'maestros', lo que genera algunas topologías de replicación muy interesantes.
  • Creado para estar sin conexión - CouchDB puede replicarse en dispositivos (como teléfonos Android) que pueden desconectarse y manejar la sincronización de datos cuando el dispositivo vuelve a estar en línea.
  • Filtros de replicación - Puede filtrar con precisión los datos que desea replicar en diferentes nodos.

Poniéndolo todo junto

CouchDB es una base de datos diseñada para ejecutarse en Internet hoy en día.

CouchDB le permite escribir una aplicación del lado del cliente que se comunica directamente con Couch sin necesidad de una capa intermedia del lado del servidor, lo que reduce significativamente el tiempo de desarrollo. Con CouchDB, puede manejar fácilmente la demanda agregando más nodos de replicación con facilidad. CouchDB le permite replicar la base de datos a su cliente y con filtros podría incluso replicar los datos de ese usuario específico.

Tener la base de datos almacenada localmente significa que su aplicación del lado del cliente puede ejecutarse casi sin latencia. CouchDB se encargará de la replicación en la nube por usted. Sus usuarios podrían acceder a sus facturas en su teléfono móvil y realizar cambios sin latencia apreciable, todo ello sin conexión. Cuando una conexión está presente y se puede utilizar, CouchDB replicará automáticamente esos cambios en su CouchDB en la nube.

CouchDB es una base de datos diseñada para ejecutarse en Internet de hoy para las aplicaciones de escritorio actuales y los dispositivos conectados a través de los cuales accedemos a Internet.

Paso 1:Instalación de CouchDB

La forma más fácil de poner en funcionamiento CouchDB en su sistema es dirigirse a CouchOne y descargar una distribución de CouchDB para su sistema operativo, OSX en mi caso. Descargue el zip, extráigalo y suelte CouchDBX en mi carpeta de aplicaciones (instrucciones para otros sistemas operativos en CouchOne).

Finalmente, abre CouchDBX.

Paso 2 - Bienvenido a Futon

Después de que CouchDB se haya iniciado, debería ver el panel de control de Futon en la aplicación CouchDBX. En caso de que no puedas, puedes acceder a Futon a través de tu navegador. Mirando el registro, CouchDBX nos dice que CouchDB se inició en http://127.0.0.1:5984/ (puede ser diferente en su sistema). Abra un navegador y vaya a http://127.0.0.1:5984/_utils/ y deberías ver Futon.

A lo largo del resto de este tutorial usaré Futon en Firefox. También tendré Firebug y la vista de la consola abiertas para ver todas las solicitudes HTTP que Futon envía detrás de escena. Esto es útil ya que su aplicación puede hacer todo lo que hace Futon. Avancemos y creemos una base de datos llamada mycouchshop .

Complemento jQuery de CouchDB

Futon en realidad está usando un complemento jQuery para interactuar con CouchDB. Puede ver ese complemento en http://127.0.0.1:5984/_utils/script/jquery.couch.js (tenga en cuenta que su puerto puede ser diferente). Esto le da un gran ejemplo de cómo interactuar con CouchDB.

Paso 3 - Usuarios en CouchDB

CouchDB, de forma predeterminada, está completamente abierto, lo que otorga a cada usuario derechos de administración de la instancia y todas sus bases de datos. Esto es genial para el desarrollo pero obviamente malo para la producción. Avancemos y configuremos un administrador. En la parte inferior derecha, verá "¡Bienvenido a la fiesta de administración! ¡Todos son administradores! Solucione esto".

Continúe y haga clic en arreglar esto y dése un nombre de usuario y contraseña. Esto crea una cuenta de administrador y otorga a los usuarios anónimos acceso para leer y escribir operaciones en todas las bases de datos, pero sin privilegios de configuración.

Más sobre los usuarios

En CouchDB sería imprudente crear un solo superusuario y hacer que ese usuario haga todo el trabajo de lectura/escritura.

Los usuarios en CouchDB pueden ser un poco confusos de entender inicialmente, especialmente si está acostumbrado a crear un solo usuario para toda su aplicación y luego administrar los usuarios usted mismo dentro de una tabla de usuarios (no la tabla de usuarios de MySQL). En CouchDB, sería imprudente crear un solo superusuario y hacer que ese usuario haga todo el trabajo de lectura/escritura, porque si su aplicación es del lado del cliente, las credenciales de este superusuario estarán a la vista en su código fuente de JavaScript.

CouchDB tiene integrada la creación y autenticación de usuarios. Puede crear usuarios con el complemento jQuery usando $.couch.signup() . Estos esencialmente se convierten en los usuarios de su sistema. Los usuarios son solo documentos JSON como todo lo demás, por lo que puede almacenar cualquier atributo adicional que desee, como el correo electrónico, por ejemplo. Luego puede usar grupos dentro de CouchDB para controlar a qué documentos tiene acceso de escritura cada usuario. Por ejemplo, puede crear una base de datos para ese usuario en la que pueda escribir y luego agregarlo a un grupo con acceso de lectura a las otras bases de datos según sea necesario.

Paso 4:creación de un documento de producto

Ahora vamos a crear nuestro primer documento usando Futon a través de los siguientes pasos:

  1. Abre mycouchshop base de datos.
  2. Haga clic en "Nuevo documento".
  3. Haga clic en "Agregar campo" para comenzar a agregar datos al documento JSON. Observe cómo se completa previamente una identificación para usted, le recomiendo encarecidamente que no cambie esto. Agregue la clave "nombre" con el valor de "Nettuts CouchDB Tutorial One".
  4. Asegúrese de hacer clic en la marca junto a cada atributo para guardarlo.
  5. Haga clic en "Guardar documento".

Suba un nivel, vuelva a la base de datos y debería ver un documento enumerado con el ID anterior como clave y un valor que comienza con {rev: . Este es el documento JSON que acaba de crear.

Paso 5:Actualización de un documento

CouchDB es una base de datos solo para agregar:las nuevas actualizaciones se agregan a la base de datos y no sobrescriben la versión anterior. Cada nueva actualización de un documento JSON con un ID preexistente agregará una nueva revisión. Esto es lo que significa la clave de revisión insertada automáticamente. Siga los pasos a continuación para ver esto en acción:

  • Ver el contenido de mycouchshop base de datos, haga clic en el único registro visible.
  • Agregue otro atributo con la clave "tipo" y el valor "producto".
  • Presione "Guardar documento".

Después de presionar guardar, debería aparecer una nueva clave de revisión que comience con el número 2. Retroceder un nivel a mycouchshop vista de la base de datos, aún verá un solo documento, esta es la última revisión de nuestro documento de producto.

Revisiones

Si bien CouchDB usa revisiones internamente, trate de no apoyarse demasiado en ellas. Las revisiones se pueden limpiar a través de Futon con bastante facilidad y no está diseñado para usarse como un sistema de control de revisiones. CouchDB usa las revisiones como parte de su funcionalidad de replicación.

Paso 6:creación de un documento con cURL

Ya mencioné que CouchDB usa una interfaz RESTful y el lector con ojos de águila habría notado que Futon usa esto a través de la consola en Firebug. En caso de que no lo hayas hecho, demostremos esto insertando un documento usando cURL a través de la Terminal.

Primero , creemos un documento JSON con el contenido a continuación y guárdelo en el escritorio llamando al archivo person.json .

	{
		"forename":	"Gavin",
		"surname":	"Cooper",
		"type":		"person"
	}

Siguiente , abre la terminal y ejecuta cd ~/Desktop/ colocándolo en el directorio correcto y luego realice la inserción con curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type: application/json" . CouchDB debería haber devuelto un documento JSON similar al siguiente.

{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}

Este es el ID y el número de revisión del documento insertado. CouchDB sigue la convención RESTful y por lo tanto:

  • PUBLICAR - crea un nuevo registro
  • OBTENER - lee registros
  • PONER - actualiza un registro
  • ELIMINAR - elimina un registro

Paso 7:visualización de todos los documentos

Podemos verificar aún más nuestro inserto al ver todos los documentos en nuestro mycouchshop base de datos ejecutando curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs .

Paso 8:creación de una función de mapa simple

Ver todos los documentos es bastante inútil en términos prácticos. Lo que sería más ideal es ver todos los documentos del producto. Siga los pasos a continuación para lograrlo:

  • Dentro de Futon, haga clic en el menú desplegable de vista y seleccione "Vista temporal".
  • Este es el editor de reducción de mapas dentro de Futon. Copie el código siguiente en la función de mapa.
    			function (doc) {
    				if (doc.type === "product" && doc.name) {
    					emit(doc.name, doc);
    				}
    			}
  • Haga clic en Ejecutar y debería ver el único producto que agregamos anteriormente.
  • Continúe y guarde esta vista para que sea permanente.

Después de crear esta función de mapa simple, ahora podemos solicitar esta vista y ver su contenido a través de HTTP usando el siguiente comando curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products .

Una pequeña cosa a tener en cuenta es cómo obtenemos la identificación y la revisión del documento de forma predeterminada.

Paso 9:realizar una reducción

Para realizar una reducción útil, agreguemos otro producto a nuestra base de datos y agreguemos un atributo de precio con el valor de 1.75 a nuestro primer producto.

	{
		"name":		"My Product",
		"price":	2.99,
		"type":		"product"
	}

Para nuestra nueva vista, incluiremos una reducción y un mapa. Primero, necesitamos definir el mapa como se muestra a continuación.

	function (doc) {
		if (doc.type === "product" && doc.price) {
			emit(doc.id, doc.price);
		}
	}

La función de mapa anterior simplemente verifica si el documento ingresado es un producto y si tiene un precio. Si se han cumplido estas condiciones, se emite el precio de los productos. La función de reducción está debajo.

function (keys, prices) {
	return sum(prices);
}

La función anterior toma los precios y devuelve la suma utilizando una de las funciones de reducción integradas de CouchDB. Asegúrese de marcar la opción de reducción en la parte superior derecha de la tabla de resultados, ya que de lo contrario no podrá ver los resultados de la reducción. Es posible que deba realizar una actualización completa en la página para ver la opción de reducción