为什么分区的 DocumentDB collection 中总是有 "round trip"?
Why is there always "round trip" in partitioned DocumentDB collection?
我正在向分区的 DocumentDB collection 发出如下请求。 collection 已分区以供将来使用,但此时分区键只有一个值。
{
"query": "SELECT * FROM r where r.id = @id",
"parameters": [
{"name": "@id", "value": "4a97b4fe-cbf7-4e7c-be50-e90d3ce7bc14"}
]
}
第一页 returns 空白,其中 x-ms-continuation
为 #PKRID:1
。当我浏览下一页指定不同的 x-ms-continuation
header 时,最终 #PKRID:16
周围的正确 body returns(第 16 页)。好像在DocumentDB portal里面叫"round trip",因为每次分页都需要网络往返。
问题:
这是正常现象吗?查询指定 "id",因此我认为它应该能够从索引中即时获取记录。如果我没记错的话,当我将 collection 作为单个分区时,它确实在第一页中得到了结果。
如果这是(不幸的)DocumentDB 的正常行为,我可以做些什么来减轻往返效应?将 x-ms-max-item-count
指定为较大的数字(如 1000)没有任何效果。同样的记录仍在第 16 页返回。 (其实这个collectionreturns第16页好像每条记录都...)
作为补充资料,索引策略是这样的:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
"excludedPaths": []
}
在 DocumentDB 中,过滤分区键的查询将在单个 hop/partition 中执行,但不过滤分区键的查询将在每个分区上执行(在每个分区中,查询命中索引)。
请注意,在分区集合中,文档的 "primary key" 是 (, "id") 的复合 属性,而不仅仅是 "id"。例如,如果您的分区键是 "appName",那么您应该过滤 "appName = X" 以执行单跳查询。 "appName = X and id = Y" 上的查询是主键查找。
另请注意,在 SDK 1.9.0+ 中,DocumentDB 支持并行执行跨分区查询。即使查询没有分区键过滤器,并行查询执行也允许您以非常低的延迟执行查询。
我正在向分区的 DocumentDB collection 发出如下请求。 collection 已分区以供将来使用,但此时分区键只有一个值。
{
"query": "SELECT * FROM r where r.id = @id",
"parameters": [
{"name": "@id", "value": "4a97b4fe-cbf7-4e7c-be50-e90d3ce7bc14"}
]
}
第一页 returns 空白,其中 x-ms-continuation
为 #PKRID:1
。当我浏览下一页指定不同的 x-ms-continuation
header 时,最终 #PKRID:16
周围的正确 body returns(第 16 页)。好像在DocumentDB portal里面叫"round trip",因为每次分页都需要网络往返。
问题:
这是正常现象吗?查询指定 "id",因此我认为它应该能够从索引中即时获取记录。如果我没记错的话,当我将 collection 作为单个分区时,它确实在第一页中得到了结果。
如果这是(不幸的)DocumentDB 的正常行为,我可以做些什么来减轻往返效应?将
x-ms-max-item-count
指定为较大的数字(如 1000)没有任何效果。同样的记录仍在第 16 页返回。 (其实这个collectionreturns第16页好像每条记录都...)
作为补充资料,索引策略是这样的:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*",
"indexes": [
{
"kind": "Range",
"dataType": "Number",
"precision": -1
},
{
"kind": "Range",
"dataType": "String",
"precision": -1
},
{
"kind": "Spatial",
"dataType": "Point"
}
]
}
],
"excludedPaths": []
}
在 DocumentDB 中,过滤分区键的查询将在单个 hop/partition 中执行,但不过滤分区键的查询将在每个分区上执行(在每个分区中,查询命中索引)。
请注意,在分区集合中,文档的 "primary key" 是 (, "id") 的复合 属性,而不仅仅是 "id"。例如,如果您的分区键是 "appName",那么您应该过滤 "appName = X" 以执行单跳查询。 "appName = X and id = Y" 上的查询是主键查找。
另请注意,在 SDK 1.9.0+ 中,DocumentDB 支持并行执行跨分区查询。即使查询没有分区键过滤器,并行查询执行也允许您以非常低的延迟执行查询。