Example #1
0
        public static void Main(string[] args)
        {
            // 1. Create databases.
            var mongodbDatabase = new MongodbDatabase("mongodb://admin(admin):adminpwd0375@localhost:27017/local");
            var mysqlDatabase   = new AdoNetDatabase("server=.\\SQLEXPRESS; Database=UniformTest; Trusted_Connection=yes;", SqlServerDialect.Provider);

            // 2. Create database metadata
            var database = UniformDatabase.Create(config => config
                                                  .RegisterDocument <CommentDocument>()
                                                  .RegisterDocument <UserDocument>()
                                                  .RegisterDocument <QuestionDocument>()
                                                  .RegisterDocument <VoteDocument>()
                                                  .RegisterDatabase(SampleDatabases.Mongodb, mongodbDatabase)
                                                  .RegisterDatabase(SampleDatabases.Sql, mysqlDatabase)
                                                  );

            var mydb = new MyDatabase(database);

            database.EnterInMemoryMode();
            mydb.Comments.Save("asdfasdkhafhasldfh", c => { });

            // 3. Optional.
            RunViewModelRegeneration(database);

            var stopwatch = Stopwatch.StartNew();

            database.LeaveInMemoryMode(true);
            stopwatch.Stop();
            Console.WriteLine("Flushed in {0:n0} ms", stopwatch.ElapsedMilliseconds);
            Console.ReadKey();
        }
Example #2
0
        public static void RunViewModelRegeneration(UniformDatabase database)
        {
            Console.Write("Creating list of events in memory... ");

            var events = new List <Object>();

            for (int i = 0; i < 1000; i++)
            {
                var userId    = String.Format("user/{0}", i);
                var question1 = String.Format("user/{0}/question/{1}", i, 1);
                var question2 = String.Format("user/{0}/question/{1}", i, 2);
                var question3 = String.Format("user/{0}/question/{1}", i, 3);
                var commentId = String.Format("user/{0}/comment/{1}", i, 1);
                var voteId    = String.Format("user/{0}/comment/{1}/vote/{2}", i, 1, 1);

                events.Add(new UserCreated(userId, "Tom", "It's me"));
                events.Add(new QuestionCreated(question1, userId, "Who are you?"));
                events.Add(new QuestionCreated(question2, userId, "And you?"));
                events.Add(new UserNameChanged(userId, "Super John"));
                events.Add(new QuestionCreated(question3, userId, "How are you?"));
                events.Add(new QuestionUpdated(question3, userId, "Updated question. How are you?"));
                events.Add(new CommentAdded(commentId, userId, question3, "My first comment!"));
                events.Add(new VoteAdded(voteId, commentId, userId, "Nice comment!"));
                events.Add(new UserNameChanged(userId, "Upgraded Tonny"));
                events.Add(new UserNameChanged(userId, "Final Tonny"));
            }

//            SaveEventsToFile(events);
//            var result = LoadEventsFromFile();

            Console.WriteLine("Done. Managed memory used: {0:n0} mb.", GC.GetTotalMemory(false) / 1024 / 1024);

            var container = new UnityContainer();

            container.RegisterInstance <UniformDatabase>(database);

            var dispatcher = Dispatcher.Create(builder => builder
                                               .SetServiceLocator(new UnityServiceLocator(container))
                                               .AddHandlers(typeof(UserCreated).Assembly)
                                               );

            Console.WriteLine("Regeneration started...");
            var stopwatch = Stopwatch.StartNew();

            for (int i = 0; i < events.Count; i++)
            {
                if (i % 100000 == 0 && i != 0)
                {
                    Console.WriteLine("{0:n0} events processed.", i);
                }

                var evnt = events[i];
                dispatcher.Dispatch(evnt);
            }
            stopwatch.Stop();

            Console.WriteLine("Done in {0:n0} ms. {1:n0} events processed.", stopwatch.ElapsedMilliseconds, events.Count);
            Console.ReadKey();
        }
Example #3
0
        public void ConfigureUniform(IContainer container)
        {
            var settings = container.GetInstance <SiteSettings>();

            // 1. Create databases
            var mongodbDatabase = new MongodbDatabase(settings.MongoViewConnectionString);

            // 2. Configure uniform
            var uniform = UniformDatabase.Create(config => config
                                                 .RegisterDocuments(typeof(UserView).Assembly)
                                                 .RegisterDatabase(ViewDatabases.Mongodb, mongodbDatabase));

            container.Configure(config => config.For <UniformDatabase>().Singleton().Use(uniform));
        }
Example #4
0
        public void UserState()
        {
            var db      = new InMemoryDatabase();
            var uniform = UniformDatabase.Create(config => config
                                                 .RegisterDocuments(typeof(UserView).Assembly)
                                                 .RegisterDatabase(ViewDatabases.Mongodb, db));
            var viewDb = new ViewDatabase(uniform);

            viewDb.Users.Save(new UserView()
            {
                Id       = "me1",
                UserName = "******"
            });
            var storedUser = db.GetCollection <UserView>(ViewCollections.Users).GetById("me1");

            Assert.AreEqual("me1", storedUser.Id);
            Assert.AreEqual("User Name", storedUser.UserName);
        }
Example #5
0
        public void SetUp()
        {
            IContainer container = ObjectFactory.Container;

            Table = new GameTableAggregate();
            Table.Setup(new GameTableState(), 0);

            var db      = new InMemoryDatabase();
            var uniform = UniformDatabase.Create(config => config
                                                 .RegisterDocuments(typeof(UserView).Assembly)
                                                 .RegisterDatabase(ViewDatabases.Mongodb, db));

            View = new ViewDatabase(uniform);
            container.Configure(x => x.For <ViewDatabase>().Use(View));

            Dispatcher = Dispatcher.Create(d => d
                                           .AddHandlers(typeof(UserView).Assembly, new[] { "Poker.Handlers.ViewHandlers", "Poker.Handlers.ViewHandlers" })
                                           .SetServiceLocator(new StructureMapServiceLocator(container)));
        }
Example #6
0
        public static void RunViewModelRegeneration(UniformDatabase database)
        {
            Console.Write("Creating list of events in memory... ");

            var events = new List<Object>();
            for (int i = 0; i < 1000; i++)
            {
                var userId = String.Format("user/{0}", i);
                var question1 = String.Format("user/{0}/question/{1}", i, 1);
                var question2 = String.Format("user/{0}/question/{1}", i, 2);
                var question3 = String.Format("user/{0}/question/{1}", i, 3);
                var commentId = String.Format("user/{0}/comment/{1}", i, 1);
                var voteId = String.Format("user/{0}/comment/{1}/vote/{2}", i, 1, 1);

                events.Add(new UserCreated(userId, "Tom", "It's me"));
                events.Add(new QuestionCreated(question1, userId, "Who are you?"));
                events.Add(new QuestionCreated(question2, userId, "And you?"));
                events.Add(new UserNameChanged(userId, "Super John"));
                events.Add(new QuestionCreated(question3, userId, "How are you?"));
                events.Add(new QuestionUpdated(question3, userId, "Updated question. How are you?"));
                events.Add(new CommentAdded(commentId, userId, question3, "My first comment!"));
                events.Add(new VoteAdded(voteId, commentId, userId, "Nice comment!"));
                events.Add(new UserNameChanged(userId, "Upgraded Tonny"));
                events.Add(new UserNameChanged(userId, "Final Tonny"));
            }

            //            SaveEventsToFile(events);
            //            var result = LoadEventsFromFile();

            Console.WriteLine("Done. Managed memory used: {0:n0} mb.", GC.GetTotalMemory(false) / 1024 / 1024);

            var container = new UnityContainer();
            container.RegisterInstance<UniformDatabase>(database);

            var dispatcher = Dispatcher.Create(builder => builder
                .SetServiceLocator(new UnityServiceLocator(container))
                .AddHandlers(typeof(UserCreated).Assembly)
            );

            Console.WriteLine("Regeneration started...");
            var stopwatch = Stopwatch.StartNew();
            for (int i = 0; i < events.Count; i++)
            {
                if (i % 100000 == 0 && i != 0)
                    Console.WriteLine("{0:n0} events processed.", i);

                var evnt = events[i];
                dispatcher.Dispatch(evnt);
            }
            stopwatch.Stop();

            Console.WriteLine("Done in {0:n0} ms. {1:n0} events processed.", stopwatch.ElapsedMilliseconds, events.Count);
            Console.ReadKey();
        }
Example #7
0
 public void Initialize(UniformDatabase database)
 {
     _uniformDatabase = database;
 }
Example #8
0
 public MyDatabase(UniformDatabase database)
 {
     _database = database;
 }
Example #9
0
        public void Start()
        {
            OutputWriter.WriteLine("PAQK.Reply");
            OutputWriter.WriteLine("---------");
            OutputWriter.WriteLine("  Events Database:");
            OutputWriter.WriteLine("      {0}", Settings.MongoEventsConnectionString);
            OutputWriter.WriteLine("  View Database:");
            OutputWriter.WriteLine("      {0}", Settings.MongoViewConnectionString);


            if (InputReader != null)
            {
                OutputWriter.WriteLine();
                OutputWriter.WriteLine();
                OutputWriter.WriteLine("Are you sure that you want to drop these databases? (type 'yes' or 'no')");
                OutputWriter.WriteLine("   {0}", Settings.MongoViewConnectionString);

                OutputWriter.Write("> ");

                var answer = InputReader.ReadLine();
                if (String.Compare(answer, "yes", StringComparison.OrdinalIgnoreCase) != 0)
                {
                    return;
                }
            }


            try
            {
                BeforeReplayPreparations();
                UniformDatabase.EnterInMemoryMode();

                var transitions = TransitionRepository.GetTransitions();
                var stopwatch   = Stopwatch.StartNew();

                var counter = 0;
                foreach (var transition in transitions)
                {
                    foreach (var evnt in transition.Events)
                    {
                        if (++counter % 10000 == 0)
                        {
                            OutputWriter.WriteLine("Events #{0:n0}", counter);
                        }

                        DispatchAsync((IEvent)evnt.Data);
                    }
                }

                OutputWriter.WriteLine("Waiting for dispatch completion...");
                WaitForDispatchCompletion();

                OutputWriter.WriteLine("Flushing...");
                UniformDatabase.LeaveInMemoryMode(true);
                stopwatch.Stop();
                OutputWriter.WriteLine("Flush completed");

                var message = String.Format("Replayed in {0}. Total number of events {1:n0}",
                                            stopwatch.Elapsed.ToReadableString(), counter);

                logger.Info(message);
                OutputWriter.WriteLine(message);

                if (InputReader != null)
                {
                    InputReader.ReadKey();
                }
            }
            catch (Exception ex)
            {
                logger.Fatal(ex);
                OutputWriter.WriteLine(ex.Message);
            }
        }
Example #10
0
 public MyDatabase(UniformDatabase database)
 {
     _database = database;
 }
Example #11
0
 public ViewDatabase(UniformDatabase db)
 {
     _db = db;
 }