🟢 What is Azure Cosmos DB?
- A globally distributed, multi-model, NoSQL database service.
- Designed for low latency, high availability, and global scalability.
- Supports multiple APIs: SQL (Core), MongoDB, Cassandra, Gremlin (Graph), Table API.
👉 Think of it as a database that automatically scales across the globe.
🟢 Key Concepts
- Account → Database → Container → Items
- Partition Key → spreads data evenly across physical partitions.
- Request Units (RUs) → performance currency (every operation consumes RUs).
- Consistency Levels → trade-off between performance and accuracy:
- Strong, Bounded Staleness, Session, Consistent Prefix, Eventual.
- Change Feed → stream of inserts/updates in order.
🟢 Partition Key (Most Asked in Interviews)
- Good partition key: high cardinality, evenly distributes load.
- Bad partition key: low cardinality (e.g., true/false, country code).
- Can use synthetic keys (e.g.,
CustomerId + Date
).
👉 Interviewers love to ask: “What happens if you choose a bad partition key?”
Answer: It creates hot partitions → performance issues.
🟢 Pricing Models
- Provisioned Throughput (RU/s) → fixed capacity, predictable cost.
- Autoscale → scales RU/s up/down automatically.
- Serverless → pay per request (for small workloads).
🟢 Example: Insert Document in .NET
using Azure.Cosmos;
string endpoint = "<COSMOS_ENDPOINT>";
string key = "<COSMOS_KEY>";
CosmosClient client = new CosmosClient(endpoint, key);
var db = await client.CreateDatabaseIfNotExistsAsync("SampleDb");
var container = await db.CreateContainerIfNotExistsAsync("Products", "/category", 400);
var item = new { id = Guid.NewGuid().ToString(), category = "electronics", name = "Laptop", price = 1200 };
await container.CreateItemAsync(item, new PartitionKey(item.category));
Console.WriteLine("✅ Item inserted!");
🟢 Example: Query Documents (SQL-like)
var query = "SELECT * FROM c WHERE c.price > 500";
var iterator = container.GetItemQueryIterator<dynamic>(query);
while (iterator.HasMoreResults)
{
foreach (var doc in await iterator.ReadNextAsync())
Console.WriteLine($"{doc.name} - {doc.price}");
}
🟢 Advanced Features
- Transactional Batch → atomic operations within same partition.
- Stored Procedures (JS) → run logic close to data.
- Change Feed → react to changes in real time (e.g., with Azure Functions).
🟢 Monitoring
- Integrated with Azure Monitor + App Insights.
- Track RU consumption, latency, throttling (429 errors).
- Use retry policies with exponential backoff.
🟢 Common Interview Questions
- What is Azure Cosmos DB?
- What is a partition key? How do you choose one?
- What are Request Units (RUs)?
- Explain different consistency levels.
- What is the Change Feed? Use case?
- Difference between Provisioned Throughput and Serverless mode?
- How does Cosmos DB achieve global distribution?
- What are hot partitions and how do you avoid them?
- Difference between Cosmos DB and SQL Database?
- How do you monitor performance and troubleshoot 429 errors?
🟢 Pros & Cons
✅ Pros
- Global distribution, low latency.
- Multi-model, flexible APIs.
- Tunable consistency.
- Change Feed support for event-driven apps.
❌ Cons
- Cost can grow with poor partition design.
- Limited support for complex joins (compared to SQL).
- RU model can be confusing for beginners.
✅ Quick Recap
- Cosmos DB = globally distributed NoSQL database.
- Partition Key → most critical design choice.
- RU/s → performance unit (watch consumption).
- Consistency Levels → balance between latency & accuracy.
- Change Feed → real-time stream of changes.
Comments
Post a Comment