public void ShardingStrategyCRUDTest() { var strategy = new ShardingStrategy() { ID = "AreaTableSharding", DisplayName = "地区分表策略", PostFixListConfig = "sd,hb,gd,bj,sz,tj,sx,nm,hb,hn,sh", ShardingType = ShardingType.Enum }; try { ShardingStrategyService.GetInstance().DeleteShardingStrategy(strategy.ID); ShardingStrategyService.GetInstance().SaveShardingStrategy(strategy); var queryStrategy = ShardingStrategyService.GetInstance().GetShardingStrategy(strategy.ID); Assert.IsNotNull(queryStrategy); Assert.AreEqual(queryStrategy.DisplayName, strategy.DisplayName); Assert.AreEqual(queryStrategy.PostFixListConfig, strategy.PostFixListConfig); Assert.AreEqual(queryStrategy.ShardingType, strategy.ShardingType); TableShardingStrategy table = new TableShardingStrategy(queryStrategy); Assert.IsNotNull(table); Assert.AreEqual(queryStrategy.DisplayName, table.DisplayName); Assert.AreEqual(queryStrategy.PostFixListConfig, table.PostFixListConfig); Assert.AreEqual(queryStrategy.ShardingType, table.ShardingType); } finally { ShardingStrategyService.GetInstance().DeleteShardingStrategy(strategy.ID); } }
/// <summary> /// 获取分区表名称 /// </summary> /// <param name="strategy">分区策略</param> /// <param name="logicalTableName">逻辑表名</param> /// <returns>分区表名称</returns> public List <string> GetShardingTableNames(TableShardingStrategy strategy, string logicalTableName) { var tables = new List <string>(); strategy.PostFixValueList.ForEach(i => tables.Add(string.Format("{0}{1}", logicalTableName, i))); return(tables); }
/// <summary> /// 获取单键表分区计算器 /// </summary> /// <param name="strategy">表Sharding策略</param> /// <returns>表分区分库计算器</returns> public static ISingleKeyTableShardingAlgorithm GetSingKeyShardingAlgorithm(TableShardingStrategy strategy) { ISingleKeyTableShardingAlgorithm algorithm = null; switch (strategy.ShardingType) { case ShardingType.Year: algorithm = new TableShardingYearAlgorithm(); break; case ShardingType.Enum: algorithm = new TableShardingEnumAlgorithm(); break; case ShardingType.Hash: algorithm = new TableShardingHashAlgorithm(strategy.ShardingFactor); break; default: break; } return(algorithm); }