Example #1
0
        static void Main(string[] args)
        {
            InternalLoggerFactory.DefaultFactory = LoggerFactory.Create(builder =>
            {
                builder.AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddSimpleConsole(c => c.TimestampFormat = "[yyyy-MM-dd HH:mm:ss]");
            });
            //var dbProviderFactory = ShardingCreateDbProviderFactory.CreateDataSource(dataSourceMap, new ShardingRuleConfiguration(),
            //    new Dictionary<string, object>());
            var dataSourceMap = new Dictionary <string, IDataSource>()
            {
                {
                    "ds0",
                    new GenericDataSource(MySqlConnectorFactory.Instance, conn, true)
                }
            };
            //2、分库分表配置
            ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

            //2.2、配置各个表的分库分表策略,这里只配了一张表的就是t_order
            shardingRuleConfig.TableRuleConfigs.Add(CreateSysUserModTableRule());
            //2.5、配置默认分表规则
            shardingRuleConfig.DefaultTableShardingStrategyConfig = new NoneShardingStrategyConfiguration();
            //2.6、配置默认分库规则(不配置分库规则,则只采用分表规则)
            shardingRuleConfig.DefaultDatabaseShardingStrategyConfig = new NoneShardingStrategyConfiguration();
            //2.7、配置默认数据源
            shardingRuleConfig.DefaultDataSourceName = "ds0";
            var shardingDbProviderFactory = new ShardingDbProviderFactory(dataSourceMap, shardingRuleConfig, new Dictionary <string, object>());

            Test1(shardingDbProviderFactory);
        }
 public ShardingDataSourceNames(ShardingRuleConfiguration shardingRuleConfig,
                                ICollection <string> rawDataSourceNames)
 {
     this.shardingRuleConfig = shardingRuleConfig ??
                               throw new ArgumentNullException(
                                         "can not construct ShardingDataSourceNames with null ShardingRuleConfig");
     DataSourceNames = GetAllDataSourceNames(rawDataSourceNames);
 }
 public ShardingRule(ShardingRuleConfiguration shardingRuleConfig, ICollection <string> dataSourceNames)
 {
     if (shardingRuleConfig == null)
     {
         throw new ArgumentNullException(nameof(shardingRuleConfig));
     }
     if (dataSourceNames == null || dataSourceNames.IsEmpty())
     {
         throw new ArgumentNullException("data sources cannot be empty.");
     }
     this.RuleConfiguration  = shardingRuleConfig;
     ShardingDataSourceNames = new ShardingDataSourceNames(shardingRuleConfig, dataSourceNames);
     TableRules        = CreateTableRules(shardingRuleConfig);
     BroadcastTables   = shardingRuleConfig.BroadcastTables;
     BindingTableRules = CreateBindingTableRules(shardingRuleConfig.BindingTableGroups);
     DefaultDatabaseShardingStrategy = CreateDefaultShardingStrategy(shardingRuleConfig.DefaultDatabaseShardingStrategyConfig);
     DefaultTableShardingStrategy    = CreateDefaultShardingStrategy(shardingRuleConfig.DefaultTableShardingStrategyConfig);
     DefaultShardingKeyGenerator     = CreateDefaultKeyGenerator(shardingRuleConfig.DefaultKeyGeneratorConfig);
     MasterSlaveRules = CreateMasterSlaveRules(shardingRuleConfig.MasterSlaveRuleConfigs);
 }
 private string GetDefaultGenerateKeyColumn(ShardingRuleConfiguration shardingRuleConfig)
 {
     return(shardingRuleConfig.DefaultKeyGeneratorConfig?.Column);
 }
 private ICollection <TableRule> CreateTableRules(ShardingRuleConfiguration shardingRuleConfig)
 {
     return(shardingRuleConfig.TableRuleConfigs.Select(o =>
                                                       new TableRule(o, ShardingDataSourceNames, GetDefaultGenerateKeyColumn(shardingRuleConfig))).ToList());
 }
Example #6
0
        static void Main(string[] args)
        {
            InternalLoggerFactory.DefaultFactory = LoggerFactory.Create(builder =>
            {
                builder.AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddSimpleConsole(c => c.TimestampFormat = "[yyyy-MM-dd HH:mm:ss]");
            });
            //var dbProviderFactory = ShardingCreateDbProviderFactory.CreateDataSource(dataSourceMap, new ShardingRuleConfiguration(),
            //    new Dictionary<string, object>());
            var dataSourceMap = new Dictionary <string, IDataSource>()
            {
                {
                    "ds0",
                    new GenericDataSource(MySqlConnectorFactory.Instance, conn, true)
                }
            };
            //2、分库分表配置
            ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();

            //2.2、配置各个表的分库分表策略,这里只配了一张表的就是t_order
            shardingRuleConfig.TableRuleConfigs.Add(CreateSysUserModTableRule());
            //2.5、配置默认分表规则
            shardingRuleConfig.DefaultTableShardingStrategyConfig = new NoneShardingStrategyConfiguration();
            //2.6、配置默认分库规则(不配置分库规则,则只采用分表规则)
            shardingRuleConfig.DefaultDatabaseShardingStrategyConfig = new NoneShardingStrategyConfiguration();
            //2.7、配置默认数据源
            shardingRuleConfig.DefaultDataSourceName = "ds0";
            var shardingDbProviderFactory = new ShardingDbProviderFactory(dataSourceMap, shardingRuleConfig, new Dictionary <string, object>());

            // var dataSource = ShardingDataSourceFactory.CreateDataSource(dataSourceMap, shardingRuleConfig, new Dictionary<string, object>());
            Query(shardingDbProviderFactory);
            // Stopwatch stopwatch = Stopwatch.StartNew();
            // for (int i = 0; i < 1000; i++)
            // {
            //     QueryTest1(shardingDbProviderFactory);
            // }
            // stopwatch.Stop();
            // Console.WriteLine($"第1次:{stopwatch.ElapsedMilliseconds}");
            // stopwatch.Restart();
            // for (int i = 0; i < 1000; i++)
            // {
            //     QueryTest2();
            // }
            // stopwatch.Stop();
            // Console.WriteLine($"第2次:{stopwatch.ElapsedMilliseconds}");
            //
            // stopwatch.Restart();
            // for (int i = 0; i < 1000; i++)
            // {
            //     QueryTest1(shardingDbProviderFactory);
            // }
            // stopwatch.Stop();
            // Console.WriteLine($"第3次:{stopwatch.ElapsedMilliseconds}");
            //
            // stopwatch.Restart();
            // for (int i = 0; i < 1000; i++)
            // {
            //     QueryTest2();
            // }
            // stopwatch.Stop();
            // Console.WriteLine($"第4次:{stopwatch.ElapsedMilliseconds}");


            //for (int i = 0; i < 20; i++)
            //{
            QueryPage(shardingDbProviderFactory);
            QueryMax(shardingDbProviderFactory);
            Delete(shardingDbProviderFactory);
            Insert(shardingDbProviderFactory);
            Update(shardingDbProviderFactory);
            Query(shardingDbProviderFactory);
            Query1(shardingDbProviderFactory);
            //}
        }
Example #7
0
        // public static readonly ShardingDbProviderFactory Instance = new ShardingDbProviderFactory();
        // private  IDataSource _dataSource;
        //
        // public static void Init(IDictionary<string, DbProviderFactory> dataSourceMap, ShardingRuleConfiguration shardingRuleConfig, IDictionary<string, object> props)
        // {
        //     Instance._dataSource= ShardingDataSourceFactory.CreateDataSource(dataSourceMap, shardingRuleConfig, new Dictionary<string, object>());
        // }
        public ShardingDbProviderFactory(IDictionary <string, IDataSource> dataSourceMap, ShardingRuleConfiguration shardingRuleConfig, IDictionary <string, object> props)
        {
            _dataSourceMap     = dataSourceMap;
            _defaultDataSource = dataSourceMap.Values.FirstOrDefault(o => o.IsDefault()) ??
                                 throw new InvalidOperationException("not found default data source for init sharding");
            var databaseType = CreateDatabaseType();

            _shardingRuntimeContext = new ShardingRuntimeContext(dataSourceMap, new ShardingRule(shardingRuleConfig, dataSourceMap.Keys), props, databaseType);
        }