我正在尝试使用 RavenDB 为我的工作场所设置一个简单的概念证明。该演示目前有 2 个分片执行基本的循环策略。然后它有另外 2 个分片来复制这 2 个分片,作为故障转移。
我们浏览并保存了各种业务记录。我们会得到看起来正确的 ID,例如 matt-businesses-35 和 bob-businesses-42。但是,当我们编辑一个时,它不会更新现有记录,它会插入。大多数情况下,除了原始 ID 之外,我们最终会得到一个类似于 matt-bob-business-42 的 ID。
我们遵循此页面作为指南:http: //msdn.microsoft.com/en-us/magazine/hh547101.aspx
然而,我们通过替换 DataDocumentstore.cs 中的代码来修改它以进行分片:
var shards = new Dictionary<string, IDocumentStore>
{
{"bob", new DocumentStore() {Url = "http://bob:8080"}},
{"matt", new DocumentStore() {Url = "http://matt:8080"}},
};
var shardStrategy = new ShardStrategy(shards);
instance = new ShardedDocumentStore(shardStrategy);
instance.Conventions.IdentityPartsSeparator = "-";
instance.Initialize();
编辑操作如下所示:
public ActionResult Edit(string id)
{
var model = DocumentSession.Load<Business>(id);
return View(model);
}
[HttpPost]
public ActionResult Edit(string id, Business business)
{
try
{
if (ModelState.IsValid)
{
DocumentSession.Store(business);
return RedirectToAction("Index");
}
return View(business);
}
catch
{
return View();
}
}
我们是否设置了错误来解决这些奇怪的问题?这似乎是一个相当简单的设置,但更新总是插入一个新的键名。