Golang / CosmosDB 分页
Golang / CosmosDB Pagination
我正在尝试实现分页,同时 select 使用 cosmosapi package 从 CosmosDB 读取记录。
azure documentation 声明延续令牌永不过期,我正在尝试理解其语义。
在中有一个约定
Documents created after serving the first page are observable on
subsequent pages
我试图通过 运行 来自 golang 应用程序的一些实验来验证这一点,但有些地方不太正确。作为一个非常高级的示例,如果我们向 CosmosDB 中插入三个记录:
Insert record #1
Insert record #2
Insert record #3
然后,如果我们尝试使用此选项从 table(query = SELECT * FROM c ORDER BY c.dateField DESC)select:
opts := cosmosapi.QueryDocumentsOptions{
IsQuery: true,
ContentType: cosmosapi.QUERY_CONTENT_TYPE,
ConsistencyLevel: cosmosapi.ConsistencyLevelStrong,
Continuation: "",
PartitionKeyValue: partitionKeyValue,
MaxItemCount: 2,
}
它returns:
record #1
record #2
continuation token = "cont-token-1"
现在当 select再次使用相同的选项,但不同的延续标记时:
opts := cosmosapi.QueryDocumentsOptions{
IsQuery: true,
ContentType: cosmosapi.QUERY_CONTENT_TYPE,
ConsistencyLevel: cosmosapi.ConsistencyLevelStrong,
Continuation: "cont-token-1",
PartitionKeyValue: partitionKeyValue,
MaxItemCount: 2,
}
它returns
record #3
这是相当合乎逻辑的。
现在,当我尝试插入记录 #4,它被插入到记录 #3 之后,并尝试使用“cont-token-1”获取时,记录 #4 没有出现。它仅在我使用空 opts.Continuation 字段再次 selecting 重新生成延续标记时显示。
如果我尝试 select 使用空的继续标记,那么它会获取记录 #1 和记录 #2,并导致获取记录 #3 和记录 #4 的新标记。
这是预期的行为吗?还是我错过了什么?
根据我的理解,它应该出现。延续令牌就像一个书签,即使使用相同的延续令牌也应该能看到结果。
延续令牌只能用于完全相同的查询,并且每次都会 return 完全相同的答案,无论您如何更改基础数据,如果您的基础数据,您都需要获取一个新令牌数据以第一个答案中包含的方式更改。
我正在尝试实现分页,同时 select 使用 cosmosapi package 从 CosmosDB 读取记录。 azure documentation 声明延续令牌永不过期,我正在尝试理解其语义。
在
Documents created after serving the first page are observable on subsequent pages
我试图通过 运行 来自 golang 应用程序的一些实验来验证这一点,但有些地方不太正确。作为一个非常高级的示例,如果我们向 CosmosDB 中插入三个记录:
Insert record #1
Insert record #2
Insert record #3
然后,如果我们尝试使用此选项从 table(query = SELECT * FROM c ORDER BY c.dateField DESC)select:
opts := cosmosapi.QueryDocumentsOptions{
IsQuery: true,
ContentType: cosmosapi.QUERY_CONTENT_TYPE,
ConsistencyLevel: cosmosapi.ConsistencyLevelStrong,
Continuation: "",
PartitionKeyValue: partitionKeyValue,
MaxItemCount: 2,
}
它returns:
record #1
record #2
continuation token = "cont-token-1"
现在当 select再次使用相同的选项,但不同的延续标记时:
opts := cosmosapi.QueryDocumentsOptions{
IsQuery: true,
ContentType: cosmosapi.QUERY_CONTENT_TYPE,
ConsistencyLevel: cosmosapi.ConsistencyLevelStrong,
Continuation: "cont-token-1",
PartitionKeyValue: partitionKeyValue,
MaxItemCount: 2,
}
它returns
record #3
这是相当合乎逻辑的。 现在,当我尝试插入记录 #4,它被插入到记录 #3 之后,并尝试使用“cont-token-1”获取时,记录 #4 没有出现。它仅在我使用空 opts.Continuation 字段再次 selecting 重新生成延续标记时显示。
如果我尝试 select 使用空的继续标记,那么它会获取记录 #1 和记录 #2,并导致获取记录 #3 和记录 #4 的新标记。
这是预期的行为吗?还是我错过了什么? 根据我的理解,它应该出现。延续令牌就像一个书签,即使使用相同的延续令牌也应该能看到结果。
延续令牌只能用于完全相同的查询,并且每次都会 return 完全相同的答案,无论您如何更改基础数据,如果您的基础数据,您都需要获取一个新令牌数据以第一个答案中包含的方式更改。