我有一個正在爲Windows Azure開發的ASP.NET應用程序。我們認爲有必要使用數據庫分片來提高寫入時間,因爲該應用程序非常重要,但數據很容易被隔離。但是,我需要跟蹤所有實例中的一些中心變量,並且我不確定存儲該信息的最佳位置。我有什麼選擇?如何在分片環境中管理集中值
要求:
- 必須耐用,能存活的實例重啓
- 必須同步。在這種情況下避免衝突的更新或者至少拋出異常是非常重要的,而不是默默地重寫值或失敗。
- 必須相當快(每秒
我想過寫一個單獨的組件上,簡單地讀取存儲/寫入值,並將它們刷新到磁盤幾乎每一個工作者角色運行2000+讀/寫經常,但我認爲必須有一些已經爲此目的而寫的東西,我可以在Windows Azure中適用。
我認爲我在尋找的是像Apache ZooKeeper這樣的系統,但我不想「處理在工作角色啓動期間安裝JRE以及所有爵士樂。
Ed它:基於下面的建議,我想用下面的代碼使用Azure的表存儲:
var context = table.ServiceClient.GetTableServiceContext();
var item = context.CreateQuery<OfferDataItemTableEntity>(table.Name)
.Where(x => x.PartitionKey == Name).FirstOrDefault();
if (item == null)
{
item = new OfferDataItemTableEntity(Name);
context.AddObject(table.Name, item);
}
if (item.Allocated < Quantity)
{
allocated = ++item.Allocated;
context.UpdateObject(item);
context.SaveChanges();
return true;
}
然而,context.UpdateObject(item)
調用失敗The context is not currently tracking the entity.
不查詢上下文項目最初將其添加到上下文跟蹤機制?
我的要求是能夠更新一個實體,只有當前一個值與期望值相匹配時才更新實體(樂觀鎖定,即'更新實體,其中property = value'。這可以通過表存儲來完成嗎?我已經在網絡上看到過它的提示,但沒有具體的例子...... – Chris
是的,你可以使用ETag來實現這一點,新SDK使得這很容易 –
我試圖按照你的建議去做,但是出現錯誤,請參閱上面的編輯 – Chris