I've been looking for a authoritative source of azure cosmosdb limits by I can't find one. In particular, I need to know the size limits for a individual item.
The maximum size of a document today is 2MB.
https://learn.microsoft.com/en-us/azure/cosmos-db/documentdb-resources#documents
x-ms-resource-usage
, which will contain a documentsSize
attribute (representing a document's size in kb)." –
Expressionism So this is one of those things that always annoys me about documentation.
Sure it's 2MB, but by who's measuring stick.
TLDR: Between 2,090,014 and 2,100,014 when Encoding.UTF8.GetByteCount(doc) or Encoding.ASCII.GetByteCount(doc)
To get there I set up the following code:
for (int i = 10; i < 10000; i++)
{
var docItem = new TestItem(new string('A', i * 10000));
string doc = JsonConvert.SerializeObject(docItem);
log.LogInformation(" ");
log.LogInformation(" -------------------------------------------------------------------------------------------------------------------------------------");
log.LogInformation($" ------------------------------------------------- Doc Size = {i*10000 } --------------------------------------------------");
log.LogInformation(" -------------------------------------------------------------------------------------------------------------------------------------");
log.LogWarning($"UTF7 - {Encoding.UTF7.GetByteCount(doc)}");
log.LogWarning($"UTF8 - {Encoding.UTF8.GetByteCount(doc)}");
log.LogWarning($"UTF32 - {Encoding.UTF32.GetByteCount(doc)}");
log.LogWarning($"Unicode - {Encoding.Unicode.GetByteCount(doc)}");
log.LogWarning($"Ascii - {Encoding.ASCII.GetByteCount(doc)}");
log.LogInformation(" -------------------------------------------------------------------------------------------------------------------------------------");
log.LogWarning($"UTF7 - {ASCIIEncoding.UTF7.GetByteCount(doc)}");
log.LogWarning($"UTF8 - {ASCIIEncoding.UTF8.GetByteCount(doc)}");
log.LogWarning($"UTF32 - {ASCIIEncoding.UTF32.GetByteCount(doc)}");
log.LogWarning($"Unicode - {ASCIIEncoding.Unicode.GetByteCount(doc)}");
log.LogWarning($"Ascii - {ASCIIEncoding.ASCII.GetByteCount(doc)}");
try
{
await cosmosStore.CreateDocumentAsync(docItem);
}
catch (Exception e)
{
log.LogWarning(e.Message + "Caught");
}
}
Update: increasing the max size to 16 MB is now possible. https://devblogs.microsoft.com/cosmosdb/larger-document-sizes-unique-index-improvements-expr-support-in-azure-cosmos-db-api-for-mongodb/
The max allowable document size is 2 MB. This is fixed for Azure Cosmos DB for NOSQL API account
If it Exceeds you face 413 error --> 413 Entity too large The document size in the request exceeded the allowable document size for a request.
If your Environment is already in Production we still suggest reducing the document size as a solution. You can Reduce the document size/ Re model your data
More Info: Azure Cosmos DB service quotas | Microsoft Learn
https://learn.microsoft.com/en-us/azure/cosmos-db/concepts-limits#per-item-limits
Additional Information:
For Azure Cosmos DB for API for MongoDB If your Azure Cosmos DB account is Mongo DB API , the limit is 2 MB but
- There is a preview feature and please be noted that this is not recommended for prod environment: There is a preview feature to set 16MB limit per document in API for MongoDB.
Ref:
https://azure.microsoft.com/en-us/updates/public-preview-16mb-limit-per-document-in-api-for-mongodb/
https://learn.microsoft.com/en-us/azure/cosmos-db/mongodb/feature-support-42#data-types
However, it’s in preview and not recommended for Production environments. There’s no ETA when it will be GA.
© 2022 - 2024 — McMap. All rights reserved.