DocumentDB versus other databases
This section compares DocumentDB with other (non-)SQL technologies. The comparison is made with MongoDB and Azure Table storage.
Azure Table storage
Table storage is a non-SQL tabular based storage mechanism enabling you to store rows and columns inside a table. A table is not fixed, meaning that different rows can have different columns. Azure Table storage is a perfect fit for storing large amounts of data, although it is non-relational. There are no mechanisms like foreign keys, triggers, or user-defined functions.
MongoDB
MongoDB is also a document database (NoSQL), which means that it is schema-free, enables high performance and high availability, and has the ability to scale. MongoDB is open source, and is built around documents and collections. The documents are compiled of sets of key-value pairs, while collections also contain documents. Compared to DocumentDB, MongoDB uses BSON instead of JSON.
Comparison chart
The following table provides a high-level comparison on some key features:
Feature |
DocumentDB |
MongoDB |
Table storage |
---|---|---|---|
Model |
Document |
Document |
Rows and columns |
Database schema |
Schema-free |
Schema-free |
Schema-free |
Triggers |
Yes |
No |
No |
Server side scripts |
Yes, JavaScript |
Yes, JavaScript |
No |
Foreign keys |
*N/A |
N/A |
N/A |
Indexing |
Potentially on property |
Potentially on every property |
Partition key and row key only |
Transactions |
Yes, supports ACID |
No |
Limited, using batching |
Hosting |
On Microsoft Azure only, offered as a service |
Can be on-premise or on a virtual machine, not offered as a service |
On Microsoft Azure, offered as a service. |
DocumentDB does not offer referential integrity by design. There is no concept of foreign keys. Integrity can be enforced by using triggers and SPs.
The role of the Database Administrator is still needed to manage DocumentDB. We still need someone to overlook our databases and collections. Some common tasks a DBA for a document might perform are as follows:
- Creating and managing databases
- Creating and managing collections
- Getting responsibility on scaling, partitioning, and sharding
- Defining and maintaining SPs, user-defined functions, and triggers
- Managing users and permissions
- Measuring performance