Name | Microsoft Azure Cosmos DB | Microsoft Azure SQL Database |
Description | Globally distributed, horizontally scalable, multi-model database service | Database as a Service offering with high compatibility to Microsoft SQL Server |
Primary database model | Document store Graph DBMS Key-value store Wide column store | Relational DBMS |
Secondary database models | Document store Graph DBMS | |
Website | azure.microsoft.com/services/cosmos-db | azure.microsoft.com/en-us/services/sql-database |
Technical documentation | docs.microsoft.com/en-us/azure/cosmos-db | docs.microsoft.com/en-us/azure/sql-database |
Developer | Microsoft | Microsoft |
Initial release | 2014 | 2010 |
Current release | V12 | |
License | commercial | commercial |
Cloud-based only | yes | yes |
DBaaS offerings (sponsored links) | ||
Server operating systems | hosted | hosted |
Data scheme | schema-free | yes |
Typing | yes | yes |
XML support | yes | |
Secondary indexes | yes | yes |
SQL | SQL-like query language | yes |
APIs and other access methods | DocumentDB API Graph API (Gremlin) MongoDB API RESTful HTTP API Table API | JDBC ODBC ADO.NET |
Server-side scripts | JavaScript | Transact SQL |
Triggers | JavaScript | yes |
Partitioning methods | Sharding | |
Replication methods | yes | yes, with always 3 replicas available |
MapReduce | with Hadoop integration | no |
Consistency concepts | Bounded Staleness Consistent Prefix Session Consistency Eventual Consistency Immediate Consistency | Immediate Consistency |
Foreign keys | no | yes |
Transaction concepts | Multi-item ACID transactions with snapshot isolation within a partition | ACID |
Concurrency | yes | yes |
Durability | yes | yes |
User concepts | Access rights can be defined down to the item level | fine grained access rights according to SQL-standard |
Cosmos DB is a globally distributed, multi-model database solution with high SLAs around distribution. It’s designed for your applications and supports document and graph databases. Azure SQL DB has the concept of consistent reads and the ability to store your data. But my goal here is to talk about their differences with global replication and global distribution of your data.
Cosmos DB
- When it comes to distributing, with Cosmos DB you get a primary instance to write against and it gets distributed to all your read-only replicas that you choose around the world.
- You can simply push a button, activate new scenarios and you can run manual failover transactions.
- The big key with Cosmos is that is was built for global distribution. It was designed with the controls that allow it to be globally distributed with SLAs associated with that global distribution.
- Another key thing is that you get one URL and that URL knows where to go and does all the work.
Azure SQL Database
- Makes it possible to globally distribute your Azure SQL Databases.
- You can have a primary replica that stands in the US and add secondary read-only replicas in Europe and Asia for instance. You can have the read closer to the people who are using your global applications.
A couple things to be aware of, with Azure SQL DB you only have 4 read-only secondaries off an individual or SQL DB. In contrast, Cosmos DB can replicate wherever Cosmos DB is in the data center; you just go in and click a button. Also, in Cosmos you can do manual failover operations, or you can code them out, so it can be written to wherever it is in the world, closer to the active people using your application.
Do you need the ability of global distribution of your data and wonder which database is the best for this? Today, I’d like to give you a comparison between Azure SQL Database and Cosmos Database for global distribution.
Cosmos DB is a globally distributed, multi-model database solution with high SLAs around distribution. It’s designed for your applications and supports document and graph databases. Azure SQL DB has the concept of consistent reads and the ability to store your data. But my goal here is to talk about their differences with global replication and global distribution of your data.
Cosmos DB
- When it comes to distributing, with Cosmos DB you get a primary instance to write against and it gets distributed to all your read-only replicas that you choose around the world.
- You can simply push a button, activate new scenarios and you can run manual failover transactions.
- The big key with Cosmos is that is was built for global distribution. It was designed with the controls that allow it to be globally distributed with SLAs associated with that global distribution.
- Another key thing is that you get one URL and that URL knows where to go and does all the work.
Azure SQL Database
- Makes it possible to globally distribute your Azure SQL Databases.
- You can have a primary replica that stands in the US and add secondary read-only replicas in Europe and Asia for instance. You can have the read closer to the people who are using your global applications.
A couple things to be aware of, with Azure SQL DB you only have 4 read-only secondaries off an individual or SQL DB. In contrast, Cosmos DB can replicate wherever Cosmos DB is in the data center; you just go in and click a button. Also, in Cosmos you can do manual failover operations, or you can code them out, so it can be written to wherever it is in the world, closer to the active people using your application.
Manual failover is not something you would do with Azure SQL DB. All those writes must come to a primary replica and we’d have to feed out the replicas through read. The biggest pain point you may notice is managing the connectivity to your Azure SQL database in a globally replicated scenario.
There are some techniques, as well as tools within Azure to make it easier to use, such as Traffic Manager. You have the option to use an IP address in Traffic Manager and route things through there, but you must set all that up.
With Cosmos DB, that work is done for you because it’s designed from the ground up to be globally replicated. This does not mean you shouldn’t use active global replication with Azure SQL DB. You just need to understand the differences and use cases to make sure you use the database that best fits your needs to distribute your data globally.
Leave a Reply
Want to join the discussion?Feel free to contribute!