我正在创建一个日志记录系统来监视我们的(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个客户少得多)
答案 0 :(得分:1)
应尽可能避免跨分区查询。如果您的查询可能是使用客户ID进行的,则客户ID是一个很好的逻辑分区键。但是,必须记住,每个逻辑分区数据限制为10GB。
跨整个数据库的跨分区查询将导致非常缓慢且非常昂贵的操作,但是如果它对功能不很关键,并且仅用于不频繁的报告,那么这并不是什么大问题。