Tag: Azure Data Services

Implement Azure Managed Redis data operations, including caching, expiration, and invalidation (AI-200 Exam Prep)

This post is a part of the AI-200: Developing AI Cloud Solutions on Azure  Exam Prep Hub.
This topic falls under these sections:
Develop AI solutions by using Azure data management services (25–30%)
   --> Integrate Azure Managed Redis in AI solutions
      --> Implement Azure Managed Redis data operations, including caching, expiration, and invalidation


Note that there are 10 practice questions (with answers) at the end of each section to help you solidify your knowledge of the material. Also, there are 4 practice tests with 30 questions each available from the hub's main page below the exam topics section.

Overview

Azure Managed Redis is a fully managed, in-memory data store based on Redis Enterprise. It provides high-throughput, low-latency access to frequently used application data and can be used to improve the performance and scalability of applications that otherwise depend heavily on backend databases or services.

For the AI-200: Developing AI Cloud Solutions on Azure exam, developers should understand how to implement Redis data operations and, in particular, how to use Redis for:

  • Caching frequently accessed data
  • Storing and retrieving key-value data
  • Setting expiration times on cached data
  • Removing or invalidating stale data
  • Implementing cache-aside patterns
  • Reducing database and backend-service load
  • Improving application responsiveness
  • Selecting appropriate Redis data structures
  • Designing cache keys appropriately
  • Handling cache misses
  • Understanding eviction versus expiration
  • Avoiding common Redis performance mistakes

Azure Managed Redis is generally best viewed as a high-performance cache or temporary data store, rather than the authoritative system of record. Applications should normally retain authoritative data in a durable backend such as Azure Database for PostgreSQL, Azure SQL Database, or Azure Cosmos DB.


1. Why Use Azure Managed Redis?

Traditional applications frequently retrieve data from databases or external services. Although these systems are designed for reliability and scalability, repeatedly retrieving the same information can introduce unnecessary:

  • Network traffic
  • Database CPU utilization
  • Query processing
  • Connection utilization
  • Application latency
  • Backend service load

Redis addresses this by keeping frequently accessed information in memory.

A simplified architecture looks like this:

Application
|
v
Azure Managed Redis
|
| Cache miss
v
Primary Database

When the requested information is already in Redis, the application can return it without querying the primary database.

This can dramatically reduce response times for frequently accessed information.

Common examples

Redis can be useful for caching:

  • Product information
  • User profiles
  • Configuration data
  • Frequently requested database queries
  • API responses
  • Session information
  • Authentication-related application state
  • Frequently accessed reference data
  • AI application results
  • Semantic-cache results
  • Embeddings and vectors

Azure Managed Redis supports data caching, session storage, messaging scenarios, and AI-oriented scenarios such as storing embeddings and implementing semantic caching.


2. The Cache-Aside Pattern

One of the most important caching patterns for the AI-200 exam is the cache-aside pattern, sometimes called lazy loading.

The application is responsible for checking Redis before querying the authoritative data source.

The basic process is:

1. Application receives request
|
v
2. Look for data in Redis
|
+--+--+
| |
Hit Miss
| |
v v
Return Query
data database
|
v
Store result
in Redis
|
v
Return result

Cache hit

A cache hit occurs when the requested data is already in Redis.

Application → Redis → Data returned

The database does not need to be queried.

Cache miss

A cache miss occurs when the requested data isn’t present in Redis.

The application:

  1. Queries the authoritative database.
  2. Receives the result.
  3. Stores the result in Redis.
  4. Returns the result to the caller.

This pattern allows the cache to populate naturally based on actual application usage.

Conceptual pseudocode

value = Redis.GET(key)
IF value exists:
return value
value = Database.Query(...)
Redis.SET(key, value, expiration)
return value

The important principle is that Redis is populated when the application needs the data, rather than loading the entire database into memory.


3. Why Cache-Aside Is Particularly Useful

Suppose an application has one million customer records but only 20,000 customers access the application regularly.

Loading all one million records into Redis may waste memory.

With cache-aside:

  • Frequently accessed records enter the cache.
  • Infrequently accessed records remain in the database.
  • Expired records can be removed.
  • Redis memory is focused on valuable data.

This makes the cache more efficient.

Azure’s guidance specifically identifies cache-aside as a common data-cache pattern in which data is loaded into the cache only when needed.


4. Redis Key-Value Operations

At its simplest, Redis stores data using keys and values.

For example:

Key:
customer:12345
Value:
{"id":12345,"name":"Norm","tier":"Gold"}

The application can retrieve the value using the key.

Conceptually:

SET customer:12345 {...}
GET customer:12345

A good Redis key should:

  • Be unique within the application’s namespace
  • Be predictable
  • Be easy to construct
  • Identify the cached resource clearly
  • Avoid unnecessary length
  • Avoid collisions between unrelated data

A useful naming convention might be:

customer:12345
product:9876
order:54321
embedding:document:123

For larger applications, namespaces can make keys easier to manage:

customer:profile:12345
product:details:9876
ai:response:abc123

5. Choosing Redis Data Structures

Redis supports more than simple strings.

Common data structures include:

Data StructureTypical Use
StringSimple values, JSON, counters
HashObjects with multiple fields
ListOrdered collections or queues
SetUnique unordered values
Sorted SetRanked or scored collections
StreamEvent/message processing
Vector-related structuresAI embeddings and similarity scenarios

For ordinary application caching, strings and hashes are particularly common.

For example, a customer object might be stored as a JSON string:

customer:12345
|
+-- {"id":12345,"name":"Norm","status":"Active"}

Alternatively, a Redis hash could store individual fields:

customer:12345
name → Norm
status → Active
tier → Gold

The appropriate choice depends on how the application reads and updates the data.


6. Cache Expiration

Caching introduces an important problem:

What happens when the cached value becomes stale?

Redis provides key expiration, also called a time-to-live or TTL.

For example:

customer:12345
TTL = 300 seconds

After the expiration period passes, Redis automatically removes the key.

Azure Managed Redis supports setting timeouts on keys, and expired keys are automatically removed when their configured timeout passes.


7. Why Expiration Matters

Consider an application that caches weather information.

Suppose:

weather:orlando
TTL = 5 minutes

If the weather changes, the cached information should eventually disappear so that a subsequent request retrieves fresh information.

Without expiration, stale data could remain indefinitely.

Expiration therefore provides a simple mechanism for balancing:

  • Performance
  • Memory usage
  • Data freshness

8. Choosing an Appropriate TTL

The correct TTL depends on how quickly the underlying data changes.

Short TTL

Use a short expiration time when data changes frequently.

Examples:

stock price → seconds
real-time availability → seconds/minutes
weather → minutes

Medium TTL

Useful for data that changes periodically.

Examples:

product catalog → minutes/hours
exchange rates → minutes
application configuration → minutes

Long TTL

Useful for relatively stable data.

Examples:

reference data → hours
static metadata → hours/days

There is no universally correct TTL.

The developer should consider:

  • How frequently the source data changes
  • How stale the application can tolerate the data being
  • How expensive the source query is
  • How much Redis memory is available
  • How frequently the cached value is requested

9. Expiration Versus Deletion

Expiration and explicit deletion are related but different.

Expiration

The application specifies a timeout.

SET product:123 value
EXPIRE product:123 300

Redis eventually removes the key automatically.

Explicit deletion

The application deliberately removes the key.

Conceptually:

DEL product:123

This is useful when the underlying data changes and the application knows that the cached copy is no longer valid.

Azure Managed Redis identifies expiration, eviction, and explicit deletion as distinct reasons that cached keys can disappear.


10. Cache Invalidation

Cache invalidation means removing or updating cached data when it is no longer valid.

A classic example is updating a customer record.

Suppose the database contains:

Customer 123
Status = Active

Redis contains:

customer:123
Status = Active

The application changes the database:

Status = Suspended

If Redis still contains the old value, the application could continue returning:

Status = Active

The cache is now stale.

The application therefore needs an invalidation strategy.


11. Common Cache Invalidation Strategies

There are several common approaches.

Strategy 1: Delete the cache entry

After changing the authoritative database:

UPDATE database
DEL customer:123

The next request becomes a cache miss.

The application retrieves the current value from the database and repopulates Redis.

This is often a simple and effective approach.


Strategy 2: Update the cache

Instead of deleting the cache entry, the application updates Redis with the new value.

UPDATE database
SET customer:123 = new value

The advantage is that subsequent requests can immediately use the updated cache.

The disadvantage is that the application must carefully keep the database and cache synchronized.


Strategy 3: Rely on expiration

The application allows the cached value to expire naturally.

This is simpler but potentially allows stale data to remain available until the TTL expires.

For example:

TTL = 10 minutes

A database update occurring immediately after the cache was populated could result in stale data being served for almost 10 minutes.

Therefore, expiration alone may not be sufficient when data freshness is important.


12. Combining Invalidation and Expiration

A strong caching strategy often combines explicit invalidation with TTL.

For example:

Cache customer data
TTL = 30 minutes

When the customer changes:

UPDATE database
DELETE Redis key

The TTL provides protection against stale data if the invalidation process fails, while explicit invalidation removes known-stale data immediately.

This gives the application two levels of protection:

Normal update
|
v
Explicit invalidation
|
v
Immediate freshness
Unexpected missed invalidation
|
v
TTL expiration
|
v
Eventual freshness

This is an important architectural pattern to recognize in exam scenarios.


13. Cache Invalidation and the Source of Truth

A fundamental rule is:

The cache should generally not become the authoritative source of application data.

For example:

Azure Database for PostgreSQL
|
| authoritative data
v
Azure Managed Redis
|
| cached copy
v
Application

If Redis is lost, the application should be capable of rebuilding its cache from the authoritative data source.

Azure Managed Redis is designed primarily as a cache and temporary data store rather than a primary database.


14. Handling Cache Misses

Applications must always be designed to handle cache misses.

A cache miss is not necessarily an error.

It is an expected condition.

A typical workflow is:

GET key
|
+-- Found → return value
|
+-- Not found
|
v
Query database
|
v
Store in Redis
|
v
Return value

A well-designed application should therefore never assume:

“If the value isn’t in Redis, something is broken.”

Instead:

“If the value isn’t in Redis, retrieve it from the authoritative source.”


15. Cache Stampede

A cache stampede occurs when a frequently accessed cache entry expires and many requests simultaneously attempt to rebuild it.

For example:

Popular key expires
|
+-- Request 1 → Database
+-- Request 2 → Database
+-- Request 3 → Database
+-- Request 4 → Database
+-- ...
+-- Request 10,000 → Database

The cache was supposed to reduce database traffic, but expiration temporarily creates a massive burst of database requests.

Potential strategies include:

  • Staggering expiration times
  • Using appropriate TTLs
  • Refreshing hot data before expiration
  • Coordinating cache regeneration
  • Using locking or request coalescing techniques
  • Using a background refresh strategy

The exact implementation depends on application requirements.


16. Avoiding the “Thundering Herd”

A related problem is the thundering herd effect.

Suppose thousands of requests need the same data and the cache expires.

If every request independently queries the database, the backend can become overloaded.

A common mitigation is to allow one process to refresh the data while other requests wait briefly or use the previous value where appropriate.

Conceptually:

                Cache miss
                    |
            +-------+-------+
            |               |
        First request    Other requests
            |               |
        Refresh cache    Wait/use fallback
            |
            v
        New cached value

The goal is to prevent thousands of identical backend queries.


17. Cache-Aside Write Pattern

There are multiple ways to handle writes with a cache-aside architecture.

One common approach is:

1. Update database
2. Delete corresponding Redis key

For example:

UPDATE products
SET price = 25.00
WHERE product_id = 100;
DEL product:100;

The next read retrieves the new database value and caches it.

This pattern is attractive because the database remains the source of truth.


18. Why Delete-After-Write Is Often Safer Than Cache-First Updates

Consider:

Application
|
+--> Redis
|
+--> Database

If the application updates Redis first and the database update subsequently fails, the cache could contain a value that doesn’t exist in the database.

By updating the authoritative store first and invalidating the cache afterward, the application reduces this risk.

A typical sequence is:

Database update
|
v
Cache invalidation
|
v
Next request repopulates cache

The exact transaction and failure-handling strategy should be designed according to the application’s consistency requirements.


19. Expiration Does Not Mean Eviction

This is an important exam distinction.

Expiration

A key reaches its configured TTL.

TTL reaches zero
↓
Key expires

Eviction

Redis needs to free memory and removes keys according to its configured memory/eviction behavior.

Memory pressure
↓
Eviction policy
↓
Keys removed

Explicit deletion

The application deliberately removes a key.

DEL key
↓
Key removed

These are three different mechanisms.

Azure Managed Redis documentation identifies expiration, eviction, and explicit deletion as separate causes of keys disappearing from the cache.


20. Eviction and Memory Pressure

Redis is an in-memory service, so memory management is critical.

If the cache approaches its memory capacity, Redis can remove keys according to its configured eviction behavior.

Therefore, an application should not interpret every missing key as an expiration event.

Possible causes include:

  1. TTL expiration
  2. Memory eviction
  3. Explicit deletion
  4. Cache flushing
  5. Failover/replication behavior
  6. Other infrastructure-related events

Monitoring cache metrics can help distinguish these scenarios.


21. Key Naming Best Practices

A good key strategy makes a Redis implementation easier to maintain.

Consider:

customer:12345

instead of:

12345

The first provides context.

For a larger application:

customer:profile:12345
customer:orders:12345
customer:preferences:12345

This makes it easier to understand what each key represents.

Avoid unnecessarily large keys because Redis is optimized for high-performance operations and memory usage matters.


22. Avoid Storing Excessively Large Values

Redis is designed for fast in-memory access.

Large values can:

  • Consume significant memory
  • Increase network traffic
  • Increase serialization/deserialization costs
  • Increase latency
  • Reduce cache efficiency

For example, rather than caching a massive database object containing thousands of unnecessary fields, cache only the information needed by the application.

A useful principle is:

Cache what the application needs, not everything the database can provide.

Azure’s current guidance also recommends avoiding unnecessarily large Redis values because smaller values generally provide better performance characteristics.


23. Connection Management

Applications should avoid creating a new Redis connection for every request.

For example, this is generally a poor pattern:

Request 1 → Create connection → Redis → Close
Request 2 → Create connection → Redis → Close
Request 3 → Create connection → Redis → Close

Instead, applications should generally use a long-lived connection/client that can be reused across requests.

For .NET applications using StackExchange.Redis, Microsoft recommends a single long-lived ConnectionMultiplexer rather than creating a new connection for each request.

This reduces:

  • Connection overhead
  • Resource consumption
  • Latency
  • Connection churn

24. Connection Resilience

Applications should also assume that Redis connections can occasionally experience interruptions because of:

  • Maintenance
  • Failover
  • Network problems
  • Infrastructure events

The application should be designed to reconnect and handle transient failures appropriately.

For example:

Application
|
v
Redis connection
|
failure
|
v
Reconnect
|
v
Continue processing

For a cache, a Redis outage should ideally degrade application performance rather than completely destroy application functionality.

The application can fall back to the authoritative database when appropriate.


25. Redis as a Performance Layer

A useful way to conceptualize Azure Managed Redis is as a performance layer:

                +----------------+
                |   Application  |
                +-------+--------+
                        |
                        v
                +---------------+
                | Azure Managed |
                |     Redis     |
                +-------+-------+
                        |
                  Cache miss
                        |
                        v
                +---------------+
                |   Database    |
                +---------------+

The application gets:

  • Fast reads from Redis
  • Durable storage from the database
  • Reduced database workload
  • Better scalability

This separation is central to effective caching architecture.


26. Caching AI Application Data

Azure Managed Redis is particularly relevant to AI applications.

Possible cached information includes:

  • Embeddings
  • Frequently retrieved documents
  • AI-generated responses
  • Prompt-related information
  • Semantic-cache entries
  • User session state
  • Frequently accessed metadata

For example, a semantic cache might store:

Question:
"What is our vacation policy?"
Embedding / semantic representation
|
v
Redis
|
v
Previously generated answer

If another request is sufficiently similar, the application may reuse an existing result rather than repeatedly invoking an AI model.

This can reduce:

  • Model calls
  • Latency
  • Cost
  • Backend processing

Azure Managed Redis specifically supports AI scenarios such as vector storage and semantic caching.


27. Caching Versus Persistent Storage

A common exam trap is assuming that Redis should replace the database.

Generally:

RequirementBetter Choice
Authoritative relational dataPostgreSQL
Durable transactional dataPostgreSQL
Large persistent document storeCosmos DB or other durable storage
Frequently accessed temporary dataRedis
Session stateRedis
Short-lived application cacheRedis
Semantic cacheRedis
Embedding/vector workloadsRedis or specialized vector-capable data service

Redis should generally complement rather than replace the authoritative data store.


28. Cache Invalidation Strategies Compared

StrategyAdvantageDisadvantage
TTL expirationSimpleData can remain stale until TTL expires
Explicit deletionImmediate invalidationApplication must know when data changes
Update cacheFresh cache immediatelyMore synchronization complexity
TTL + deletionStrong balanceRequires both mechanisms
Background refreshGood for hot dataMore application complexity

For many applications, TTL plus explicit invalidation is an effective design.


29. Common Exam Scenario

Suppose an application retrieves product information from Azure Database for PostgreSQL.

The application receives thousands of requests for the same product.

The best architecture is:

Request
|
v
Redis GET product:123
|
+---- Hit ----> Return cached product
|
+---- Miss
|
v
Query PostgreSQL
|
v
Store in Redis with TTL
|
v
Return

When the product changes:

Update PostgreSQL
|
v
Delete product:123 from Redis

The next request retrieves the current value and repopulates the cache.

This is a classic cache-aside implementation.


30. Common Mistakes to Avoid

Mistake 1: Treating Redis as the primary database

Redis should generally be treated as a cache or temporary store, not the authoritative system of record.

Mistake 2: Never setting expiration

Without expiration, stale data can remain indefinitely and memory consumption can increase.

Mistake 3: Relying only on expiration

If freshness is important, explicit invalidation may be necessary.

Mistake 4: Confusing expiration with eviction

Expiration happens because a TTL expires.

Eviction happens because Redis needs memory and removes keys according to its configured policy.

Mistake 5: Creating a connection for every request

Reuse long-lived Redis connections/clients.

Mistake 6: Caching enormous objects

Large values increase memory and network costs.

Mistake 7: Ignoring cache misses

A cache miss should be an expected application path.

Mistake 8: Updating the cache without considering database consistency

The authoritative data store and cache must be handled carefully during writes.

Mistake 9: Assuming cached data is permanent

Redis is an in-memory service. Applications should be designed to tolerate cache loss and rebuild cached information when necessary.


31. AI-200 Exam Takeaways

For the AI-200 exam, remember these core concepts:

Cache-aside

Check Redis → if miss, retrieve from database → store in Redis → return data.

Expiration

A TTL automatically removes a key after the configured timeout.

Invalidation

Explicitly remove or update cached data when the authoritative data changes.

Eviction

Redis removes keys because of memory pressure according to its configured eviction behavior.

Source of truth

Keep authoritative data in a durable backend.

Connection management

Reuse long-lived Redis client connections rather than creating connections for every request.

Performance

Keep cached values reasonably small and avoid unnecessarily expensive Redis operations.

Resilience

Design the application to tolerate Redis connection failures and cache misses.

AI scenarios

Redis can support semantic caching, embedding/vector storage, session state, and other high-performance AI application patterns.


Practice Exam Questions

Question 1

An application retrieves product information from Azure Database for PostgreSQL. The same products are requested thousands of times per minute. The developer wants to reduce database load while keeping PostgreSQL as the authoritative data source.

Which approach should the developer implement?

A. Store all PostgreSQL tables permanently in Redis and stop using PostgreSQL for reads.

B. Use a cache-aside pattern in which the application checks Redis first and retrieves data from PostgreSQL on a cache miss.

C. Write every PostgreSQL transaction directly to Redis and use Redis as the primary database.

D. Query PostgreSQL for every request and use Redis only for logging.

Answer: B

Explanation:
The cache-aside pattern checks Redis first. On a cache miss, the application queries PostgreSQL, stores the result in Redis, and returns it. PostgreSQL remains the authoritative data source. This reduces repeated database queries while preserving the database as the system of record.


Question 2

An application caches weather information in Azure Managed Redis. Weather information should never remain in the cache for more than five minutes.

What should the developer configure?

A. A Redis key expiration of five minutes.

B. A five-minute Redis connection timeout.

C. A five-minute eviction policy.

D. A five-minute database transaction timeout.

Answer: A

Explanation:
Key expiration uses a TTL to automatically remove a key after a specified period. A five-minute TTL ensures the cached weather information does not remain cached beyond the configured lifetime. Expiration is different from eviction, which occurs because of memory pressure.


Question 3

A customer record is stored in both PostgreSQL and Redis. The customer updates their address. The application successfully updates PostgreSQL but the old address remains in Redis.

What is the best way to ensure the next read retrieves the current address?

A. Increase the Redis memory allocation.

B. Restart the Redis instance.

C. Delete the cached customer key after successfully updating PostgreSQL.

D. Disable Redis expiration.

Answer: C

Explanation:
Deleting the cached key explicitly invalidates the stale value. The next request causes a cache miss, retrieves the current customer record from PostgreSQL, and can repopulate Redis.


Question 4

A developer notices that Redis keys are disappearing before their expected TTL values are reached. The Redis instance is experiencing high memory utilization.

What is the most likely explanation?

A. PostgreSQL automatically deleted the Redis keys.

B. The Redis connection expired.

C. The application’s DNS record changed.

D. Redis evicted keys because of memory pressure.

Answer: D

Explanation:
Expiration and eviction are different. A key can be removed because its TTL expires, but Redis can also remove keys when memory pressure requires space to be reclaimed according to the configured eviction behavior.


Question 5

A web application creates a new Redis connection every time an HTTP request needs to retrieve cached data.

What should the developer generally do instead?

A. Use a single long-lived Redis client/connection that can be reused across requests.

B. Create two Redis connections for every request to provide redundancy.

C. Disable connection reuse so that every request receives a fresh connection.

D. Store Redis connection objects in every cached value.

Answer: A

Explanation:
Creating connections repeatedly introduces unnecessary overhead and connection churn. Redis applications should generally reuse long-lived client connections. For example, .NET applications using StackExchange.Redis commonly use a shared, long-lived ConnectionMultiplexer.


Question 6

A developer wants cached customer information to remain available for up to one hour but also wants changes to a customer record to become visible immediately.

Which strategy is most appropriate?

A. Use a one-hour TTL and never invalidate the cache.

B. Disable expiration and update Redis once per day.

C. Use a one-hour TTL and explicitly invalidate the customer’s cache entry when the database record changes.

D. Store the customer only in Redis and remove the PostgreSQL record.

Answer: C

Explanation:
Combining TTL with explicit invalidation provides two layers of protection. Explicit invalidation removes known-stale data immediately, while the TTL prevents an entry from remaining cached indefinitely if an invalidation event is missed.


Question 7

Thousands of users request the same product. The product’s Redis entry expires at nearly the same time, causing thousands of requests to query PostgreSQL simultaneously.

What problem does this scenario represent?

A. Cache encryption failure.

B. Cache stampede or thundering herd.

C. Redis key collision.

D. Database normalization.

Answer: B

Explanation:
A cache stampede occurs when a popular cached item expires and many requests simultaneously attempt to rebuild the cache. This can overwhelm the backend database. Techniques such as request coordination, locking, staggered expiration, and background refresh can reduce the problem.


Question 8

An application stores the following information in Redis:

customer:12345
customer:12346
customer:12347

What is the primary benefit of this naming convention?

A. It automatically encrypts the values.

B. It prevents Redis from expiring the keys.

C. It increases the Redis memory limit.

D. It provides a predictable namespace that identifies the type and identity of the cached resource.

Answer: D

Explanation:
A structured naming convention makes keys predictable, understandable, and easier to manage. Prefixes such as customer: distinguish customer records from other application data.


Question 9

An AI application frequently receives semantically similar questions. Generating a response for every request requires an expensive model invocation.

How could Azure Managed Redis help?

A. Cache previously generated results or semantic representations so suitable requests can reuse existing results.

B. Replace the AI model with Redis commands.

C. Store all model training data exclusively in Redis.

D. Use Redis expiration to permanently store every model response.

Answer: A

Explanation:
Azure Managed Redis can support semantic caching and AI workloads. An application can cache suitable AI responses or related representations and reuse them when a later request is sufficiently similar. This can reduce model calls, latency, and cost.


Question 10

A developer is designing an application that uses Redis for caching. The developer wants the application to continue functioning if cached data disappears.

Which design is most appropriate?

A. Treat Redis as the only authoritative copy of the data.

B. Disable all Redis expiration and eviction mechanisms.

C. Keep authoritative data in a durable database and design the application to repopulate Redis after cache misses.

D. Write all application data to Redis and periodically delete the database.

Answer: C

Explanation:
A resilient caching architecture treats Redis as a performance layer rather than the authoritative data store. If a cached item disappears because of expiration, eviction, deletion, or another event, the application can retrieve the authoritative value from the durable database and repopulate the cache.


Final Study Summary

For the AI-200 exam, the most important distinction is between the authoritative data store and the cache.

A typical architecture is:

                    Application
                         |
                         v
                 Azure Managed Redis
                    /           \
                 Hit             Miss
                  |                |
                  v                v
              Return          Query database
                                 |
                                 v
                           Populate Redis
                                 |
                                 v
                              Return

When data changes:

Update authoritative database
|
v
Invalidate Redis entry
|
v
Next request repopulates cache

And when a TTL expires:

TTL reaches zero
|
v
Key expires
|
v
Next request causes cache miss
|
v
Retrieve fresh data

Keep these concepts distinct:

ConceptMeaning
Cache hitRequested data exists in Redis
Cache missRequested data isn’t in Redis
TTLAmount of time a key is allowed to remain cached
ExpirationAutomatic removal after TTL expires
InvalidationApplication-driven removal/update of stale data
EvictionRemoval caused by memory pressure and eviction policy
Cache-asideApplication checks cache, then authoritative store on a miss
Cache stampedeMany requests rebuild an expired cache entry simultaneously
Source of truthDurable system containing authoritative data
Semantic cacheCache that can reuse results for sufficiently similar AI requests

The exam-ready mental model is simple:

Cache for speed, expire for freshness, invalidate when you know data changed, and keep the database as the source of truth.


Go to the AI-200 Exam Prep Hub main page

Connect to Azure Cosmos DB for NoSQL by using the SDK and run queries (AI-200 Exam Prep)

This post is a part of the AI-200: Developing AI Cloud Solutions on Azure  Exam Prep Hub.
This topic falls under these sections:
Develop AI solutions by using Azure data management services (25–30%)
   --> Develop AI solutions by using Azure Cosmos DB for NoSQL
      --> Connect to Azure Cosmos DB for NoSQL by using the SDK and run queries


Note that there are 10 practice questions (with answers) at the end of each section to help you solidify your knowledge of the material. Also, there are 4 practice tests with 30 questions each available from the hub's main page below the exam topics section.

Overview

Azure Cosmos DB for NoSQL is a globally distributed, fully managed NoSQL database service designed for applications that require flexible schemas, low-latency access, and elastic scalability.

For the AI-200 exam, developers should understand how to:

  • Connect applications to Azure Cosmos DB for NoSQL.
  • Use the Azure Cosmos DB SDK.
  • Authenticate securely.
  • Create and access databases and containers.
  • Define partition keys.
  • Insert, read, update, and delete items.
  • Construct SQL queries for Cosmos DB.
  • Execute queries through the SDK.
  • Work with query parameters.
  • Understand partition-aware querying.
  • Process query results efficiently.
  • Recognize common performance considerations.

The key concept is that Azure Cosmos DB for NoSQL exposes a SQL-like query language, while the SDK provides the programming interface through which an application connects to the service and executes those queries.


1. Understanding the Azure Cosmos DB for NoSQL Data Model

Before connecting with an SDK, it is important to understand the hierarchy used by Azure Cosmos DB.

The basic structure is:

Cosmos DB account → Database → Container → Item

Cosmos DB account

The account is the top-level Azure resource. It provides the endpoint through which applications communicate with Cosmos DB.

An account contains one or more databases.

Database

A database provides a logical grouping of containers.

For example:

AI200CosmosAccount
└── CustomerDatabase

Container

A container is where items are stored.

A container is roughly analogous to a table in a relational database, although it is much more flexible because Cosmos DB items can have different structures.

CustomerDatabase
├── Customers
├── Orders
└── Products

A container also defines the partition key path, which is extremely important for scalability and query performance.

Item

An item is a JSON document.

For example:

{
"id": "customer-1001",
"customerName": "John Smith",
"country": "US",
"email": "john@example.com",
"loyaltyLevel": "Gold"
}

Unlike a relational table, another item in the same container could contain additional properties.


2. Connecting to Azure Cosmos DB

An application needs two primary pieces of information to connect to a Cosmos DB account:

  1. The Cosmos DB account endpoint.
  2. A supported authentication mechanism.

A typical endpoint looks conceptually like:

https://<account-name>.documents.azure.com:443/

The SDK uses this endpoint to communicate with the Cosmos DB service.


3. Authentication

Authentication is an important exam topic because applications should avoid embedding long-lived credentials directly in source code.

Several authentication approaches are available, including:

  • Microsoft Entra ID-based authentication.
  • Managed identities.
  • Account keys.
  • Connection strings.

For production Azure applications, Microsoft Entra ID with managed identity is generally preferable when supported by the application’s architecture because credentials do not need to be stored in application configuration or source code.

For example, an application running on an Azure service can use its managed identity to authenticate to Cosmos DB.

The conceptual flow is:

Application
│
│ Managed identity
▼
Microsoft Entra ID
│
│ Token
▼
Azure Cosmos DB

Exam point

If a question asks for the most secure way for an Azure-hosted application to authenticate to Cosmos DB without storing credentials, look for an answer involving:

Microsoft Entra ID + managed identity + appropriate Cosmos DB data-plane permissions.


4. Using the Azure Cosmos DB SDK

Microsoft provides SDKs for several programming languages, including:

  • .NET
  • Java
  • JavaScript/TypeScript
  • Python

The SDK provides classes and methods for interacting with Cosmos DB.

For example, a .NET application can use the Azure Cosmos DB SDK package.

A simplified connection looks like:

var client = new CosmosClient(
endpoint,
credential);

The CosmosClient represents the client connection to the Cosmos DB account.

Applications can then access databases and containers through the client.

Conceptually:

CosmosClient
│
└── Database
│
└── Container
│
├── Create item
├── Read item
├── Replace item
├── Delete item
└── Query items

5. Reuse the CosmosClient

A common application-design mistake is creating a new CosmosClient for every database operation.

Instead, applications should generally create and reuse a single CosmosClient instance for the lifetime of the application.

For example:

private static CosmosClient client = new CosmosClient(
endpoint,
credential);

The SDK manages connections internally.

Creating clients repeatedly can cause unnecessary connection overhead and negatively affect performance.

Exam tip

If a question presents code that creates a new CosmosClient for every request, consider whether the question is testing your knowledge of client reuse.

Reuse the client rather than repeatedly creating new instances.


6. Accessing a Database

Once the client has been created, the application can obtain a reference to a database.

For example:

Database database = client.GetDatabase("CustomerDatabase");

This does not necessarily mean that the database has been created.

It obtains a client-side reference to the database.

If the database needs to be created, the SDK provides methods such as:

DatabaseResponse response =
await client.CreateDatabaseIfNotExistsAsync("CustomerDatabase");

The CreateIfNotExists pattern is useful when an application should create the resource only when necessary.


7. Accessing a Container

After obtaining a database reference, the application can access a container:

Container container =
database.GetContainer("Customers");

As with GetDatabase(), obtaining a container reference does not mean that the container has been created.

A container can be created when necessary:

ContainerResponse response =
await database.CreateContainerIfNotExistsAsync(
"Customers",
"/country");

The second parameter specifies the partition key path.

In this example:

/country

is the partition key path.


8. Partition Keys

Partitioning is fundamental to Cosmos DB.

A container distributes its items across physical partitions based on the configured partition key.

For example:

{
"id": "customer-1001",
"country": "US",
"name": "John Smith"
}

If /country is the partition key path, the value:

US

determines the logical partition to which the item belongs.

A good partition key should generally provide:

  • High cardinality.
  • Even distribution.
  • Sufficient request-volume distribution.
  • Values that match common access patterns.

Why this matters for queries

If a query includes the partition key value, Cosmos DB can often limit the query to the relevant partition rather than querying every partition.

This is called a single-partition query or targeted query, depending on the scenario.

A query that does not provide a partition key value may require a cross-partition query.


9. Creating Items

Items are JSON documents.

A .NET application can create an item using the SDK:

var customer = new
{
id = "customer-1001",
country = "US",
name = "John Smith",
loyaltyLevel = "Gold"
};
ItemResponse<dynamic> response =
await container.CreateItemAsync(
customer,
new PartitionKey("US"));

The partition key value supplied to the SDK should correspond to the item’s partition key.

For a container partitioned on:

/country

the request should specify:

new PartitionKey("US")

10. Reading an Item

When the application’s partition key and item ID are known, the SDK can directly retrieve an item.

For example:

ItemResponse<Customer> response =
await container.ReadItemAsync<Customer>(
"customer-1001",
new PartitionKey("US"));

This is generally much more efficient than querying for the item because Cosmos DB can directly address the item using its ID and partition key.

Important distinction

Consider these two operations:

ReadItem(id, partitionKey)

versus:

SELECT * FROM c WHERE c.id = "customer-1001"

The point read supplies both the item ID and partition key and is the preferred operation when those values are known.

Exam tip

If a question asks how to retrieve one known item as efficiently as possible, look for:

Point read using the item’s ID and partition key.


11. Updating Items

The SDK supports updating existing items.

Depending on the required behavior, developers can use operations such as:

  • Replace
  • Upsert
  • Patch

Replace

Replace generally replaces the entire item.

Upsert

Upsert means:

Update the item if it exists; otherwise create it.

For example:

await container.UpsertItemAsync(
customer,
new PartitionKey("US"));

Patch

Patch modifies selected properties without requiring the application to replace the entire document.

For example, an application might update only:

loyaltyLevel

rather than sending the entire customer document.

This can reduce the amount of data transmitted and simplify partial updates.


12. Deleting Items

An item can be deleted using its ID and partition key:

await container.DeleteItemAsync<Customer>(
"customer-1001",
new PartitionKey("US"));

Again, knowing both the ID and partition key allows Cosmos DB to directly identify the item.


13. Querying Azure Cosmos DB for NoSQL

Cosmos DB for NoSQL uses a SQL-like query language.

A simple query is:

SELECT * FROM c

The c represents each item being queried.

For example:

SELECT *
FROM c
WHERE c.country = "US"

This returns items whose country property is US.


14. Selecting Specific Properties

Applications don’t always need the entire document.

Instead of:

SELECT *
FROM c

you can select specific properties:

SELECT
c.id,
c.name,
c.email
FROM c

This can reduce the amount of data returned to the application.

It can also make the application’s intent clearer.


15. Filtering Results

The WHERE clause filters documents.

For example:

SELECT *
FROM c
WHERE c.loyaltyLevel = "Gold"

Multiple conditions can be combined:

SELECT *
FROM c
WHERE c.country = "US"
AND c.loyaltyLevel = "Gold"

Other operators include:

=
!=
<
>
<=
>=
AND
OR

16. Parameterized Queries

Applications should avoid constructing queries by concatenating user input into SQL strings.

For example, this pattern should be avoided:

string query =
"SELECT * FROM c WHERE c.name = '" + userName + "'";

Instead, use parameterized queries.

For example:

var query = new QueryDefinition(
"SELECT * FROM c WHERE c.name = @name")
.WithParameter("@name", userName);

This approach:

  • Separates query structure from values.
  • Helps prevent injection-style problems.
  • Makes query reuse easier.
  • Provides cleaner application code.

17. Executing a Query

The SDK provides query APIs that allow the application to execute a QueryDefinition.

For example:

var query = new QueryDefinition(
"SELECT * FROM c WHERE c.country = @country")
.WithParameter("@country", "US");
using FeedIterator<Customer> iterator =
container.GetItemQueryIterator<Customer>(query);
while (iterator.HasMoreResults)
{
FeedResponse<Customer> response =
await iterator.ReadNextAsync();
foreach (Customer customer in response)
{
Console.WriteLine(customer.name);
}
}

This demonstrates an important concept:

Cosmos DB queries can return results in multiple pages.


18. FeedIterator and Pagination

A query may return more data than can reasonably be delivered in one response.

The SDK therefore exposes query results through an iterator.

Conceptually:

Query
│
▼
Page 1
│
▼
Page 2
│
▼
Page 3
│
▼
...

The application checks:

iterator.HasMoreResults

and retrieves each page using:

await iterator.ReadNextAsync()

This is important for scalability.

Exam tip

If a question asks how to process a potentially large Cosmos DB query result set, look for an answer involving:

FeedIterator / paginated results rather than loading the entire result set into memory.


19. Cross-Partition Queries

Suppose a container uses:

/country

as its partition key.

A query such as:

SELECT *
FROM c
WHERE c.country = "US"

provides a partition key value.

This allows Cosmos DB to target the appropriate partition.

However, a query such as:

SELECT *
FROM c
WHERE c.loyaltyLevel = "Gold"

does not specify the partition key.

The service may therefore need to query multiple partitions.

This is a cross-partition query.

Cross-partition queries are not inherently wrong. They are sometimes necessary.

However, they can require more resources and incur higher request charges than targeted queries.


20. Supplying a Partition Key to a Query

The SDK can provide the partition key value separately from the query itself.

For example:

var query = new QueryDefinition(
"SELECT * FROM c WHERE c.loyaltyLevel = @level")
.WithParameter("@level", "Gold");
var requestOptions = new QueryRequestOptions
{
PartitionKey = new PartitionKey("US")
};
using FeedIterator<Customer> iterator =
container.GetItemQueryIterator<Customer>(
query,
requestOptions: requestOptions);

The application is effectively telling Cosmos DB:

Search only the US partition.

This can significantly improve query efficiency when the access pattern permits it.


21. Query Performance and Request Units

Azure Cosmos DB measures database operations using Request Units (RUs).

The RU charge depends on factors such as:

  • The operation being performed.
  • The amount of data processed.
  • The complexity of the query.
  • Indexing.
  • Number of partitions involved.
  • Number of documents examined.
  • Amount of data returned.

A query that scans many partitions can consume substantially more RUs than a targeted query.

Applications should therefore design queries and partition keys together.


22. Indexing

Cosmos DB automatically indexes properties by default in many common configurations.

Indexes help Cosmos DB efficiently locate matching documents.

However, indexing every property isn’t always optimal for every workload.

Applications with specialized workloads may need to configure indexing policies to balance:

  • Query performance.
  • Write performance.
  • Storage.
  • RU consumption.

For the AI-200 exam, understand the relationship:

More/appropriate indexing
↓
Efficient queries
↓
Potentially lower query cost

But indexing isn’t a substitute for good partition-key design.


23. Querying Arrays and Nested Properties

Cosmos DB documents can contain nested objects and arrays.

For example:

{
"id": "1001",
"customer": {
"name": "John",
"country": "US"
},
"orders": [
{
"id": "O100",
"total": 125
},
{
"id": "O101",
"total": 200
}
]
}

A nested property can be accessed using dot notation:

SELECT c.customer.name
FROM c

Cosmos DB also supports array operations.

For example, the ARRAY_CONTAINS function can determine whether an array contains a particular value.

The ability to query nested JSON is one of the significant advantages of the NoSQL model.


24. Query Functions

Azure Cosmos DB for NoSQL supports many built-in functions.

Examples include functions for:

  • Strings.
  • Arrays.
  • Mathematical calculations.
  • Date/time operations.
  • Type checking.
  • Spatial data.

For example:

SELECT *
FROM c
WHERE CONTAINS(c.name, "Smith")

Another example:

SELECT *
FROM c
WHERE ARRAY_CONTAINS(c.tags, "AI")

The important exam concept is not memorizing every function but understanding that Cosmos DB’s query language provides rich querying capabilities against JSON documents.


25. Querying With ORDER BY

Results can be sorted using ORDER BY.

For example:

SELECT
c.id,
c.name,
c.total
FROM c
ORDER BY c.total DESC

This returns the highest totals first.

Queries can also use OFFSET and LIMIT patterns for controlled result sets.


26. Querying With Aggregates

Cosmos DB supports aggregate functions such as:

COUNT
SUM
AVG
MIN
MAX

For example:

SELECT VALUE COUNT(1)
FROM c
WHERE c.country = "US"

The VALUE keyword is useful when the desired result is the scalar value rather than an object containing a property.


27. Querying With SELECT VALUE

Consider:

SELECT c.name
FROM c

This returns objects such as:

{
"name": "John"
}

Using:

SELECT VALUE c.name
FROM c

returns the values directly:

"John"
"Mary"
"Robert"

This distinction can appear in exam questions.


28. Querying With Continuation Tokens

Cosmos DB can return a continuation token when a query result spans multiple pages.

The application can use the continuation token to continue retrieving results.

This is particularly useful for:

  • Large result sets.
  • Pagination.
  • Resuming queries.
  • Avoiding the need to retrieve everything at once.

The SDK’s iterator abstraction commonly handles this pagination process for the application.


29. Point Reads vs. Queries

One of the most important distinctions to understand is:

RequirementPreferred operation
Retrieve a known item by ID and partition keyPoint read
Find items matching conditionsQuery
Retrieve multiple items from a partitionQuery
Modify one known itemReplace/Patch
Create or update an itemUpsert
Remove one known itemDelete

Example

If you know:

id = customer-1001
country = US

use:

ReadItem(id, partitionKey)

rather than:

SELECT * FROM c WHERE c.id = "customer-1001"

The point read is designed specifically for this scenario.


30. Common Exam Traps

Trap 1: Confusing the database with the container

A database contains containers.

A container contains items.


Trap 2: Treating Cosmos DB like a relational database

Cosmos DB for NoSQL stores JSON documents and uses containers rather than relational tables.


Trap 3: Forgetting the partition key

The partition key is central to Cosmos DB scalability and query performance.


Trap 4: Using a query for a known item

If both the item ID and partition key are known, use a point read.


Trap 5: Creating a CosmosClient for every request

The client should generally be reused.


Trap 6: Building queries with string concatenation

Use parameterized queries with QueryDefinition.


Trap 7: Assuming every query is single-partition

A query that doesn’t target a partition may become a cross-partition query.


Trap 8: Loading all results into memory

Use the SDK’s iterator/pagination model to process potentially large result sets incrementally.


31. AI-200 Exam Takeaways

For this topic, make sure you can explain the following without referring to documentation:

  1. Cosmos DB hierarchy
    • Account → Database → Container → Item.
  2. CosmosClient
    • Establishes the SDK connection to the Cosmos DB account.
    • Should generally be reused.
  3. Authentication
    • Understand account keys versus Microsoft Entra ID and managed identity.
  4. Partition keys
    • Determine logical data distribution.
    • Are critical to scalability and query performance.
  5. Point reads
    • Use item ID + partition key when both are known.
  6. Queries
    • Use Cosmos DB’s SQL-like query language.
  7. Parameterized queries
    • Use QueryDefinition and parameters rather than string concatenation.
  8. Cross-partition queries
    • Can occur when a query isn’t targeted to a specific partition.
  9. FeedIterator
    • Used to process paginated query results.
  10. Request Units
    • Measure Cosmos DB resource consumption.
  11. Indexing
    • Supports efficient queries and can affect RU consumption.
  12. CRUD operations
    • Create, read, update, upsert, patch, and delete items through the SDK.

Practice Exam Questions

Question 1

An application running in Azure needs to connect to Azure Cosmos DB for NoSQL. The organization requires that no database credentials be stored in application configuration.

Which authentication approach should the developer prefer?

A. Store the Cosmos DB account key in the application’s source code.

B. Store the Cosmos DB connection string in an environment variable.

C. Use a managed identity with Microsoft Entra ID authentication and appropriate Cosmos DB permissions.

D. Create a new Cosmos DB account key whenever the application starts.

Answer: C

Explanation:
A managed identity allows an Azure-hosted application to authenticate without storing long-lived credentials in application code or configuration. The identity must have the appropriate permissions to access Cosmos DB. Hard-coded keys and connection strings introduce credential-management risks.


Question 2

A container uses /customerId as its partition key. An application needs to retrieve a specific item, and it already knows both the item’s id and customerId.

Which operation should the application use?

A. A point read using the item ID and partition key.

B. A cross-partition SQL query.

C. A query using ORDER BY.

D. A query using GROUP BY.

Answer: A

Explanation:
When the item ID and partition key are known, a point read is the appropriate operation. It directly addresses the item instead of executing a query across documents.


Question 3

A developer needs to allow users to search for customers by name. The name is supplied by the user at runtime.

Which approach should the developer use?

A. Concatenate the user input into the SQL string.

B. Encode the user’s input as Base64 and concatenate it into the SQL string.

C. Create a separate container for each possible customer name.

D. Use a parameterized QueryDefinition.

Answer: D

Explanation:
A parameterized query separates query structure from user-supplied values. The Cosmos DB SDK supports parameters through QueryDefinition.WithParameter(). This is preferable to dynamically concatenating user input into query strings.


Question 4

A Cosmos DB container is partitioned by /region. An application executes:

SELECT *
FROM c
WHERE c.productCategory = "AI"

The query does not specify a region.

What should the developer understand about this query?

A. It automatically becomes a point read.

B. It may require a cross-partition query.

C. It can only return one document.

D. Cosmos DB automatically changes the partition key for the query.

Answer: B

Explanation:
Because the query does not restrict the /region partition key, Cosmos DB may need to query multiple partitions. Cross-partition queries are supported, but they can consume more resources than targeted queries.


Question 5

An application executes a query that can return hundreds of thousands of documents. The developer wants to avoid loading all results into memory simultaneously.

Which SDK approach is most appropriate?

A. Use a FeedIterator and process the results page by page.

B. Convert the query into a point read.

C. Increase the item’s partition key value.

D. Retrieve the entire result set using a single string response.

Answer: A

Explanation:
Cosmos DB queries can return results in multiple pages. The SDK’s FeedIterator allows an application to retrieve and process each page incrementally, which is more appropriate for large result sets.


Question 6

An application repeatedly creates a new CosmosClient object every time it performs a database operation.

What should the developer do?

A. Create a new client for every item.

B. Create two clients for every request to provide redundancy.

C. Reuse a CosmosClient instance for the lifetime of the application.

D. Replace the SDK with direct HTTP calls for every operation.

Answer: C

Explanation:
CosmosClient is designed to be reused. Creating clients repeatedly introduces unnecessary connection-management overhead and can negatively affect application performance.


Question 7

A container uses /country as its partition key. An application frequently retrieves customers when both their customer ID and country are known.

Which design provides the most direct access to an individual customer?

A. Store all customers in a single partition.

B. Use a point read with the customer ID and country as the partition key value.

C. Run a cross-partition query for every customer.

D. Use ORDER BY country before retrieving the customer.

Answer: B

Explanation:
A point read using the item ID and partition key can directly locate an item. This is preferable to running a query when the application’s access pattern already provides both values.


Question 8

A developer wants to update only the status property of a large Cosmos DB document rather than replacing the entire document.

Which operation is most appropriate?

A. CreateItem

B. ReadItem

C. DeleteItem

D. Patch

Answer: D

Explanation:
Patch is designed for modifying specific properties or paths within an existing item without requiring the entire document to be replaced.


Question 9

A Cosmos DB application performs a query that searches across many physical partitions. The query consumes significantly more Request Units than a similar query that targets a single partition.

What is the most likely explanation?

A. Cross-partition queries can require work across multiple partitions.

B. Cosmos DB charges a fixed number of RUs for every query regardless of its scope.

C. Point reads always consume more RUs than cross-partition queries.

D. Partition keys have no relationship to query performance.

Answer: A

Explanation:
Queries that span multiple partitions may require Cosmos DB to perform work across those partitions, which can increase resource consumption. Designing partition keys around application access patterns can help reduce unnecessary cross-partition queries.


Question 10

A developer wants a query to return only customer names as scalar values instead of objects such as:

{
"name": "John Smith"
}

Which query should the developer use?

A.

SELECT *
FROM c

B.

SELECT c
FROM c

C.

SELECT VALUE c.name
FROM c

D.

SELECT OBJECT(c.name)
FROM c

Answer: C

Explanation:
SELECT VALUE returns the selected expression directly rather than wrapping it in a JSON object. Therefore:

SELECT VALUE c.name
FROM c

returns scalar values such as:

"John Smith"
"Mary Jones"

rather than objects containing a name property.


Final Exam Reminder

For AI-200, don’t think of Cosmos DB simply as “a NoSQL database that I can query.” Think about the relationship between data modeling, partitioning, SDK operations, queries, and performance.

The most important decision pattern is:

Know the item ID + partition key? → Point read.
Need to find items based on criteria? → Query.
Know the partition key? → Target the partition when possible.
Large result set? → Process pages with the SDK iterator.
User-supplied values? → Parameterize the query.
Azure-hosted application without stored credentials? → Prefer managed identity/Entra ID where supported.


Go to the AI-200 Exam Prep Hub main page

Practice Questions: Describe Azure Blob storage (DP-900 Exam Prep)

Practice Questions


Question 1

What type of data is best suited for Azure Blob Storage?

A. Highly structured relational data
B. Unstructured data such as images and videos
C. Data requiring complex joins
D. Transactional financial records

✅ Answer: B

Explanation:
Blob Storage is optimized for unstructured data like media files, documents, and logs.


Question 2

What is the correct hierarchy in Azure Blob Storage?

A. Blob → Container → Storage Account
B. Container → Blob → Storage Account
C. Storage Account → Container → Blob
D. Storage Account → Blob → Container

✅ Answer: C

Explanation:
The hierarchy is Storage Account → Container → Blob.


Question 3

Which type of blob is BEST suited for storing log files that are continuously appended?

A. Block blob
B. Page blob
C. Append blob
D. Archive blob

✅ Answer: C

Explanation:
Append blobs are optimized for append operations, such as logging.


Question 4

Which access tier is MOST cost-effective for data that is rarely accessed?

A. Hot
B. Cool
C. Archive
D. Premium

✅ Answer: C

Explanation:
The Archive tier is designed for rarely accessed data at the lowest cost.


Question 5

Which Blob Storage feature ensures data is replicated to improve durability?

A. Indexing
B. Data redundancy options
C. Query optimization
D. Schema enforcement

✅ Answer: B

Explanation:
Blob Storage uses redundancy options (e.g., LRS, GRS) to ensure durability.


Question 6

Which blob type is typically used for storing virtual machine disks?

A. Block blob
B. Append blob
C. Page blob
D. Archive blob

✅ Answer: C

Explanation:
Page blobs support random read/write operations and are used for VM disks.


Question 7

Which scenario is BEST suited for Azure Blob Storage?

A. Running complex SQL queries
B. Storing large volumes of images for a website
C. Managing transactional order data
D. Performing real-time analytics

✅ Answer: B

Explanation:
Blob Storage is ideal for storing large volumes of unstructured data like images.


Question 8

What is a container in Azure Blob Storage?

A. A type of blob
B. A virtual machine
C. A logical grouping of blobs
D. A database schema

✅ Answer: C

Explanation:
Containers are used to organize blobs, similar to folders.


Question 9

Which feature allows secure, temporary access to Blob Storage resources?

A. SQL authentication
B. Shared Access Signature (SAS)
C. Primary key constraint
D. Indexing

✅ Answer: B

Explanation:
SAS tokens provide secure, time-limited access to storage resources.


Question 10

Which statement best describes Azure Blob Storage?

A. It requires a predefined schema
B. It is used only for relational data
C. It is an object storage solution for unstructured data
D. It is a transactional database system

✅ Answer: C

Explanation:
Blob Storage is an object storage service designed for unstructured data.


✅ Quick Exam Takeaways

✔ Blob Storage = unstructured/object storage
✔ Structure:

  • Storage Account → Container → Blob

✔ Blob types:

  • Block → general files
  • Append → logs
  • Page → VM disks

✔ Access tiers:

  • Hot (frequent access)
  • Cool (infrequent)
  • Archive (rare)

✔ Key features:

  • Scalable
  • Durable (replication)
  • Secure (SAS, RBAC)
  • Cost-optimized

Go to the DP-900 Exam Prep Hub main page.

Identify Azure Database Services for open-source database systems (DP-900 Exam Prep)

This post is a part of the DP-900: Microsoft Azure Data Fundamentals Exam Prep Hub. 
This topic falls under these sections:
Identify considerations for relational data on Azure (20–25%)
--> Describe relational Azure data services
--> Identify Azure database services for open-source database systems


Note that there are 10 practice questions (with answers and explanations) for each section to help you solidify your knowledge of the material. Also, there are 2 practice tests with 60 questions each available on the hub below the exam topics section.

In addition to the Azure SQL family, Microsoft Azure provides fully managed database services for popular open-source relational database systems. These services allow organizations to run familiar technologies like PostgreSQL and MySQL in the cloud without managing infrastructure.

For the DP-900 exam, you should understand which services are available, what they support, and when to use them.


What Are Open-Source Database Systems?

Open-source database systems are relational databases whose source code is publicly available and widely used across industries.

Common examples include:

  • PostgreSQL
  • MySQL
  • MariaDB

These systems are known for flexibility, cost-effectiveness, and strong community support.


Azure Services for Open-Source Databases

Azure offers managed services for these databases, allowing you to run them in a Platform as a Service (PaaS) model.


1. Azure Database for PostgreSQL

Azure Database for PostgreSQL

A fully managed PostgreSQL database service.

Key Features

  • Automated backups and patching
  • Built-in high availability
  • Scaling options for compute and storage
  • Security features (encryption, network isolation)
  • Support for PostgreSQL extensions

Deployment Options

  • Flexible Server (most commonly used)

Use Cases

  • Web and mobile applications
  • Analytics workloads
  • Applications already using PostgreSQL

✔ Best for: PostgreSQL-based applications moving to Azure


2. Azure Database for MySQL

Azure Database for MySQL

A fully managed MySQL database service.

Key Features

  • Automated backups and patching
  • High availability options
  • Scaling for performance
  • Built-in security features
  • Compatible with popular MySQL tools

Use Cases

  • Web applications (e.g., LAMP stack)
  • E-commerce platforms
  • Content management systems

✔ Best for: Applications built on MySQL


3. Azure Database for MariaDB (Legacy Note)

Azure Database for MariaDB

  • Previously offered as a managed service
  • Now being retired (important exam awareness point)

💡 DP-900 Tip:
Know that MariaDB exists, but focus primarily on PostgreSQL and MySQL.


Key Characteristics of Azure Open-Source Database Services

These services share common benefits:

Platform as a Service (PaaS)

  • No infrastructure management
  • Azure handles patching, backups, and updates

High Availability

  • Built-in redundancy
  • Automatic failover options

Scalability

  • Scale compute and storage independently

Security

  • Encryption at rest and in transit
  • Network security (firewalls, private endpoints)

When to Use Open-Source Database Services in Azure

Choose these services when:

  • You are already using PostgreSQL or MySQL
  • You want to migrate existing applications with minimal changes
  • You prefer open-source technologies
  • You want a managed service without infrastructure overhead

Comparison with Azure SQL Family

FeatureAzure SQL ServicesOpen-Source Azure Services
Database EngineSQL ServerPostgreSQL / MySQL
LanguageT-SQLPostgreSQL SQL / MySQL SQL
Use CaseMicrosoft ecosystemOpen-source ecosystem
ManagementPaaS / IaaS optionsPrimarily PaaS

Why This Matters for DP-900

On the exam, you may be asked to:

  • Identify Azure services for PostgreSQL or MySQL
  • Choose the correct service for an open-source workload
  • Understand the benefits of managed database services
  • Compare Azure SQL vs open-source options

Summary — Exam-Relevant Takeaways

✔ Azure supports open-source relational databases:

  • Azure Database for PostgreSQL
  • Azure Database for MySQL

✔ These are PaaS services:

  • Azure manages infrastructure, backups, and patching

✔ Key benefits:

  • High availability
  • Scalability
  • Security

✔ Use them when:

  • Migrating existing open-source applications
  • Building apps using PostgreSQL or MySQL

✔ Be aware:

  • MariaDB support exists but is being phased out

Go to the Practice Exam Questions for this topic.

Go to the DP-900 Exam Prep Hub main page.

Practice Questions: Identify Azure Database Services for open-source database systems (DP-900 Exam Prep)

Practice Questions


Question 1

Which Azure service is used to host a managed PostgreSQL database?

A. Azure SQL Database
B. Azure Database for PostgreSQL
C. Azure Cosmos DB
D. Azure Synapse Analytics

✅ Answer: B

Explanation:
Azure Database for PostgreSQL is the managed service for PostgreSQL workloads.


Question 2

Which Azure service is BEST suited for hosting a MySQL-based web application?

A. Azure SQL Managed Instance
B. Azure Database for MySQL
C. Azure Data Lake Storage
D. Azure Blob Storage

✅ Answer: B

Explanation:
Azure Database for MySQL is designed for MySQL workloads, commonly used in web apps.


Question 3

What type of service are Azure Database for PostgreSQL and Azure Database for MySQL?

A. Infrastructure as a Service (IaaS)
B. Platform as a Service (PaaS)
C. Software as a Service (SaaS)
D. On-premises solutions

✅ Answer: B

Explanation:
These services are PaaS offerings, meaning Azure manages infrastructure and maintenance.


Question 4

Which task is handled by Azure in open-source database PaaS services?

A. Writing SQL queries
B. Managing application code
C. Performing backups and patching
D. Designing database schema

✅ Answer: C

Explanation:
Azure handles operational tasks like backups, patching, and updates.


Question 5

Which scenario is BEST suited for Azure Database for PostgreSQL?

A. Running a NoSQL database
B. Migrating an existing PostgreSQL application to Azure
C. Storing unstructured files
D. Running machine learning models

✅ Answer: B

Explanation:
This service is ideal for migrating or running PostgreSQL workloads in Azure.


Question 6

Which of the following is an open-source relational database supported by Azure?

A. Microsoft SQL Server
B. Oracle Database
C. PostgreSQL
D. Azure Cosmos DB

✅ Answer: C

Explanation:
PostgreSQL is a widely used open-source relational database supported by Azure.


Question 7

Which Azure database service for open-source systems is being retired?

A. Azure Database for PostgreSQL
B. Azure Database for MySQL
C. Azure Database for MariaDB
D. Azure SQL Database

✅ Answer: C

Explanation:
Azure Database for MariaDB is being phased out.


Question 8

Which feature is commonly provided by Azure open-source database services?

A. Manual scaling only
B. No security features
C. Built-in high availability
D. No backup support

✅ Answer: C

Explanation:
These services include built-in high availability and redundancy.


Question 9

Which is a key benefit of using Azure Database for MySQL instead of installing MySQL on a VM?

A. Full OS control
B. Reduced management overhead
C. No support for scaling
D. Limited security features

✅ Answer: B

Explanation:
PaaS reduces administrative tasks like maintenance and patching.


Question 10

Which factor is MOST important when choosing Azure Database for PostgreSQL or MySQL?

A. Whether the data is unstructured
B. The need for OS-level access
C. The existing database engine used by the application
D. The need for NoSQL capabilities

✅ Answer: C

Explanation:
Choice is typically driven by the database engine already used (PostgreSQL vs MySQL).


✅ Quick Exam Takeaways

✔ Azure Database for PostgreSQL → PostgreSQL workloads
✔ Azure Database for MySQL → MySQL workloads
✔ Both are PaaS services (Azure manages infrastructure)

✔ Key benefits:

  • Automated backups
  • Patching and updates
  • High availability
  • Scalability

✔ Use when:

  • Migrating open-source databases
  • Building apps on PostgreSQL or MySQL

✔ Be aware:

  • MariaDB is being retired

Go to the DP-900 Exam Prep Hub main page.

Describe the Azure SQL family of products including Azure SQL Database, Azure SQL Managed Instance, and SQL Server on Azure Virtual Machines (DP-900 Exam Prep)

This post is a part of the DP-900: Microsoft Azure Data Fundamentals Exam Prep Hub. 
This topic falls under these sections:
Identify considerations for relational data on Azure (20–25%)
--> Describe relational Azure data services
--> Describe the Azure SQL family of products including Azure SQL Database, Azure SQL Managed Instance, and SQL Server on Azure Virtual Machines


Note that there are 10 practice questions (with answers and explanations) for each section to help you solidify your knowledge of the material. Also, there are 2 practice tests with 60 questions each available on the hub below the exam topics section.

Microsoft Azure provides a family of relational database services collectively known as the Azure SQL family. These services are based on the Microsoft SQL Server engine and are designed to support a wide range of workloads—from fully managed cloud databases to lift-and-shift migrations.

For the DP-900 exam, you should understand the differences, use cases, and key features of:

  • Azure SQL Database
  • Azure SQL Managed Instance
  • SQL Server on Azure Virtual Machines

Overview of the Azure SQL Family

All Azure SQL offerings:

  • Use the Microsoft SQL Server engine
  • Support Structured Query Language (SQL)
  • Are designed for relational data workloads
  • Provide varying levels of management control vs automation

💡 The key difference is how much control you have vs how much Azure manages for you.


1. Azure SQL Database

Azure SQL Database is a fully managed Platform as a Service (PaaS) offering.

Key Features

  • Fully managed by Azure (patching, backups, updates)
  • Built-in high availability
  • Automatic scaling options
  • Intelligent performance tuning
  • Minimal administrative overhead

Deployment Options

  • Single database (isolated)
  • Elastic pool (shared resources across multiple databases)

Use Cases

  • Cloud-native applications
  • Modern web and mobile apps
  • Applications that do not require full SQL Server feature compatibility

✔ Best for: Simplicity, scalability, and minimal management


2. Azure SQL Managed Instance

Azure SQL Managed Instance is a Platform as a Service (PaaS) offering with near 100% compatibility with SQL Server.

Key Features

  • Managed service with automated patching and backups
  • Supports most SQL Server features (e.g., SQL Agent, linked servers)
  • Instance-level features (unlike Azure SQL Database)
  • Runs inside a virtual network (VNet)

Use Cases

  • Migration of on-premises SQL Server applications
  • Applications requiring instance-level features
  • Lift-and-shift scenarios with minimal changes

✔ Best for: Compatibility with existing SQL Server environments


3. SQL Server on Azure Virtual Machines

SQL Server on Azure Virtual Machines is an Infrastructure as a Service (IaaS) offering.

Key Features

  • Full control over the operating system and SQL Server
  • You manage patching, backups, and maintenance
  • Supports all SQL Server features
  • Easy lift-and-shift migration

Use Cases

  • Legacy applications requiring full control
  • Custom configurations or unsupported features in PaaS
  • Scenarios requiring OS-level access

✔ Best for: Maximum control and full SQL Server compatibility


Key Differences at a Glance

FeatureAzure SQL DatabaseAzure SQL Managed InstanceSQL Server on Azure VM
Service TypePaaSPaaSIaaS
ManagementFully managedMostly managedCustomer-managed
SQL Server CompatibilityPartialNear 100%100%
OS AccessNoNoYes
Use CaseCloud-native appsMigration with minimal changesFull control / legacy apps

Choosing the Right Option

Think of the Azure SQL family as a spectrum:

  • Most managed → Azure SQL Database
  • Balanced → Azure SQL Managed Instance
  • Most control → SQL Server on Azure VM

💡 DP-900 Tip:
Questions often test your ability to match a scenario with the correct service based on:

  • Level of control required
  • Compatibility needs
  • Migration vs cloud-native design

Why This Matters for DP-900

On the exam, you may be asked to:

  • Identify differences between Azure SQL offerings
  • Choose the appropriate service for a scenario
  • Understand PaaS vs IaaS trade-offs
  • Recognize management responsibilities

Summary — Exam-Relevant Takeaways

✔ All Azure SQL services are based on SQL Server
✔ Use SQL for querying and management

✔ Azure SQL Database

  • Fully managed
  • Best for modern cloud apps

✔ Azure SQL Managed Instance

  • High compatibility with SQL Server
  • Best for migrations

✔ SQL Server on Azure VM

  • Full control (IaaS)
  • Best for legacy or highly customized environments

✔ Key decision factor = control vs management


Go to the Practice Exam Questions for this topic.

Go to the DP-900 Exam Prep Hub main page.

Practice Questions: Describe the Azure SQL family of products including Azure SQL Database, Azure SQL Managed Instance, and SQL Server on Azure Virtual Machines (DP-900 Exam Prep)

Practice Questions


Question 1

Which Azure SQL offering is fully managed and requires the least administrative effort?

A. SQL Server on Azure Virtual Machines
B. Azure SQL Managed Instance
C. Azure SQL Database
D. Azure Synapse Analytics

✅ Answer: C

Explanation:
Azure SQL Database is a fully managed PaaS service with minimal administration.


Question 2

Which Azure SQL service provides the highest level of compatibility with on-premises SQL Server while still being a PaaS solution?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure Cosmos DB

✅ Answer: B

Explanation:
Azure SQL Managed Instance offers near 100% compatibility with SQL Server.


Question 3

Which Azure SQL option allows full control over the operating system?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure SQL Elastic Pool

✅ Answer: C

Explanation:
SQL Server on Azure VM is an IaaS offering, giving full OS-level control.


Question 4

Which service is BEST suited for a cloud-native application with minimal management overhead?

A. SQL Server on Azure Virtual Machines
B. Azure SQL Managed Instance
C. Azure SQL Database
D. Azure Data Lake

✅ Answer: C

Explanation:
Azure SQL Database is optimized for modern cloud applications.


Question 5

Which Azure SQL service supports instance-level features such as SQL Agent?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure Blob Storage

✅ Answer: B

Explanation:
Managed Instance supports many instance-level features not available in Azure SQL Database.


Question 6

A company wants to migrate an existing SQL Server database with minimal changes. Which service should they choose?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure Synapse Analytics

✅ Answer: B

Explanation:
Managed Instance is designed for lift-and-shift migrations with high compatibility.


Question 7

Which Azure SQL option requires you to manage backups, updates, and patching?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure SQL Elastic Pool

✅ Answer: C

Explanation:
In IaaS (Azure VM), the customer is responsible for management tasks.


Question 8

Which of the following best describes Platform as a Service (PaaS) in the Azure SQL family?

A. Full control over hardware and OS
B. No database management required at all
C. Azure manages infrastructure and database maintenance
D. Only supports non-relational data

✅ Answer: C

Explanation:
PaaS handles infrastructure, patching, backups, and high availability.


Question 9

Which Azure SQL service is MOST appropriate when you need maximum control and customization?

A. Azure SQL Database
B. Azure SQL Managed Instance
C. SQL Server on Azure Virtual Machines
D. Azure SQL Elastic Pool

✅ Answer: C

Explanation:
SQL Server on Azure VM provides full control over configuration and environment.


Question 10

Which statement best describes the relationship between the Azure SQL family products?

A. They use completely different database engines
B. They all use the SQL Server engine with different management levels
C. Only Azure SQL Database supports SQL
D. Only SQL Server on Azure VM supports relational data

✅ Answer: B

Explanation:
All Azure SQL offerings are based on the SQL Server engine, differing mainly in management and control.


✅ Quick Exam Takeaways

✔ Azure SQL Database

  • Fully managed (PaaS)
  • Best for cloud-native apps

✔ Azure SQL Managed Instance

  • Near full SQL Server compatibility
  • Best for migrations

✔ SQL Server on Azure VM

  • Full control (IaaS)
  • You manage everything

✔ Key concept:
👉 More control = more responsibility
👉 More automation = less control


Go to the DP-900 Exam Prep Hub main page.