Sie sind auf Seite 1von 48

CouchDB

Overview

Introduction
SQL vs CouchDB
CouchDB Features
CouchDB Core API
Futon
Security
Application

Overview

Demo
Code
Advantages
DisAdvantages
Iris Couch
Conclusion
References

Introduction

Created By : Damien Katz


Year : 2005
Language : Erlang
License : Apache Software Foundation(2008)

Introduction...

NoSQL Database

.....Uses Map/Reduce queries written


in javascript

NoSQL Databases

Schema-Free
Distributed
Open Source
Horizontally Scalable
Easy Replication Support

NoSQL Timeline

Document-Oriented DBMS

Data is stored in documents

......and not in relations like an RDBMS

SQL vs CouchDB
SQL

CouchDB

Relational

Non-Relational

Tables

Documents with types

Rows and Columns

Document Fields

SQL Query Engine

Map / Reduce Engine

CouchDB Features

Data Representation - Using JSON


Interaction - Futon / CouchDB API
Querying - Map / Reduce
Design Documents - Application
code(Language : Javascript)
Documents can have attachments

JSON

Stands for Javascript Object Notation


Derived from Javascript scripting language
Used for representing simple data structures
and associative arrays

JSON.....

Example: {
"firstName": "John",
"lastName": "Smith",
"age": 25,
"phoneNumber": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}]

CouchDB Core API


(Command Line Utility )

Server API
Database API
Document API
Replication API

HTTP API

Messages are self-described via HTTP Headers


and HTTP Status Codes.
URIs identify resources.
HTTP Methods define operations on the
resources.

HTTP Request Methods


Method

Description

PUT

PUT requests are used to create new resources


where the URI of the request is different to the
resource that is to be created.

GET

GET requests are used to request data from the


database.

POST

POST requests are used to update the existing data,


at the same resource the URI is requested from.

DELETE
COPY

DELETE requests to delete databases and


documents.
Copies one resource to another resource.

HTTP Status Codes


Status Code

Description

200 (OK)

The request was successfully


processed.
The document was successfully created.
The document has not been modified
since the last update.
The syntax of the request was invalid.
The request was not found.
The request was made using an
incorrect request method.
The request failed because of a
database conflict.
could not create a database- a database
with that name already exists.
The request was invalid and failed, or an
error occurred within the CouchDB
server.

201 (Created)
304 (Not Modified)
400 (Bad Request)
404 (Not Found)
405 (Method Not Allowed)
409 (Conflict)
412 (Precondition Failed)
500 (Internal Server Error)

Curl Command - Server API

Command to check if CouchDB is working at


all?
curl http://127.0.0.1:5984/
Response :
{"couchdb":"Welcome","version":"0.10.1"}

Curl Command - Database


API

Command to get a list of Databases :


curl -X GET http://127.0.0.1:5984/_all_dbs
Command to create a Database :
curl -X PUT http://127.0.0.1:5984/DB_name
Curl's -v option :
curl -vX PUT http://127.0.0.1:5984/DB_name
Command to destroy a Database :
curl -X DELETE http://127.0.0.1:5984/DB_name

Curl Command - Document


API

Command to create a document :


curl -X PUT http://127.0.0.1:5984/albums/
6ert2gh45ji6h6tywe324743rtbhgtrg \ -d
'{"title":"abc","artist":"xyz"}'
Command to get a UUID :
curl -X GET http://127.0.0.1:5984/_uuids
Command to retrieve a Document :
curl -X GET http://127.0.0.1:5984/albums/
6ert2gh45ji6h6tywe324743rtbhgtrg

Curl Command - Document


API

Command for attachments :


curl -vX PUT http://127.0.0.1:5984/albums/
6ert2gh45ji6h6tywe324743rtbhgtrg/ \
artwork.jpg?rev=2-2739352689 --data-binary
@artwork.jpg -H "Content-Type: image/jpg"
To view the image in the browser, URL is :
http://127.0.0.1:5984/albums/6ert2gh45ji6h6
tywe324743rtbhgtrg/artwork.jpg

Curl CommandReplication API

Command to replicate a Database :


curl -vX POST http://127.0.0.1:5984/
_replicate \ -d '{"source":"albums","target":
"albums_replica"}'

Futon

Built-in admin interface


Access to all CouchDB features
Create and Destroy databases
Create, View and Edit Documents
Compose and run Map / Reduce Views
Replicate a Database

Futon Interface Demo...

Design Documents

Contains application code


They are like normal json documents but
prefixed by _design/
CouchDB looks for views and other application
functions here...

Views

Used for extracting data we need for a specific


purpose
Example :
function(doc){
if(doc.Bname)
{
emit(doc.id,doc.Bname);
}
}

View Functions...

Map - single parameter - doc


emit(key,value) - built-in function
Results of emit() are sorted by key
We query the views to produce the desired
result
When we query a view, it's run on every
document in the database for which view is
defined
View result is stored in a B-tree

View Functions

B-tree for the view is built only once and all the
subsequent queries will just read the B-tree instead of
executing the map function again

Used to find documents by any value or structure that


resides in them

Using the URI, we can retrieve the exact data we need.


For Example : /books/_design/docs/_view/by_Bname?
key="Circuits"

Map Functions

For Example : Consider the following


documents

Document-1

Document-2

Document-3

Document-4

id : 1

id : 2

id : 3

id : 4

Bname : Oracle

Bname : Networks

Bname : Circuits

Bname : AI

Category : CS

Category : CS

Category : Electronics

Category : CS

Author : abc

Author : xyz

Author : abcd

Author : pqrs

Edition : 2007

Edition : 2001

Edition : 2004

Edition : 2010

Map Functions

Output :

Key

Value

Oracle

Networks

Circuits

AI

Map Functions

Map Function :
map:function(doc) {
emit(doc.Bname, doc.id);
}
Output :
AI

Circuits

Networks

Oracle

Reduce Function

This function operates on the sorted rows

emitted by map view functions.


Predefined Reduce Functions:
_sum, _count etc.
Example:
function(keys,values){
return sum(values); //gives aggregate values
}

Security

Database Admins
Validation Functions

Validation Function

Uses the function validate_doc_update().


If the validation function raises an exception, the

update is denied else the updates are accepted.


Document validation is optional.

Who uses CouchDB?

Application

GSUBooks.com

Code - add.js
add.js:
$(document).ready(
function() {
//Event handler crud stuff
$('input#addId').click(function(e)
{
if ($('#bookId').val().length == 0)
{
return;
}
var bookdoc = { booknm: $('#bookId').val(), authornm: $('#authorId').val(), category:
$('#categoryId').val(), edition: $('#editionId').val(),quantity: $('#quantityId').val() }

Code - add.js...
db.saveDoc(bookdoc, { success: function(resp)
{
checkList(); //refreshes the database with new book
}
});

Code-delete.js
delete.js
$(document).ready
(
function()
{
$('input#borrowId').click(function(e)
{
if ($('#idId').val().length == 0)
{
return;
}
var bookdoc = { _id: $('#idId').val(), _rev: $('#revId').val() }
db.removeDoc(bookdoc, { success: function(resp)
{

Code-delete.js
checkList(); //refreshes the database with the remaining books
alert("Book has been borrowed Successfully!!");
}});
clearDocument();
});
});
function clearDocument()
{
$('#idId').val('');
$('#revId').val('');
$('#bookId').val('');
$('#authorId').val('');
$('#categoryId').val('');
$('#editionId').val('');
$('#quantityId').val('');
};

Code - Update.js
update.js
$(document).ready(function()
{
$('input#updateId').click(function(e)
{
if ($('#idId').val().length == 0)
{
return;
}
var bookdoc = {
_id: $('#idId').val(),
_rev: $('#revId').val(),
booknm: $('#bookId').val(),

update.js...
authornm:$('#authorId').val(),
category:$('#categoryId').val(),
edition:$('#editionId').val(),
quantity:$('#quantityId').val()
}
db.saveDoc(bookdoc, { success: function(resp)
{
checkList();
}
});
});

Code - Display.js
display.js
$(document).ready(function()
{
checkList();
});
function checkList()
{
$("table#itemData").empty();
db.view("myfirstDesign/myfirstView", { success: function(data)
{
$('table#itemData').append('<tr><th><font color="black">Book
Name</font></th><th><font color="black">Author Name</font></th><th><font
color="black">Category</font></th><th><font color="black">Edition</font></th>

Code - Display.js
<th><font color="black">Quantity</font></th></tr>');
data.rows.map(function(row)
{
$('table#itemData').append('<tr><td id="'+row.value._id+'"align="center"><font
+row.value.booknm
+'</font></td><td align="center"><font color="navy">'
+row.value.authornm
+'</font></td><td align="center"><font color="navy">'
+row.value.category
+'</font></td><td align="center"><font color="navy">'
+row.value.edition
+'</font></td><td align="center"><font color="navy">'
+row.value.quantity
+'</font></td></tr>');
$('#'+row.value._id).click(function()
{
$('#idId').val(row.value._id);

Code - Display.js
$('#revId').val(row.value._rev);
$('#bookId').val(row.value.booknm);
$('#authorId').val(row.value.authornm);
$('#categoryId').val(row.value.category);
$('#editionId').val(row.value.edition);
$('#quantityId').val(row.value.quantity);
return false;
});
});
}
});
}

Advantages / DisAdvantages

Features
Not easy to learn especially if the user is
familiar with SQL
Security is weak
Temporary views on large datasets are very
slow.
Replication of large databases may fail
Documents are quite large as the data is
represented using JSON format

References

CouchDB - The Definitive Guide , J. Chris


Anderson, Jan Lehnardt & Noah Slater
Beginning CouchDB, Joe Lennon

Thank You...

Das könnte Ihnen auch gefallen