Yrl*_*lec 17 concurrency primary-key auto-increment identity-column azure-storage
我目前正在开发Azure表存储的应用程序.在该应用程序中,我有一个表,它将具有相对较少的插入(几千/天),并且这些实体的主键将在另一个表中使用,该表将具有数十亿行.
因此,我正在寻找一种方法来使用自动递增的整数而不是GUID作为小表中的主键(因为它将节省大量存储和插入的可伸缩性并不是真正的问题).
关于这个主题已经有过一些讨论,例如http://social.msdn.microsoft.com/Forums/en/windowsazure/thread/6b7d1ece-301b-44f1-85ab-eeb274349797.
但是,由于并发问题可能很难调试和发现,我对自己实现这一点感到有点不舒服.因此,我的问题是,是否有一个经过充分测试的阻止?
cre*_*7or 15
对于每个都会在搜索中找到它的人来说,有一个更好的解决方案.桌锁的最短时间是15秒 - 这太可怕了.如果要创建真正可扩展的解决方案,请不要使用它.用Etag
!
在表中为ID创建一个实体(您甚至可以将其命名为ID或其他).
1)阅读它.
2)增量.
3)InsertOrUpdate WITH ETag
指定(来自读取查询).
如果上一次操作(InsertOrUpdate
)成功,那么您将拥有一个新的,唯一的,自动递增的ID.如果失败(HttpStatusCode
== 412 除外),则表示其他客户端更改了它.所以,再次重复1,2和3.通常的时间Read+InsertOrUpdate
不到200ms.我在github上使用source的测试实用程序.
我还没有实现这个,但正在努力......
您可以将下一个要使用的 id 放入队列中,然后在需要时将它们从队列中取出。
您需要保留一个表来包含添加到队列中的最大数字的值。如果您知道不会使用大量整数,则可以让工作人员经常醒来并确保队列中仍然有整数。您还可以有一个已使用的 int 队列,工作人员可以检查以密切关注使用情况。
您还可以连接该工作人员,这样如果当您的代码需要一个 id(偶然)时队列为空,它可以中断该工作人员的午睡以尽快创建更多密钥。
如果该调用失败,您将需要一种方法(告诉工作人员您将为他们完成工作(锁定),然后让工作人员获取下一个 id 并解锁)
然后使用新值。
归档时间: |
|
查看次数: |
14351 次 |
最近记录: |