示例#1
0
        public void AddShardItem_Test()
        {
            ShardConfiguration shardConfiguration = new ShardConfiguration(3);
            IShardKeyAlgorithm shardKeyAlgorithm  = new EvenlyDistributedShardKeyAlgorithm(shardConfiguration);
            InMemoryDB         db = new InMemoryDB(shardConfiguration, shardKeyAlgorithm);

            AddCustomer(db, 1);
            AddCustomer(db, 2);
            AddCustomer(db, 3);
            AddCustomer(db, 4);

            // 3 shards
            var stats = db.GetTotalShardItems();

            Assert.AreEqual(2, stats[0].ItemsCount);
            Assert.AreEqual(1, stats[1].ItemsCount);
            Assert.AreEqual(1, stats[2].ItemsCount);

            // 4 shards
            db.AddShard();
            AddCustomer(db, 5);
            AddCustomer(db, 6);

            stats = db.GetTotalShardItems();
            Assert.AreEqual(3, stats[0].ItemsCount);
            Assert.AreEqual(2, stats[1].ItemsCount);
            Assert.AreEqual(1, stats[2].ItemsCount);

            // 5 shards
            db.AddShard();

            AddCustomer(db, 7);
            AddCustomer(db, 8);
            AddCustomer(db, 9);
            AddCustomer(db, 10);
            AddCustomer(db, 11);

            stats = db.GetTotalShardItems();
            Assert.AreEqual(4, stats[0].ItemsCount);
            Assert.AreEqual(3, stats[1].ItemsCount);
            Assert.AreEqual(2, stats[2].ItemsCount);
            Assert.AreEqual(1, stats[3].ItemsCount);
            Assert.AreEqual(1, stats[4].ItemsCount);
        }
示例#2
0
        public void ChangeShardCount_Test()
        {
            ShardConfiguration shardConfiguration = new ShardConfiguration(3);
            IShardKeyAlgorithm shardKeyAlgorithm  = new EvenlyDistributedShardKeyAlgorithm(shardConfiguration);
            InMemoryDB         dataProvider       = new InMemoryDB(shardConfiguration, shardKeyAlgorithm);
            int shardId;

            shardId = dataProvider.GetShardId("1");
            Assert.AreEqual(1, shardId);
            shardId = dataProvider.GetShardId("2");
            Assert.AreEqual(2, shardId);
            shardId = dataProvider.GetShardId("3");
            Assert.AreEqual(3, shardId);
            shardId = dataProvider.GetShardId("4");
            Assert.AreEqual(1, shardId);
            shardId = dataProvider.GetShardId("123");
            Assert.AreEqual(3, shardId);

            // 3 + 1 shards
            dataProvider.AddShard();

            shardId = dataProvider.GetShardId("1");
            Assert.AreEqual(1, shardId);
            shardId = dataProvider.GetShardId("2");
            Assert.AreEqual(2, shardId);
            shardId = dataProvider.GetShardId("3");
            Assert.AreEqual(3, shardId);
            shardId = dataProvider.GetShardId("4");
            Assert.AreEqual(1, shardId);
            shardId = dataProvider.GetShardId("123");
            Assert.AreEqual(3, shardId);
            shardId = dataProvider.GetShardId("5");
            Assert.AreEqual(1, shardId);
            shardId = dataProvider.GetShardId("6");
            Assert.AreEqual(2, shardId);
            shardId = dataProvider.GetShardId("7");
            Assert.AreEqual(3, shardId);
            shardId = dataProvider.GetShardId("8");
            Assert.AreEqual(4, shardId);
        }
示例#3
0
        public static void RunTest(int shardCount, int itemsCount, int customerItemsCount)
        {
            int totalSuccess = 0;
            var tasks        = new List <Task>();
            var factory      = new System.Threading.Tasks.TaskFactory();

            //using (GetTransaction())
            //{
            Console.WriteLine($"Running test with {shardCount} shards and {itemsCount} items and {customerItemsCount} customer items");

            ShardConfiguration shardConfiguration = new ShardConfiguration(shardCount);
            IShardKeyAlgorithm shardKeyAlgorithm  = new EvenlyDistributedShardKeyAlgorithm(shardConfiguration);

            using (SqlDb db = new SqlDb(shardConfiguration, shardKeyAlgorithm))
            {
                try
                {
                    //db.ClearAll();

                    Stopwatch sw = new Stopwatch();
                    sw.Start();
                    for (int i = 0; i < itemsCount; i++)
                    {
                        try
                        {
                            db.AddCustomer(new Common.SampleCustomerInformation()
                            {
                                CustomerId = i,
                                Title      = $"Customer {i}",
                                Address    = "Address one + two",
                                Birthdate  = DateTime.Now,
                                Job        = "Jobs of the future is related to data"
                            });
                            Interlocked.Increment(ref totalSuccess);
                        }
                        catch (Exception ex)
                        {
                        }
                    }

                    sw.Stop();
                    var avg = sw.ElapsedMilliseconds / itemsCount;

                    Console.WriteLine($"ShardCount: {shardCount}, Insert Count: {itemsCount}, Avg: {avg}, Total Success: {totalSuccess}");


                    sw.Reset();
                    sw.Start();
                    var list = Enumerable.Range(0, itemsCount).ToList();

                    Parallel.ForEach(list, (customerId) =>
                    {
                        //foreach (var customerId in list)
                        //{
                        for (int i = 0; i < customerItemsCount; i++)
                        {
                            try
                            {
                                db.AddOrder(new Common.SampleOrderInformation()
                                {
                                    CustomerId     = customerId,
                                    Count          = customerId + i + 10,
                                    Price          = (customerId + i + 3453) * 10,
                                    Description    = "some order detail",
                                    OrderEntryDate = DateTime.Now
                                });
                            }
                            catch (Exception ex)
                            {
                            }
                        }
                    });
                    //}

                    sw.Stop();

                    avg = sw.ElapsedMilliseconds / itemsCount;

                    Console.WriteLine($"ShardCount: {shardCount}, Insert Count: {itemsCount * customerItemsCount}, Avg: {avg}, Total: {sw.Elapsed.TotalSeconds:0.0}");
                }
                finally
                {
                    db.ClearAll();
                }
            }
        }