Azure cosmosdb 读取Cosmos数据库中的日志文件

Azure cosmosdb 读取Cosmos数据库中的日志文件,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我希望通过azure函数或其他方式使用调度作业在Cosmos DB(JSON文档)中捕获更改的数据,而不会影响DB的在线性能,因为web应用程序/移动应用程序正在使用API调用将数据读写到Cosmos DB中。我希望数据用于离线ETL和分析目的,就像oracle离线提供重做日志文件一样 提前感谢您的帮助。如果您想捕获CosmosDB更改事件,您应该使用。一些示例用例: 在插入或更新项目时触发操作 实时流处理 用于同步的附加数据移动 目前,我的团队正在使用with实时捕获变更提要事件 为了回答

我希望通过azure函数或其他方式使用调度作业在Cosmos DB(JSON文档)中捕获更改的数据,而不会影响DB的在线性能,因为web应用程序/移动应用程序正在使用API调用将数据读写到Cosmos DB中。我希望数据用于离线ETL和分析目的,就像oracle离线提供重做日志文件一样


提前感谢您的帮助。

如果您想捕获CosmosDB更改事件,您应该使用。一些示例用例:

  • 在插入或更新项目时触发操作
  • 实时流处理
  • 用于同步的附加数据移动
目前,我的团队正在使用with实时捕获变更提要事件

为了回答您对影响应用程序核心操作的担忧,您可能需要增加吞吐量,以处理处理更改提要的额外请求(也称为请求费用(也称为RUs)/吞吐量).CosmosDB的设计具有吞吐量的弹性可扩展性,因此只要您为核心操作分配足够的资源+更改提要,您就可以了。您可以使用查看需要分配多少吞吐量。此外,您还可以在每个操作上记录遥测,以监视Cosmos DB请求或响应头。Cosmos将在以下Http响应头中使用RUs进行响应:x-ms-total-request-charge

使用Cosmos SDK监控请求收费示例代码:

// Measure the performance (request units) of writes 
ResourceResponse<Document> response = await client.CreateDocumentAsync(collectionSelfLink, myDocument); 

Console.WriteLine("Insert of an item consumed {0} request units", response.RequestCharge); 

// Measure the performance (request units) of queries 
IDocumentQuery<dynamic> queryable = client.CreateDocumentQuery(collectionSelfLink, queryString).AsDocumentQuery(); 

while (queryable.HasMoreResults) 
{ 
          FeedResponse<dynamic> queryResponse = await queryable.ExecuteNextAsync<dynamic>(); 
          Console.WriteLine("Query batch consumed {0} request units", queryResponse.RequestCharge); 
}
var client = await gremlinClient.Value.ConfigureAwait(false);
var result = await client.SubmitAsync<dynamic>(query, parameters)
                                              .ConfigureAwait(false);

bool hasRequestUnitsHeader = result.StatusAttributes.TryGetValue("x-ms-total-request-charge", out var requestUnits);
if (hasRequestUnitsHeader && double.TryParse(requestUnits.ToString(), out double requestUnitsAsDouble))
{
    appInsightsProvider.LogMetric("total-request-charge", requestUnitsAsDouble);
}
//测量写入的性能(请求单位)
ResourceResponse response=wait client.createDocumentSync(collectionSelfLink,myDocument);
WriteLine(“插入消耗了{0}个请求单元的项目”,response.RequestCharge);
//测量查询的性能(请求单位)
IDocumentQuery queryable=client.CreateDocumentQuery(collectionSelfLink,queryString).AsDocumentQuery();
while(queryable.HasMoreResults)
{ 
FeedResponse queryResponse=await queryable.ExecuteNextAsync();
WriteLine(“查询批消耗的{0}个请求单元”,queryResponse.RequestCharge);
}
使用Gremlin驱动程序监视请求示例代码:

// Measure the performance (request units) of writes 
ResourceResponse<Document> response = await client.CreateDocumentAsync(collectionSelfLink, myDocument); 

Console.WriteLine("Insert of an item consumed {0} request units", response.RequestCharge); 

// Measure the performance (request units) of queries 
IDocumentQuery<dynamic> queryable = client.CreateDocumentQuery(collectionSelfLink, queryString).AsDocumentQuery(); 

while (queryable.HasMoreResults) 
{ 
          FeedResponse<dynamic> queryResponse = await queryable.ExecuteNextAsync<dynamic>(); 
          Console.WriteLine("Query batch consumed {0} request units", queryResponse.RequestCharge); 
}
var client = await gremlinClient.Value.ConfigureAwait(false);
var result = await client.SubmitAsync<dynamic>(query, parameters)
                                              .ConfigureAwait(false);

bool hasRequestUnitsHeader = result.StatusAttributes.TryGetValue("x-ms-total-request-charge", out var requestUnits);
if (hasRequestUnitsHeader && double.TryParse(requestUnits.ToString(), out double requestUnitsAsDouble))
{
    appInsightsProvider.LogMetric("total-request-charge", requestUnitsAsDouble);
}
var client=await gremlinClient.Value.ConfigureAwait(false);
var result=await client.SubmitAsync(查询,参数)
.配置等待(错误);
bool hasRequestUnitsHeader=result.StatusAttributes.TryGetValue(“x-ms-total-request-charge”,out var requestUnits);
if(hasRequestUnitsHeader&&double.TryParse(requestUnits.ToString(),out double requestUnitsAsDouble))
{
appInsightsProvider.LogMetric(“总请求费用”,请求单位加倍);
}
日志文件

我不知道还有什么方法可以不通过RUs分配和消费数据就从宇宙中读取数据。有用于故障排除和诊断的方法

Cosmos DB的设计规模为:

// Measure the performance (request units) of writes 
ResourceResponse<Document> response = await client.CreateDocumentAsync(collectionSelfLink, myDocument); 

Console.WriteLine("Insert of an item consumed {0} request units", response.RequestCharge); 

// Measure the performance (request units) of queries 
IDocumentQuery<dynamic> queryable = client.CreateDocumentQuery(collectionSelfLink, queryString).AsDocumentQuery(); 

while (queryable.HasMoreResults) 
{ 
          FeedResponse<dynamic> queryResponse = await queryable.ExecuteNextAsync<dynamic>(); 
          Console.WriteLine("Query batch consumed {0} request units", queryResponse.RequestCharge); 
}
var client = await gremlinClient.Value.ConfigureAwait(false);
var result = await client.SubmitAsync<dynamic>(query, parameters)
                                              .ConfigureAwait(false);

bool hasRequestUnitsHeader = result.StatusAttributes.TryGetValue("x-ms-total-request-charge", out var requestUnits);
if (hasRequestUnitsHeader && double.TryParse(requestUnits.ToString(), out double requestUnitsAsDouble))
{
    appInsightsProvider.LogMetric("total-request-charge", requestUnitsAsDouble);
}
Cosmos DB使您能够在全球任意数量的Azure区域中灵活、独立地扩展吞吐量和存储。您可以弹性地扩展吞吐量和存储,并利用使用您最喜欢的API(包括SQL、MongoDB、Cassandra、Tables或Gremlin)进行的快速、一位数毫秒数据访问。Cosmos DB为吞吐量、延迟、可用性和一致性保证提供了全面的服务级别协议(SLA),这是其他数据库服务无法提供的

吞吐量和存储的弹性可扩展性,在全球范围内采用 透明的水平分区和多主机复制, Cosmos DB为您的写入和输出提供了前所未有的弹性可扩展性 阅读,遍布全球。您可以从 全球每秒数千到数亿次请求, 只需一次API调用,只需支付吞吐量(和存储) 你需要。此功能可帮助您处理系统中的意外峰值 您的工作负载,而不必为峰值提供过多的资源。更多 有关详细信息,请参阅Cosmos DB中的分区,在 容器和数据库,以及全局扩展调配的吞吐量


如果要捕获CosmosDB更改事件,应使用。一些示例用例:

  • 在插入或更新项目时触发操作
  • 实时流处理
  • 用于同步的附加数据移动
目前,我的团队正在使用with实时捕获变更提要事件

为了回答您对影响应用程序核心操作的担忧,您可能需要增加吞吐量,以处理处理更改提要的额外请求(也称为请求费用(也称为RUs)/吞吐量).CosmosDB的设计具有吞吐量的弹性可扩展性,因此只要您为核心操作分配足够的资源+更改提要,您就可以了。您可以使用查看需要分配多少吞吐量。此外,您还可以在每个操作上记录遥测,以监视Cosmos DB请求或响应头。Cosmos将在以下Http响应头中使用RUs进行响应:x-ms-total-request-charge

使用Cosmos SDK监控请求收费示例代码:

// Measure the performance (request units) of writes 
ResourceResponse<Document> response = await client.CreateDocumentAsync(collectionSelfLink, myDocument); 

Console.WriteLine("Insert of an item consumed {0} request units", response.RequestCharge); 

// Measure the performance (request units) of queries 
IDocumentQuery<dynamic> queryable = client.CreateDocumentQuery(collectionSelfLink, queryString).AsDocumentQuery(); 

while (queryable.HasMoreResults) 
{ 
          FeedResponse<dynamic> queryResponse = await queryable.ExecuteNextAsync<dynamic>(); 
          Console.WriteLine("Query batch consumed {0} request units", queryResponse.RequestCharge); 
}
var client = await gremlinClient.Value.ConfigureAwait(false);
var result = await client.SubmitAsync<dynamic>(query, parameters)
                                              .ConfigureAwait(false);

bool hasRequestUnitsHeader = result.StatusAttributes.TryGetValue("x-ms-total-request-charge", out var requestUnits);
if (hasRequestUnitsHeader && double.TryParse(requestUnits.ToString(), out double requestUnitsAsDouble))
{
    appInsightsProvider.LogMetric("total-request-charge", requestUnitsAsDouble);
}
//测量写入的性能(请求单位)
ResourceResponse response=wait client.createDocumentSync(collectionSelfLink,myDocument);
WriteLine(“插入消耗了{0}个请求单元的项目”,response.RequestCharge);
//测量查询的性能(请求单位)
IDocumentQuery queryable=client.CreateDocumentQuery(collectionSelfLink,queryString).AsDocumentQuery();
while(queryable.HasMoreResults)
{ 
FeedResponse queryResponse=await queryable.ExecuteNextAsync();
WriteLine(“查询批消耗的{0}个请求单元”,queryResponse.RequestCharge);
}