CosmosDB-跨所有分区查询

时间:2018-12-04 11:22:51

标签: azure azure-cosmosdb database-partitioning

我正在创建一个日志记录系统来监视我们的(200 ish)主应用程序安装,由于我们将收集并允许的数据量很大,因此Cosmos db似乎很合适日志数据的不同模式(尤其是Tags数组-请参见下面的文档模式)。

但是,在我不太确定要使用什么分区键之前,从未使用过CosmosDb。

如果我按CustomerId进行分区,则200个分区中的每个分区中可能会有数Gb个数据,并且通常将由CustomerId查询数据,所以这就是我的分区键的首选。

但是我计划在日志记录系统中拥有一个“日志流”视图,以显示所有客户的日志。

  • 这会导致运行极其缓慢/昂贵的跨分区查询吗?

如果是这样,是否有明显的方法可以避免/限制这种跨分区查询的成本和速度? (不只是为所有客户提取日志流视图!)

{
    "CustomerId": "be806507-7cc4-4db4-881b",
    "CustomerName": "Our Customer",
    "SystemArea": 1,
    "SystemAreaName": "ExchangeSync",
    "Message": "Updated OK",
    "Details": "",
    "LogLevel": 2,
    "Timestamp": "2018-11-23T10:59:29.7548888+00:00",
    "Tags": {
        "appointmentId": "109654",
        "appointmentGroupId": "86675",
        "exchangeId": "AAMkA",
        "exchangeAlias": "customer.name@customer.com"        
    }    
}

(注意-我们尚未使用SystemArea类型的已定义列表,但比200个客户少得多)

1 个答案:

答案 0 :(得分:1)

应尽可能避免跨分区查询。如果您的查询可能是使用客户ID进行的,则客户ID是一个很好的逻辑分区键。但是,必须记住,每个逻辑分区数据限制为10GB。

跨整个数据库的跨分区查询将导致非常缓慢且非常昂贵的操作,但是如果它对功能不很关键,并且仅用于不频繁的报告,那么这并不是什么大问题。