没有分区键,Azure cosmos db更快

时间:2019-09-01 14:06:43

标签: azure-cosmosdb

我对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毫秒

我希望得到完全相反的结果。

以下是一些屏幕截图: enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

此问题非常特定于您的集合的拓扑(Azure支持可以帮助您解决此问题),但是一般而言,在两种情况下,在RU中,关于非分区键属性的后一种查询可能比分区键属性低:

列表项

  • 如果对非分区键属性的查询不完整,则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