Mostofreddy

Top five: Razones para elegir CouchDB

Comentarios 0 Tags , , Categorias Base de Datos

{lang: 'es-419'}

En el sitio nosql, publicaron este top 5 de las razones de porque usar CouchDB

  • CouchDB Stores Data in Documents – CouchDB manages data in the form of JSON documents.
  • Data is Unique and Never Overwritten - when a piece of data is written to a CouchDB document, it will have completely unique identification and will never be overwritten.
  • CouchDB Makes Replication Easy and Efficient – CouchDB databases can replicate from one to another, in a sort of “Master-Master” configuration.  This way, any CouchDB database can accept data as well as replicate that data to any other CouchDB database quickly.
  • Interact With CouchDB Over HTTP Using RESTful – the protocol of CouchDB is RESTful over HTTP.
  • CouchDB Has Own Webserver – Anyone who has messed around with an LAMP system knows that Apache can hog a ton of memory.  Since CouchDB uses has it’s own webserver, you can save a lot of memory by avoiding Apache all together.

Presentaciones sobre CouchDB

Comentarios 0 Tags , Categorias Base de Datos

{lang: 'es-419'}



Tutorial CouchDB: creando bases de datos

Comentarios 2 Tags , Categorias Base de Datos

{lang: 'es-419'}

Siguiendo con los post sobre CouchDB (CouchDB – base de datos documental, Comenzando con CouchDB, CouchDB (I) – Instalación) ahora hablare sobre como usar couchdb.

En este primer post veremos como crear una base de datos, como acceder a ella, ingresarle datos y otras cosas mas. Es indispensable que tengan algún conocimiento de cUrl, REST y JSON ya que se utiliza estas herramientas para comunicarse con la base de datos couchdb

Crear una base de datos

Para crear una base de datos utilizamos el método PUT


curl -X PUT http://127.0.0.1:5984/users

//si esta todo ok devuelve
{"ok":true}

//si hubo error
{"error":"file_exists","reason":"The database could not be created, the file already exists."}

Si no leyeron los post anteriores, recuerden que CouchDB al ser una base de datos documental no posee una estructura de datos fija y estática como si las tienen las bases de datos relacionales, por lo cual los documentos que se creen dentro de la base de datos “usuarios” podrian tener distinto formato como veremos a continuación

Borrar una base de datos

<pre>curl -X DELETE http://127.0.0.1:5984/perms

<pre>//si esta todo ok devuelve
{"ok":true}

//si hubo error
{"error":"not_found","reason":"missing"}</pre>
</pre>

Agregar documentos a una base de datos


curl -X PUT http://127.0.0.1:5984/users/mostofreddy -d '{"firstName":"Federico","lastName":"Lozada Mosto","nick":"mostofreddy"}'

curl -X PUT http://127.0.0.1:5984/users/homero -d  '{"firstName":"Homero","lastName":"Simpson","age":"36","city":"Sprinfield"}'

Como ven, son dos documentos que corresponden a la misma base pero tienen estructura distinta.

Devolver todas las bases de datos


curl -X GET http://127.0.0.1:5984/_all_dbs

Obtener los datos básicos


curl -X GET http://127.0.0.1:5984/users

//nos devuelve en formato JSON

{
"db_name":"user",
"doc_count":0,
"doc_del_count":0,
"update_seq":0,
"purge_seq":0,
"compact_running":false,
"disk_size":79,
"instance_start_time":"1273033142185846",
"disk_format_version":5
}

Copiar de un documento a otro


curl -X COPY http://127.0.0.1:5984/users/mostofreddy -H "Destination: flozadamosto"

Obtener todos los documentos de una base de datos


curl -X GET http://127.0.0.1:5984/users/_all_docs

//nos devuelve en formato JSON

{
    "total_rows":2,
    "offset":0,
    "rows":[
        {"id":"mostofreddy","key":"mostofreddy","value":{"rev":"1-967a00dff5e02add41819138abb3284d"}},
        {"id":"homero","key":"homero","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"}}
        ]
}

Obtener todos lso documentos  pero en ordenados por id de documento en forma descendente


curl -X GET http://127.0.0.1:5984/users/_all_docs?descending=true

Obtener todos lso documentos  limitando la cantidad devuelta


curl -X GET http://127.0.0.1:5984/users/_all_docs?descending=true\&limit=1

Obtener todos los documentos pero recuperando tambien toda la información de los documentos


curl -X GET http://127.0.0.1:5984/contacts/_all_docs?include_docs=true

{
    "total_rows":4,
    "offset":0,
    "rows":[
        {"id":"mostofreddy","key":"mostofreddy","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"},"doc":{"_id":"mostofreddy","_rev":"1-32273fce7b3c666c9a28ee3d5731d963","firstName":"Federico","lastName":"Lozada Mosto","nick":"mostofreddy"}},
        {"id":"homero","key":"homero","value":{"rev":"1-32273fce7b3c666c9a28ee3d5731d963"},"doc":{"_id":"homero","_rev":"1-32273fce7b3c666c9a28ee3d5731d963","firstName":"Homero","lastName":"Simpsons","age":"36","city":"Sprinfield"}}
        ]
}

CouchDB (I) – Instalación

Comentarios 1 Tags Categorias Programacion

{lang: 'es-419'}

Instalar CouchDB en Ubuntu es realmente fácil, existe un tutorial en la wiki oficial del proyecto.

1) Instalamos las dependencias de couchdb

sudo apt-get build-dep couchdb

2) Instalamos librerias necesarias

sudo apt-get install libmozjs-dev libicu-dev libcurl4-gnutls-dev libtool

3) Descargarmos CouchDB y lo descomprimimos

4) Compilamos

./configure
make
sudo make install

5) Iniciamos el demonio

sudo couchdb

6) Comprobamos su instalación accediendo a http://localhost:5984/_utils

Lo último que nos queda es configurar couchdb como servicio

1) Creamos el usuario couchdb

sudo adduser couchdb

2) Creamos unas carpetas, depende la distribución puede ser que no se creen


sudo mkdir -p /usr/local/var/lib/couchdb
sudo mkdir -p /usr/local/var/log/couchdb
sudo mkdir -p /usr/local/var/run
sudo chown -R couchdb /usr/local/var/lib/couchdb
sudo chown -R couchdb /usr/local/var/log/couchdb
sudo chown -R couchdb /usr/local/var/run

3) Copiamos el servicio couchdb a la carpeta init.d


sudo cp /usr/local/etc/init.d/couchdb /etc/init.d
sudo update-rc.d couchdb defaults

4) Iniciamos el servicio y comprobamos que este funcionando


sudo /etc/init.d/couchdb start
curl http://127.0.0.1:5984

Comenzando con CouchDB

Comentarios 0 Tags , Categorias Programacion

{lang: 'es-419'}

couchdb-logo

CouchDB es una base de datos documental libre (Open Source) que actualmente esta siendo desarrollada por la fundación Apache. Su nombre es un acrónimo. Couch significa “Cluster Of Unreliable Commodity Hardware” o sea, CouchDB esta destinada a funcionar en forma distribuida en crusters de bajo costo.

Su principal característica es que es un sistema de base de datos documental el cual difiere mucho con los sistemas de base relacional (los mas usados y conocidos), no encontraremos tablas, columnas, filas, foreing key, primary key, etc, solo documentos.

Veamos algunas otras características:

  • Formadas por documentos, no existe límite para la cantidad de ellos y tampoco para la cantidad de campos que pueda tener un documento.
  • No hace falta respetar un esquema de datos, cada documento puede tener distinta estructura evitando así campos nulos (pensemos en un conjunto de fichas personales, tendría sentido poner campos con valor nulo?).
  • El concepto de clave primaria es sustituido por un identificador único (UUID) en cada documento.
  • No sobreescribe los documentos sino que posee un sistema de versionado interno en el cual deja disponible la última versión y guarda las anteriores
  • No posee un sistema de bloqueo en los documentos. Si dos usuarios tratan de actualizar el mismo documento al mismo tiempo solo tendrá exito el primero. CouchDB devolvera un error de conflicto al segundo.
  • Los datos almacenados son accedidos mediante una API RESTFULL
  • Se utiliza JSON para el formato de las respuestas a las consultas REST.