CouchDB Features

advertisement
CouchDB
- Sai Divya Panditi
- Priyanka Yechuri
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
DELETE
POST requests are used to update the existing data,
at the same resource the URI is requested from.
DELETE requests to delete databases and
documents.
COPY
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
1
Oracle
2
Networks
3
Circuits
4
AI
Map Functions…
•
•
Map Function :
map:function(doc) {
emit(doc.Bname, doc.id);
}
Output :
AI
4
Circuits
3
Networks
2
Oracle
1
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
Database Admin Demo…
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
Iris Couch
•
•
Cloud CouchDB hosting
Free service
Iris Couch Demo…
References
•
•
CouchDB - The Definitive Guide , J. Chris
Anderson, Jan Lehnardt & Noah Slater
Beginning CouchDB, Joe Lennon
Thank You...
Download