RavenDB を使用して職場の簡単な概念実証をセットアップしようとしています。デモには、現在、基本的なラウンド ロビン戦略を実行する 2 つのシャードがあります。次に、フェイルオーバーとして、それらの 2 つのそれぞれを複製するための 2 つのシャードがあります。
さまざまなビジネス記録を調べて保存しました。Matt-businesses-35 や bob-businesses-42 など、適切に見える ID を取得します。ただし、1 つを編集すると、既存のレコードは更新されず、挿入が行われます。そしてほとんどの場合、元の 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();
}
}
これらの奇妙な問題を発生させるために、何か間違った設定をしましたか? かなり単純なセットアップのように見えますが、更新は常に新しいキー名で挿入されます。