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()); }
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); //} }
// 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); }