Azure 中插入的新项目 Table 存储无法立即使用

New item inserted in Azure Table Storage is not immediately available

我有

如果我插入一个项目然后立即得到相同的项目,那么该项目还没有出现!

如果我在保存后延迟一秒,那么我找到该项目。

如果我在保存后延迟 10 毫秒,那么我找不到 项目。

我在更新项目时看到相同的症状。我在项目上设置了一个日期字段。如果我删除后立即得到,那么有时日期字段尚未设置。

这是 Azure Table 存储中的已知行为吗? 我知道 here 中描述的 ETag,但我看不出它如何适用于此问题。

我无法轻易提供代码示例,因为它分布在多个函数中,我想如果我把它放在一个更简单的例子中,那么会有一些机制可以看到我是从同一个 ip 或同一客户并设法 return 最近保存的项目。

这个问题与我的代码和后台队列 运行 有关。

我已经关闭了具有队列触发器的函数,但令我惊讶的是,我发现暂存槽中的函数正在从队列中挑选项目。这就是为什么我延迟一两秒会有不同。

关于第二部分,为什么日期字段的设置速度似乎没有我设置的那么快。嗯,原来我按列过滤了,像这样:

var operation = TableOperation.Retrieve<Entity>(partitionKey, id, new List<string> { "Content", "IsDeleted" });

更糟糕的是,我反序列化的 class "Entity" 当然有默认的原始值(例如 "false")所以看起来不像它们未设置。

所以答案与问题没有太大关系,所以总而言之,对于任何因为想知道同样的事情而发现这个问题的人:

答案是 YES - Table 存储实际上是高度一致的,无论您是 'very fast' 还是从另一个连接都无关紧要位置。

如评论中所述,Azure Table 存储 高度一致。数据一写入存储就可供您使用。

这与 Cosmos DB Table 存储形成对比,其中有许多一致性级别,数据在写入后可能无法立即供您读取,具体取决于一致性级别集。