我正在为 Windows Azure 开发一个 ASP.NET 应用程序。我们认为有必要对数据库使用分片来改善写入时间,因为应用程序的写入量很大,但数据很容易隔离。但是,我需要跟踪所有实例中的一些中心变量,并且我不确定存储该信息的最佳位置。我有哪些选择?
要求:
- 必须是持久的,可以在实例重启后存活
- 必须同步。避免冲突更新或至少在这种情况下抛出异常,而不是覆盖值或静默失败,这一点非常重要。
- 必须相当快(每秒 2000 次以上读/写
我曾考虑编写一个单独的组件以在工作角色上运行,该角色只需读取/写入内存中的值并经常将它们刷新到磁盘,但我认为必须为此目的已经编写了一些我可以在 Windows 中使用的东西天蓝色。
我认为我正在寻找的是像 Apache ZooKeeper 这样的系统,但我不想在工作角色启动期间安装 JRE 和所有那些爵士乐。
编辑:根据下面的建议,我正在尝试使用以下代码使用 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.
没有查询项目的上下文最初将其添加到上下文跟踪机制吗?