views:

200

answers:

3

What is document data store? What is key-value data store?

Please, describe in very simple and general words the mechanisms which stand behind each of them.

+2  A: 

From wikipedia:

  • Document data store: As opposed to relational databases, document-based databases do not store data in tables with uniform sized fields for each record. Instead, each record is stored as a document that has certain characteristics. Any number of fields of any length can be added to a document. Fields can also contain multiple pieces of data.
  • Key Value: An associative array (also associative container, map, mapping, dictionary, finite map, and in query-processing an index or index file) is an abstract data type composed of a collection of unique keys and a collection of values, where each key is associated with one value (or set of values). The operation of finding the value associated with a key is called a lookup or indexing, and this is the most important operation supported by an associative array. The relationship between a key and its value is sometimes called a mapping or binding. For example, if the value associated with the key "bob" is 7, we say that our array maps "bob" to 7.

More examples at NoSQL.

John
A: 

In a document data store each record has multiple fields, similar to a relational database. It also has secondary indexes.

Example record:

"id" => 12345,
"name" => "Fred",
"age" => 20,
"email" => "[email protected]"

Then you could query by id, name, age, or email.

A key/value store is more like a big hash table than a traditional database: each key corresponds with a value and looking things up by that one key is the only way to access a record. This means it's much simpler and often faster, but it's difficult to use for complex data.

Example record:

12345 => "Fred,[email protected],20"

You can only use 12345 for your query criteria. You can't query for name, email, or age.

kristina
Then aren't they the exact same thing, with different names?
Coronatus
There is a speed/complexity trade off... I tried to clarify above.
kristina
+1  A: 

Here's a description of a few common data models:

  • Relational systems are the databases we've been using for a while now. RDBMSs and systems that support ACIDity and joins are considered relational.
  • Key-value systems basically support get, put, and delete operations based on a primary key.
  • Column-oriented systems still use tables but have no joins (joins must be handled within your application). Obviously, they store data by column as opposed to traditional row-oriented databases. This makes aggregations much easier.
  • Document-oriented systems store structured "documents" such as JSON or XML but have no joins (joins must be handled within your application). It's very easy to map data from object-oriented software to these systems.

from Visual Guide to NoSQL Systems.

Nathan Hurst