我对cosmos db的分区键感到困惑。我有一个包含约4000条小记录的数据库/容器。如果我尝试使用分区键过滤器执行sql语句,则RU和持续时间会更长,而没有。
有人了解吗?
在此示例中,我容器的分区键是/ partitionKey
我尝试了以下语句: SELECT * FROM c其中c.partitionKey ='userSettings'和c.deleted = false
请求费用50 RU 文件载入时间2.15毫秒
然后这个 SELECT * FROM c其中c.cosmosEntityName ='userSettings'和c.deleted = false
请求费用5 RU 文件载入时间0.38毫秒
我希望得到完全相反的结果。
答案 0 :(得分:2)
此问题非常特定于您的集合的拓扑(Azure支持可以帮助您解决此问题),但是一般而言,在两种情况下,在RU中,关于非分区键属性的后一种查询可能比分区键属性低:
列表项
where c.partitionKey = 'userSettings' And c.deleted =false
,您应该比较在/partitionKey/?
和/deleted/?
(https://docs.microsoft.com/azure/cosmos-db/how-to-manage-indexing-policy#composite-indexing-policy-examples)上有和没有复合索引的RU。在某些情况下,与默认索引/*
相比,使用复合索引获得的RU数要少,而默认索引let x = [0,1,2,3,4,5,6,7,8,9]
let y = [0,1,2,3,4,5,6,7,8,9]
func setChartValues() {
var values = [ChartDataEntry]()
for index in x {
let value = ChartDataEntry(x: Double(index), y: Double(y[index]))
values.append(value)
}
let set1 = LineChartDataSet(entries: values, label: "Set1")
set1.color = UIColor.blue // red // green whatever you want.
let data = LineChartData()
data.addDataSet(data:set1)
// Some debug output
if data.entryCount > 0 {
let yValue = "\(values[data.entryCount-1].y)"
print("Y : \(yValue)")
for value in values {
print("\(value.y) ", terminator: "")
}
}
self.lineChart.data = data
}
仅对其进行单独索引,可能接近〜5 RU