User:Rgopalk/sandbox

RavenDB is a document-oriented database for the .NET platform. It is written in C and has API support in C, VB.NET and Java. RavenDB is classified as a NoSQL database as it stores its data in JSON format without any fixed schema. RavenDB is transactional with full ACID compliance. RavenDB is published by Hibernating Rhinos for any free, open source software under the GNU AGPL license and for commercial purposes under different proprietary licenses.

History and motivation
The initial version of RavenDB was released in November 2010. The developer claims that the main reason behind developing RavenDB was to have a NoSQL database for .NET that performed the tasks without "any friction". It is also the first NoSQL database to support LINQ. LINQ is a object-relational mapping for .NET languages.

Features
Some of the important features of RavenDB are:

Document-oriented
RavenDB is a document database which uses JSON to store documents. The documents does not have a fixed schema. These are used to store semi-structured data. Each document has an id associated with it. A set of documents is called a collection.

ACID
RavenDB's database-writes and some of the simple queries are ACID compliant. However, complex queries are not ACID compliant and supports only eventual consistency.

Indexing

 * Dynamic indexing RavenDB executes all of the queries against an index. It automatically creates one if it does not find any usable index for a query. Dynamic indexes are automatically removed if it remain unused for specific period of time. The index is created asynchronously with respect to write operations and hence could be stale.
 * Static Indexing Indexes can also be built statically ahead of time using commands and implementing a custom class.

Replication and sharding
RavenDB ensures high availability by supporting replication of documents. After every commit, the replication module will query for the list of replication-instances. For each of those instances, it gets the last document that was replicated onto that instance and sends the updated versions of the document.

RavenDB comes with in-built sharding support. A user is entasked with specifying the shard function, ie, how the data is divided between different servers. Rest of the sharding-related tasks are handled inherently.

Full-text search
RavenDB indexes all the content using Apache Lucene to provide full-text search capabilities. As a result, all the queries are in Lucene style syntax. It also supports LINQ based query along with type support.

RavenFS
RavenDB supports very large binary files using a distributed and virtual file system called RavenFS. It also replicates content for high-availability and indexes the meta-data of the files to allows search on the meta data of the file. The files can be managed using the management studio web interface.

RavenHQ
RavenHQ is a official cloud-based hosting solution for RavenDB. The solutions for upgrades, backup, high-availability, etc are pre-configured in the server.

Comparison against MongoDB
RavenDB supports most of the features that MongoDB does, viz, document store, open source software, schema-free, sharding, replication, etc.

However, there are some features that are different across these databases.
 * Unlike MongoDB, which is supported across multiple operating systems, RavenDB server runs only on Windows.
 * RavenDB does not support variable types as MongoDB does.
 * RavenDB supports only .NET programming language whereas MongoDB supports a plethora of languages. The method of access using RavenDB is either by the .NET client APIs or the RESTFul HTTP APIs, whereas MongoDB uses its own proprietary protocol.
 * RavenDB provides ACID compliance whereas MongoDB does not.

Language support
RavenDB is fully written in C. It offers client APIs for C, Java and VB.NET.

Licensing
The licenses for RavenDB are available for both open-source and proprietary software. It uses the AGPL license for the free version. There are different versions of licenses available for commercial closed source softwares.

GUI
RavenDB server comes with an inbuilt web interface for management, running on port 8080, called the Management Studio. It allows the users and administrators to manage documents and indexes, make queries and configure different settings.