public Index() { #region store var shards = new Dictionary<string, IDocumentStore> { {"Asia", new DocumentStore {Url = "http://localhost:8080"}}, {"Middle East", new DocumentStore {Url = "http://localhost:8081"}}, {"America", new DocumentStore {Url = "http://localhost:8082"}}, }; var shardStrategy = new ShardStrategy(shards) .ShardingOn<Company>(company => company.Region) .ShardingOn<Invoice>(x => x.CompanyId); var documentStore = new ShardedDocumentStore(shardStrategy).Initialize(); #endregion #region SaveEntities using (var session = documentStore.OpenSession()) { var asian = new Company { Name = "Company 1", Region = "Asia" }; session.Store(asian); var middleEastern = new Company { Name = "Company 2", Region = "Middle-East" }; session.Store(middleEastern); var american = new Company { Name = "Company 3", Region = "America" }; session.Store(american); session.Store(new Invoice { CompanyId = american.Id, Amount = 3, IssuedAt = DateTime.Today.AddDays(-1) }); session.Store(new Invoice { CompanyId = asian.Id, Amount = 5, IssuedAt = DateTime.Today.AddDays(-1) }); session.Store(new Invoice { CompanyId = middleEastern.Id, Amount = 12, IssuedAt = DateTime.Today }); session.SaveChanges(); } #endregion #region Query using (var session = documentStore.OpenSession()) { //get all, should automagically retrieve from each shard var allCompanies = session.Query<Company>() .Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Where(company => company.Region == "Asia") .ToArray(); foreach (var company in allCompanies) Console.WriteLine(company.Name); } #endregion documentStore.Dispose(); }
static void Main() { var consoleAppender = new ConsoleAppender { Layout = new SimpleLayout(), }; consoleAppender.AddFilter(new LoggerMatchFilter { AcceptOnMatch = true, LoggerToMatch = "Raven.Client" }); consoleAppender.AddFilter(new DenyAllFilter()); BasicConfigurator.Configure(consoleAppender); // start 5 instances of Raven's servers Console.WriteLine("Starting..."); DeleteDirectories("Users", "Blogs", "Posts.1", "Posts.2", "Posts.3"); var ravenDbServers = StartServers(); Console.WriteLine("All servers started..."); var shards = new Shards { new DocumentStore { Identifier = "Users", Url = "http://*****:*****@ Rahien" }; session.Store(user); session.Store(blog); // we have to save to Raven to get the generated id for the blog instance session.SaveChanges(); var posts = new List<Post>(); for (var i = 0; i < 6; i++) { var post = new Post { BlogId = blog.Id, UserId = user.Id, Content = "Just a post", Title = "Post #" + (i + 1) }; posts.Add(post); session.Store(post); } session.SaveChanges(); } // queries using (var session = documentStore.OpenSession()) { session.LuceneQuery<User>().WaitForNonStaleResults().ToArray(); session.LuceneQuery<Blog>().WaitForNonStaleResults().ToArray(); session.LuceneQuery<Post>().WaitForNonStaleResults().ToArray(); } // loading using (var session = documentStore.OpenSession()) { session.Load<User>("users/ayende"); session.Load<Blog>("blogs/1"); session.Load<Post>("posts/1/2"); session.Load<Post>("posts/2/2"); } documentStore.Dispose(); foreach (var server in ravenDbServers) { server.Dispose(); } }