Задержка чтения точки Cosmos db превышает 20 мс для документов размером 1 RU.C#

Место общения программистов C#
Ответить
Anonymous
 Задержка чтения точки Cosmos db превышает 20 мс для документов размером 1 RU.

Сообщение Anonymous »

Мы используем Cosmos db в нашем API-интерфейсе ASP Net Core и поняли, что не видим рекламируемой низкой задержки при чтении точек. Для чтения точек стабильно около 20-25 мс. Я смотрю на информацию о космическом ресурсе.
Соглашение об уровне обслуживания гласит, что мы должны увидеть
Кто мы? отсутствует?
Вот пример нашего кода, который дает такие результаты:
using Azure.Monitor.OpenTelemetry.AspNetCore;
using Microsoft.Azure.Cosmos;
using System.Diagnostics;
namespace CosmosTest
{
public class Program
{
static string? _dbId;
static string? _containerId;
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddSingleton(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService();

_dbId = configuration["CosmosDB:DatabaseId"];
_containerId = configuration["CosmosDB:ContainerId"];
var cosmosClientOptions = new CosmosClientOptions
{
SerializerOptions = new CosmosSerializationOptions
{
PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
},
ConnectionMode = ConnectionMode.Direct,

AllowBulkExecution = false,
};
var connectionString = configuration.GetConnectionString("Cosmos");
return new CosmosClient(connectionString);
});

builder.Services.AddOpenTelemetry().WithTracing(tracerProviderBuilder =>
{
tracerProviderBuilder.AddSource("Azure.Cosmos.Operation");

}).UseAzureMonitor();

builder.Services.AddApplicationInsightsTelemetry();
builder.Logging.AddApplicationInsights();

var app = builder.Build();

app.MapGet("/{partitionKey}/{id}", async (Guid id, Guid partitionKey, CosmosClient cosmosClient, ILogger logger) =>
{
var container = cosmosClient.GetContainer(_dbId, _containerId);

var startTime = Stopwatch.GetTimestamp();

var itemResponse = await container.ReadItemAsync(id.ToString(), new PartitionKey(partitionKey.ToString()));

var elapsed = Stopwatch.GetElapsedTime(startTime);

logger.LogInformation("Read item {id} from container {container} in {elapsed} ms", id, _containerId, elapsed);

return Results.Ok(itemResponse.Resource);

});

app.MapGet("/{partitionKey}", async (Guid partitionKey, CosmosClient cosmosClient) =>
{
var container = cosmosClient.GetContainer(_dbId, _containerId);
var query = new QueryDefinition("SELECT * FROM c WHERE c.productBlueprintId = @productBlueprintId")
.WithParameter("@productBlueprintId", partitionKey);
var iterator = container.GetItemQueryIterator(query);
var results = new List();
while (iterator.HasMoreResults)
{
var response = await iterator.ReadNextAsync();
results.AddRange(response.ToList());
}
return Results.Ok(results);
});

app.MapPost("/", async (Product product, CosmosClient cosmosClient) =>
{
var container = cosmosClient.GetContainer(_dbId, _containerId);
var response = await container.CreateItemAsync(product, new PartitionKey(product.productBlueprintId.ToString()));
return;
});

app.UseDeveloperExceptionPage();

app.Run();
}
}

public record Product(string id, Guid productBlueprintId, string Name, Guid OwnerId, DateTime createdUtc, Guid createdBy);
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -documents
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»