不区分大小写搜索的高 RU 费用
High RU charge with case-insensitive search
我有一个包含 400 万个文档 (~5GB) 的 Cosmos DB 集合。以下查询报告 2.79 RU 的费用:
SELECT * FROM c WHERE c.type='type1' and STRINGEQUALS(c.name,'abc',false)
但使用不区分大小写的搜索(通过将 false
替换为 true
)的相同查询成本 1228 RUs.
是否可以解释为什么不区分大小写的查询比区分大小写的查询贵 470 多倍?我对此感到惊讶,因为 documentation 状态
The RU charge for StartsWith and StringEquals is slightly higher with the case-insensitive option than without it.
详情:
- 两个查询 return 0 个结果。
- 分区键是
type
。
- 逻辑分区
type1
包含 200 万个文档。
name
属性 对几乎所有 200 万份文档都有不同的值。
- 使用默认索引策略(
"path": "/*"
)
这是我目前发现的:
Cosmos DB 是否支持高效的不区分大小写的字符串比较?
不幸的是,不区分大小写 STRINGEQUALS
的 RU 费用在 属性 的基数中似乎是 线性 (即不同值的数量为此 属性)。如果您有很多文档,那真的非常糟糕。上面的查询在 10,000 RU/s 的吞吐量下花费了将近 1 秒。相反,区分大小写 字符串比较与集合的大小无关。另请参阅 this 讨论。
如果我需要高效的不区分大小写的字符串比较怎么办?
对于小型集合(< 10,000 个文档)区分大小写不会产生太大影响。 (当然,如果分区键的包含将潜在结果集的大小限制为更小的数字。)
对于较大的集合,您可以存储每个 属性 的副本,这些 属性 应该支持小写的高效不区分大小写的搜索,而对小写的 属性 进行区分大小写的搜索。
您可以投票支持功能请求以支持高效的不区分大小写的查询here。
我有一个包含 400 万个文档 (~5GB) 的 Cosmos DB 集合。以下查询报告 2.79 RU 的费用:
SELECT * FROM c WHERE c.type='type1' and STRINGEQUALS(c.name,'abc',false)
但使用不区分大小写的搜索(通过将 false
替换为 true
)的相同查询成本 1228 RUs.
是否可以解释为什么不区分大小写的查询比区分大小写的查询贵 470 多倍?我对此感到惊讶,因为 documentation 状态
The RU charge for StartsWith and StringEquals is slightly higher with the case-insensitive option than without it.
详情:
- 两个查询 return 0 个结果。
- 分区键是
type
。 - 逻辑分区
type1
包含 200 万个文档。 name
属性 对几乎所有 200 万份文档都有不同的值。- 使用默认索引策略(
"path": "/*"
)
这是我目前发现的:
Cosmos DB 是否支持高效的不区分大小写的字符串比较?
不幸的是,不区分大小写 STRINGEQUALS
的 RU 费用在 属性 的基数中似乎是 线性 (即不同值的数量为此 属性)。如果您有很多文档,那真的非常糟糕。上面的查询在 10,000 RU/s 的吞吐量下花费了将近 1 秒。相反,区分大小写 字符串比较与集合的大小无关。另请参阅 this 讨论。
如果我需要高效的不区分大小写的字符串比较怎么办?
对于小型集合(< 10,000 个文档)区分大小写不会产生太大影响。 (当然,如果分区键的包含将潜在结果集的大小限制为更小的数字。)
对于较大的集合,您可以存储每个 属性 的副本,这些 属性 应该支持小写的高效不区分大小写的搜索,而对小写的 属性 进行区分大小写的搜索。
您可以投票支持功能请求以支持高效的不区分大小写的查询here。