Why must I personally use document based database like CouchDB rather than using relational database. What are the typical types of programs or domain names in which the document based database is much more appropriate compared to relational database?

Most likely you should not :-)

The 2nd most apparent response is you need to use it in case your data is not relational. This usually manifests itself in getting no good way to describe your computer data as some posts. An example is really a database in which you really store paper documents, e.g. by checking office mail. The information may be the scanned PDF and you've got some meta data which always is available (scanned at, scanned by, kind of document) and a lot of possible metadata fields which is available sometime (customer number, supplier number, order number, continue file until, OCRed fulltext, etc). Usually you don't know ahead of time which metadata fields you'll add over the following 2 yrs. Such things as CouchDB work much better for your type of data than relational databases.

I additionally personally love the truth that I do not need any client libraries for CouchDB except an HTTP client, that is nowadays incorporated in virtually every programming language.

The most likely least apparent answer: If you think no discomfort utilizing a RDBMS, follow it. If a person always has to operate around your RDBMS to obtain your work done, a document oriented database may be worth a glance.

For any more elaborate list check this posting of Richard Johnson.

CouchDB (using their website)

  • A document database server, accessible using a Peaceful JSON API. Generally, relational databases aren't simply utilized via Relaxation services, but require an infinitely more complex SQL API. Frequently these API's (JDBC, ODBC, etc.) are very complex. Relaxation is very simple.

  • Ad-hoc and schema-free having a flat address space. Relational databases have complex, fixed schema. You define tables, posts, indexes, sequences, sights along with other stuff. Couch does not require this degree of complex, costly, fragile planning.

  • Distributed, featuring robust, incremental replication with bi-directional conflict recognition and management. Some SQL commercial items offer this. Due to the SQL API and also the fixed schemas, this really is complex, difficult and costly. For Couch, it seems easy and affordable.

  • Query-able and index-able, having a table oriented confirming engine that utilizes Javascript like a query language. The same is true SQL and relational databases. Nothing new here.

So. Why CouchDB?

  • Relaxation now is easier than JDBC or ODBC.
  • No Schema now is easier than Schema.
  • Distributed in ways that seems easy and affordable.

For stupidly storing and serving other-servers-data.

Within the last handful of days I have been having fun with a lifestream application that polls my feeds (scrumptious, flickr, github, twitter...) and stores them in couchdb. The good thing about couchdb is it allows me keep your original data in the original structure without any overhead. I added a 'class' area to every document, storing the origin server, and authored a javascript render class for every source.

Generalizing, once your server conveys with another server a schema-less storage is better as you've no treatments for the schema. Like a bonus, couchdb uses the native methods of servers and clients - JSON for representation and HTTP Relaxation for transport.

Rapid database integration involves mind.

After I am constantly changing my schema, I'm constantly annoyed by needing to keep up with the schema in MySQL/SQLite. While I have dirty an excessive amount of with CouchDB yet, I actually do like how simple it's to evolve the schema throughout the Radical process.

A situation where you will possibly not desire to use a non-relational database is if you have lots of many-to-many associations I have yet to obtain my mind around how you can create good MapReduce functions around most of these associations, particularly if you want to have metadata within the joining relationship. I am unsure, however i don't believe CouchDB Map functions can call their very own queries around the database, since that could cause infinite loops.