When to use NoSQL Database?
"If your transactional volumes are reaching extreme levels, such as many thousands of transactions per second, you should consider a distributed NoSQL database" - Microsoft, Cosmos DB documentation
Relational Database
Fixed Schema
Table based structure
Vertical scaling
Provides ACID guarantees (atomicity, consistency, isolation, durability)
Data normalization
NoSQL Databases
Fluid schema
Multiple structures (key-value, graph, document, wide-column)
Horizontal scaling and data partitioning for scalability
Provides BASE (basically available, soft state, eventual consistency) semantics
Non-normalized data
Cosmos DB Benefits
Provides extremely low latency
Provides SLA for throughput, latency, availability and consistency
Support replication
High availability
Enables elastic scalability
Supports multiple consistency options
Integrated Analytics
Region Support
Schema-agnostic
Automatic Indexing
Supports multiple SDKs
Supported Cosmos DB API's
SQL (store data as json data) (container entity - Table)
Cassandra (CQL) (container entity - Table)
MongoDB (container entity - Collection)
Gremlin (Graph database - commonly used in product recommendation and social networks to denote the relationship between items) (container entity - Graph)
Azure Table (container entity - Table)
Throughput and Scaling
Vertical scaling - increase more resource, CPU, memory etc
Horizontal scaling - add more servers