我正在测试DocumentDb中的新更改源。 我通过轮询API将它连接到Logic应用程序。
因为我每个请求只需要1个项目,所以我将MaxItemCount设置为1。 这完美地工作......直到得到36结果。下一个请求给出了70个结果(并且最大项目数设置为1)并且跳过了+ - 150个文档。
这是DocumentDB中的错误还是我做错了什么?
查看代码,前36次,我只得到1个结果,从那时起我得到了上述问题:
var changeFeedOptions = new ChangeFeedOptions
{
MaxItemCount = 1,
RequestContinuation = continuationToken,
PartitionKeyRangeId = partitionKey, // singe partioned collection
StartFromBeginning = fromBeginning
};
var feed = ((DocumentClient) _documentClient).CreateDocumentChangeFeedQuery(
collectionUri,
changeFeedOptions);
var result = await feed.ExecuteNextAsync();
var document = result.FirstOrDefault();
return new ChangeFeedResponse
{
ContinuationToken = result.ResponseContinuation, // this token will be used the next time
Document = document
};
答案 0 :(得分:5)
对于Change Feed,粒度是按事务处理的,这意味着来自同一事务的更改被视为原子块,并且它本身返回(不能中断事务)。因此,Change Feed的结果可以将MaxItemCount(页面大小)扩展到事务边界。例如,一个脚本插入了70个文档 - 所有这些都是单个事务,您轮询更改并提供MaxItemCount = 1;你会得到70项(它将在交易边界停止)。这有意义吗?
是不是这些70个文档是通过脚本插入的?