在最近4个小时内,我发现200多个请求在azure表报告409
上失败。我环顾四周,这意味着PK重复。由于这是一个专门用于记录的表格,因此我真的不关心密钥,所以我的RowKey
是Guid.NewGuid()
...
是否有另一个原因让azure表返回409
或我实际看到UUID发生冲突?
答案 0 :(得分:1)
很可能您的客户端没有看到HTTP 200响应表明插入成功(客户端超时,网络错误等),但插件确实在服务器端成功发生。然后,当客户端重试该操作时,它接收到409,因为该实体已经存在于服务器上。
如果您启用这些功能,您将能够在存储分析日志中看到相关证据。
您可以尝试解决初始客户端故障,但这并不能最终解决问题,因为您无论如何都需要处理此类故障。由于您只是编写日志记录数据,因此您可能不关心重试时的409,因此最好的解决方案是忽略它。其他可能的解决方案是使用“插入或替换”或“插入或合并”操作,而不仅仅是插入。
有关更多内容,请参阅https://github.com/Azure/azure-storage-java/issues/35或https://social.msdn.microsoft.com/Forums/azure/en-US/9ab80192-6450-41c2-a964-4ea092c1f6ef/table-storage-handling-retry-error-where-item-already-exists?forum=windowsazuredata。
答案 1 :(得分:0)
如果您比时钟更快地呼叫Guid.NewGuid()
,它可能会生成相同的Guid。尝试在Guid.NewGuid()
次呼叫之间放几毫秒。