TTL is an optional property in Azure Cosmos DB. When provided, it decides how long an item in the database should exist before it is automatically deleted.
Setting Up Default TTL on a Container
To set the default TTL on a container in Cosmos DB, you need to either use the Azure portal or the Azure Cosmos DB SDK.
If using the Azure portal:
- Navigate to your Azure Cosmos DB account
- In the left navigation, click on ‘Default Time to Live’
- Set the TTL in seconds
In the SDK, you can define TTL at the container level while creating a new container. Here’s a brief example using the .NET SDK.
ContainerProperties containerProperties = new ContainerProperties("MyContainer", "/myPartitionKey");
containerProperties.DefaultTimeToLive = TimeSpan.FromSeconds(1000);
ContainerResponse response = await database.CreateContainerAsync(containerProperties);
In this example, the container “MyContainer” is created with a default TTL of 1000 seconds.
Understanding TTL on a Container Level
When TTL is set on the container level, it applies to all items in the container. However, you can override this TTL for individual items. There are three scenarios:
- If you set default TTL on a container but do not provide a TTL for an individual item, the item will use the container’s TTL value.
- If you provide a TTL for an individual item, that TTL will apply regardless of the container’s TTL.
- If you set TTL as null for an individual item, the item will not be automatically deleted, no matter whatever the container’s TTL is.
TTL in Transactional Store
In the context of a transactional store, setting a default TTL can be very beneficial. For instance, if you are handling sessions in a web application, items in the database might represent active sessions. By setting a default TTL, you ensure that session data is automatically cleaned up after a certain period of inactivity, thus saving storage space and costs.
It’s important to note that when a TTL elapses, the item is marked for deletion. The actual deletion of the item from storage might not occur immediately and can be subject to the operational load on the system.
Conclusion
In DP-420: Designing and Implementing Native Applications using Microsoft Azure Cosmos DB, understanding how to specify a default TTL on a container for a transactional store is essential. This feature can be an efficient way to manage storage costs and ensure your applications maintain a clean state by automatically deleting outdated data.
Practice Test
True or False: The default TTL for a container in Azure Cosmos DB can be specified at the item level.
- True
- False
Answer: True
Explanation: Azure Cosmos DB supports default Time to Live (TTL) at the container level as well as the item level. It enables the automated removal of items after a certain period.
In Microsoft Azure Cosmos DB, what does TTL stand for?
- a) Time to Leave
- b) Time to Live
- c) Timeout Threshold Limit
- d) Threshold Time Limit
Answer: b) Time to Live
Explanation: In the context of Azure Cosmos DB, TTL stands for “Time to Live”. It specifies the period after which data in the container should expire and be deleted.
True or False: The default TTL property in Azure Cosmos DB can have the value ‘null’, which indicates that the data never expires.
- True
- False
Answer: False
Explanation: A null value for the default TTL property implies that the TTL feature is turned off for a container or an item.
What value does the default TTL property in Azure Cosmos DB take if you want items in a container to be automatically deleted after one hour?
- a) 60
- b) 360
- c) 3600
- d) 600
Answer: c) 3600
Explanation: The TTL value in Azure Cosmos DB is in seconds. So, a TTL of 3600 means the items will expire and get deleted after 3600 seconds or one hour.
True or False: A default TTL can be defined during container creation but cannot be updated later.
- True
- False
Answer: False
Explanation: The Default Time to Live (TTL) can not only be defined during container creation but can also be modified later as per the requirement.
In Azure Cosmos DB, where is the TTL value defined for an individual item if its value is different from the default TTL of the container?
- a) In the item’s metadata
- b) In the item’s properties
- c) In the item’s header
- d) In the item’s payload
Answer: a) In the item’s metadata
Explanation: If an item’s TTL is set to a different value from the container’s default TTL, the item’s TTL is stored in its metadata.
True or False: If you set a negative number for the TTL property in Azure Cosmos DB, it means the item never expires.
- True
- False
Answer: True
Explanation: In Azure Cosmos DB, a negative TTL value means the item will never expire and will be retained until explicitly deleted.
What can be a key benefit of specifying a default TTL on a container in a transactional store such as Azure Cosmos DB?
- a) Increased storage costs
- b) Improved query performance
- c) Automatic failover
- d) Both a and c
Answer: b) Improved query performance
Explanation: By specifying a default TTL, old data is automatically deleted after the specified period, thereby improving the overall query performance by preventing unnecessary piling up of data.
True or False: When TTL is enabled on a container level, it cannot be disabled on an item level.
- True
- False
Answer: False
Explanation: Even if the TTL is enabled at the container level, it can be overridden or disabled at an individual item level.
What will happen to an item in a container if its TTL value is set to zero in Azure Cosmos DB?
- a) The item will never expire.
- b) The item will expire immediately.
- c) The item will expire after a default period.
- d) The item’s expiry will depend on the container’s TTL.
Answer: b) The item will expire immediately.
Explanation: If an item’s TTL is set to zero in Azure Cosmos DB, it’s an indication that the item should be expired immediately.
Interview Questions
What does TTL stand for in the context of Azure Cosmos DB?
TTL stands for Time to Live. It’s a setting that can be applied to items in Azure Cosmos DB and it determines how long these items will be retained in the system before automatic deletion.
Can you set a default TTL on a container in Azure Cosmos DB?
Yes, a default TTL can be set on a container in Azure Cosmos DB. If no TTL is specified on an item, it will inherit the container’s default TTL.
How would you specify a default TTL on a Cosmos DB container?
To specify a default TTL on a Cosmos DB container, use the Azure portal and navigate to the desired database account, then go to ‘Data Explorer’. Select the desired container, then use the ‘…’ context menu to select ‘Settings’. From there, you can set the ‘Default Time To Live’ setting.
What is the purpose of setting a default TTL in the Azure Cosmos DB?
A default TTL helps to manage the lifecycle of items in your database. It automatically deletes items after a certain period of time, which can help efficiently manage storage and costs by removing outdated or unnecessary data.
What happens if both the container and individual item in Azure Cosmos DB have TTLs set?
If both the container and an individual item have TTLs set, the item’s TTL takes precedence.
What is a possible purpose of setting a TTL on a container in a transactional store scenario?
Setting a TTL in a transactional scenario can help manage the amount of stored transaction data, automating the deletion of processed transactions after a specified duration.
How does TTL influence the cost of using Azure Cosmos DB?
By deleting data that’s no longer needed, TTL can help to effectively manage storage costs in Azure Cosmos DB.
Is there a way to set the TTL on an individual item in Cosmos DB, and how does it differ from setting it on the container level?
Yes, you can set a TTL on individual items in Cosmos DB. If an individual item’s TTL is set, it will supersede the container’s default TTL. If it’s not set, the item will inherit the container’s TTL.
Can you specify a default TTL on a container in Azure Cosmos DB using Azure CLI?
Yes, you can specify a default TTL on a container in Azure Cosmos DB using the Azure CLI by using the “az cosmosdb sql container create” command with a TTL argument.
What values can be set for TTL in Azure Cosmos DB?
With Azure Cosmos DB, you can disable TTL by setting it to -1, allow an item to never expire by setting TTL to null, or set a specific expiration time in seconds. This setting must be an integer.