From 376450e97290ffe2b34f75a1654fb43c069f2eca Mon Sep 17 00:00:00 2001 From: khalil Date: Fri, 29 Nov 2024 22:12:59 +0800 Subject: [PATCH] =?UTF-8?q?pom-sharding-=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accompany-sharding-service/pom.xml | 2 +- .../sharding/config/ShardingJdbcConfig.java | 268 ------------------ .../sharding/config/ShardingSphereConfig.java | 227 +++++++++++++++ .../BillRecordRangeShardingAlgorithm.java | 57 ---- .../BillRecordShardingAlgorithm.java | 36 --- .../DynamicCommentShardingAlgorithm.java | 28 -- ...erRoomMicRecordRangeShardingAlgorithm.java | 57 ---- ...yMemberRoomMicRecordShardingAlgorithm.java | 36 --- .../GameGoldLogRangeShardingAlgorithm.java | 57 ---- .../GameGoldLogShardingAlgorithm.java | 36 --- .../GiftSendRecordRangeShardingAlgorithm.java | 51 ---- .../GiftSendRecordShardingAlgorithm.java | 36 --- .../Lucky24RecordRangeShardingAlgorithm.java | 51 ---- .../Lucky24RecordShardingAlgorithm.java | 36 --- ...erChatMsgRecordRangeShardingAlgorithm.java | 48 ---- .../UserChatMsgRecordShardingAlgorithm.java | 30 -- ...InOutRoomRecordRangeShardingAlgorithm.java | 57 ---- .../UserInOutRoomRecordShardingAlgorithm.java | 36 --- accompany-dependencies/pom.xml | 3 +- 19 files changed, 230 insertions(+), 922 deletions(-) delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java create mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/DynamicCommentShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordRangeShardingAlgorithm.java delete mode 100644 accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordShardingAlgorithm.java diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/pom.xml b/accompany-base/accompany-sharding/accompany-sharding-service/pom.xml index 3185f86da..a3cd72a23 100644 --- a/accompany-base/accompany-sharding/accompany-sharding-service/pom.xml +++ b/accompany-base/accompany-sharding/accompany-sharding-service/pom.xml @@ -20,7 +20,7 @@ org.apache.shardingsphere - sharding-jdbc-core + shardingsphere-jdbc-core ${sharding-jdbc-core.version} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java deleted file mode 100644 index 6e9d33fce..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingJdbcConfig.java +++ /dev/null @@ -1,268 +0,0 @@ -package com.accompany.sharding.config; - -import com.accompany.common.utils.ResourceUtil; -import com.accompany.sharding.shardingalgorithm.*; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; -import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; -import org.apache.ibatis.plugin.Interceptor; -import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration; -import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration; -import org.apache.shardingsphere.api.config.sharding.strategy.ShardingStrategyConfiguration; -import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration; -import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory; -import org.mybatis.spring.annotation.MapperScan; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.DependsOn; -import org.springframework.context.annotation.Primary; -import org.springframework.jdbc.datasource.DataSourceTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -import javax.sql.DataSource; -import java.io.IOException; -import java.sql.SQLException; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -/** - * {这里添加描述} - * - * @author fangchengyan - * @date 2019-08-23 10:08 - */ -@EnableTransactionManagement -@Configuration -@MapperScan(value = {"com.accompany.sharding.mapper"}, sqlSessionFactoryRef = "shardingSqlSessionFactory") -public class ShardingJdbcConfig { - - @Autowired - private DataSource dataSource; - - @Autowired - private BillRecordShardingAlgorithm billRecordShardingAlgorithm; - - @Autowired - private BillRecordRangeShardingAlgorithm billRecordRangeShardingAlgorithm; - - @Autowired - private DynamicCommentShardingAlgorithm dynamicCommentShardingAlgorithm; - - @Autowired - private UserInOutRoomRecordShardingAlgorithm userInOutRoomRecordShardingAlgorithm; - - @Autowired - private UserInOutRoomRecordRangeShardingAlgorithm userInOutRoomRecordRangeShardingAlgorithm; - - @Autowired - private UserChatMsgRecordShardingAlgorithm userChatMsgRecordShardingAlgorithm; - - @Autowired - private UserChatMsgRecordRangeShardingAlgorithm userChatMsgRecordRangeShardingAlgorithm; - - @Autowired - private FamilyMemberRoomMicRecordShardingAlgorithm familyMemberRoomMicRecordShardingAlgorithm; - - @Autowired - private FamilyMemberRoomMicRecordRangeShardingAlgorithm familyMemberRoomMicRecordRangeShardingAlgorithm; - - @Autowired - private GameGoldLogShardingAlgorithm gameGoldLogShardingAlgorithm; - - @Autowired - private GameGoldLogRangeShardingAlgorithm gameGoldLogRangeShardingAlgorithm; - - @Autowired - private Lucky24RecordShardingAlgorithm lucky24RecordShardingAlgorithm; - - @Autowired - private Lucky24RecordRangeShardingAlgorithm lucky24RecordRangeShardingAlgorithm; - - @Autowired - private GiftSendRecordShardingAlgorithm giftSendRecordShardingAlgorithm; - - @Autowired - private GiftSendRecordRangeShardingAlgorithm giftSendRecordRangeShardingAlgorithm; - - @Bean("shardingDataSource") - public DataSource shardingDataSource() throws SQLException { - ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); - Collection tableRuleConfigs = shardingRuleConfig.getTableRuleConfigs(); - // 账单按月分表 - tableRuleConfigs.add(getBillRecordShardingTableRuleConfiguration()); - // 动态评论按动态id分表 - tableRuleConfigs.add(getDynamicCommentTableRuleConfiguration()); - // 进出房间按月分表 - tableRuleConfigs.add(getUserInOutRoomRecordShardingTableRuleConfiguration()); - //私聊按月分表 - tableRuleConfigs.add(getUserChatMsgRecordShardingTableRuleConfiguration()); - // 家族成员上下麦位记录 - tableRuleConfigs.add(getFamilyMemberRoomMicRecordShardingTableRuleConfiguration()); - //游戏日志 - tableRuleConfigs.add(getGameLogShardingTableRuleConfiguration()); - // - tableRuleConfigs.add(getLucky24RecordShardingTableRuleConfiguration()); - tableRuleConfigs.add(getGiftSendRecordShardingTableRuleConfiguration()); - - //属性配置 - Properties props = new Properties(); - //是否打印执行的sql语句 - props.setProperty("sql.show", "false"); - Map dataSourceMap = new HashMap<>(4); - dataSourceMap.put("ds", dataSource); - dataSourceMap.put("ds-1", dataSource); - return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props); - } - - @Bean("shardingSqlSessionFactory") - @DependsOn({"shardingDataSource", "pageInterceptor", "paginationInterceptor"}) - public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSource shardingDataSource, - Interceptor pageInterceptor, PaginationInterceptor paginationInterceptor) throws IOException { - MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); - sqlSessionFactoryBean.setDataSource(shardingDataSource); - String mapperLocations = "classpath*:/sharding/sqlmappers/*.xml"; - sqlSessionFactoryBean.setMapperLocations(ResourceUtil.getPathMatchingResource(mapperLocations)); - sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor, paginationInterceptor}); - return sqlSessionFactoryBean; - } - - @Bean("shardingTransactionManager") - @DependsOn({"shardingDataSource"}) - @Primary - public DataSourceTransactionManager transactionManager(@Qualifier("shardingDataSource") DataSource shardingDataSource) { - return new DataSourceTransactionManager(shardingDataSource); - } - - /** - * =====账单表分表策略===== - **/ - private TableRuleConfiguration getBillRecordShardingTableRuleConfiguration() { - String logicTable = "bill_record"; - String actualDataNodes = "ds.bill_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getBillRecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getBillRecordShardingStrategy() { - String shardingColumn = "create_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - billRecordShardingAlgorithm, billRecordRangeShardingAlgorithm); - } - - /** - * =======动态评论表分表策略=========== - **/ - private TableRuleConfiguration getDynamicCommentTableRuleConfiguration() { - String logicTable = "community_dynamic_comment"; - String actualDataNodes = "ds.community_dynamic_comment_${0..9}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getDynamicCommentShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getDynamicCommentShardingStrategy() { - String shardingColumn = "dynamic_id"; - return new StandardShardingStrategyConfiguration(shardingColumn, dynamicCommentShardingAlgorithm); - } - - /** - * =====进出房记录表分表策略===== - **/ - private TableRuleConfiguration getUserInOutRoomRecordShardingTableRuleConfiguration() { - String logicTable = "user_in_out_room_record"; - String actualDataNodes = "ds.user_in_out_room_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getUserInOutRoomRecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getUserInOutRoomRecordShardingStrategy() { - String shardingColumn = "in_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - userInOutRoomRecordShardingAlgorithm, userInOutRoomRecordRangeShardingAlgorithm); - } - - /** - * =====私聊消息表分表策略===== - **/ - private TableRuleConfiguration getUserChatMsgRecordShardingTableRuleConfiguration() { - String logicTable = "user_chat_msg_record"; - String actualDataNodes = "ds.user_chat_msg_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getUserChatMsgRecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getUserChatMsgRecordShardingStrategy() { - String shardingColumn = "create_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - userChatMsgRecordShardingAlgorithm, userChatMsgRecordRangeShardingAlgorithm); - } - - /** - * =====进出房记录表分表策略===== - **/ - private TableRuleConfiguration getFamilyMemberRoomMicRecordShardingTableRuleConfiguration() { - String logicTable = "family_member_room_mic_record"; - String actualDataNodes = "ds.family_member_room_mic_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getFamilyMemberRoomMicRecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getFamilyMemberRoomMicRecordShardingStrategy() { - String shardingColumn = "up_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - familyMemberRoomMicRecordShardingAlgorithm, familyMemberRoomMicRecordRangeShardingAlgorithm); - } - - /** - * =====游戏记录===== - **/ - private TableRuleConfiguration getGameLogShardingTableRuleConfiguration() { - String logicTable = "game_gold_log"; - String actualDataNodes = "ds.game_gold_log_${2024..2025}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getGameLogShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getGameLogShardingStrategy() { - String shardingColumn = "create_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - gameGoldLogShardingAlgorithm, gameGoldLogRangeShardingAlgorithm); - } - - private TableRuleConfiguration getLucky24RecordShardingTableRuleConfiguration() { - String logicTable = "lucky_24_record"; - String actualDataNodes = "ds.lucky_24_record_$->{20240914..20241231}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getLucky24RecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getLucky24RecordShardingStrategy() { - String shardingColumn = "create_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - lucky24RecordShardingAlgorithm, lucky24RecordRangeShardingAlgorithm); - } - - private TableRuleConfiguration getGiftSendRecordShardingTableRuleConfiguration() { - String logicTable = "gift_send_record"; - String actualDataNodes = "ds.gift_send_record_$->{20240423..20241231}"; - TableRuleConfiguration result = new TableRuleConfiguration(logicTable, actualDataNodes); - result.setTableShardingStrategyConfig(getGiftSendRecordShardingStrategy()); - return result; - } - - private ShardingStrategyConfiguration getGiftSendRecordShardingStrategy() { - String shardingColumn = "create_time"; - return new StandardShardingStrategyConfiguration(shardingColumn, - giftSendRecordShardingAlgorithm, giftSendRecordRangeShardingAlgorithm); - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java new file mode 100644 index 000000000..bd87fac52 --- /dev/null +++ b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/config/ShardingSphereConfig.java @@ -0,0 +1,227 @@ +package com.accompany.sharding.config; + +import com.accompany.common.utils.DateTimeUtil; +import com.accompany.common.utils.ResourceUtil; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory; +import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration; +import org.apache.shardingsphere.infra.config.mode.ModeConfiguration; +import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; +import org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration; +import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration; +import org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration; +import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration; +import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.sql.DataSource; +import java.io.IOException; +import java.sql.SQLException; +import java.util.*; + +/** + * {这里添加描述} + * + * @author fangchengyan + * @date 2019-08-23 10:08 + */ +@EnableTransactionManagement +@Configuration +@MapperScan(value = {"com.accompany.sharding.mapper"}, sqlSessionFactoryRef = "shardingSqlSessionFactory") +public class ShardingSphereConfig { + + @Autowired + private DataSource dataSource; + + @Bean("shardingDataSource") + public DataSource shardingDataSource() throws SQLException { + List ruleConfigs = new ArrayList<>(); + ruleConfigs.add(getRuleConfig()); + + Map dataSourceMap = new HashMap<>(4); + dataSourceMap.put("ds", dataSource); + + ModeConfiguration modeConfig = new ModeConfiguration("Standalone", new StandalonePersistRepositoryConfiguration("JDBC", new Properties())); + //是否打印执行的sql语句 + Properties properties = new Properties(); + properties.setProperty("sql-show", "false"); + + return ShardingSphereDataSourceFactory.createDataSource(modeConfig, dataSourceMap, ruleConfigs, properties); + } + + @Bean("shardingSqlSessionFactory") + @DependsOn({"shardingDataSource", "pageInterceptor", "paginationInterceptor"}) + public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(DataSource shardingDataSource, + Interceptor pageInterceptor, PaginationInterceptor paginationInterceptor) throws IOException { + MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(shardingDataSource); + String mapperLocations = "classpath*:/sharding/sqlmappers/*.xml"; + sqlSessionFactoryBean.setMapperLocations(ResourceUtil.getPathMatchingResource(mapperLocations)); + sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageInterceptor, paginationInterceptor}); + return sqlSessionFactoryBean; + } + + @Bean("shardingTransactionManager") + @DependsOn({"shardingDataSource"}) + @Primary + public DataSourceTransactionManager transactionManager(@Qualifier("shardingDataSource") DataSource shardingDataSource) { + return new DataSourceTransactionManager(shardingDataSource); + } + + private ShardingRuleConfiguration getRuleConfig() { + //table和分表策略分开 + Collection autoTableConfigs = new ArrayList<>(); + // 动态评论按动态id分表 .community_dynamic_comment_${0..9} + autoTableConfigs.add(getShardingAutoTableRuleConfiguration("community_dynamic_comment", + "ds", + "dynamic_id", "communityDynamicCommentStrategy")); + + //table和分表策略分开 + Collection tableConfigs = new ArrayList<>(); + // 账单按月分表 + tableConfigs.add(getShardingTableRuleConfiguration("bill_record", + "ds.bill_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}", + "create_time", "billRecordStrategy")); + // 进出房间按月分表 + tableConfigs.add(getShardingTableRuleConfiguration("user_in_out_room_record", + "ds.user_in_out_room_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}", + "in_time", "userInOutRoomRecordStrategy")); + //私聊按月分表 + tableConfigs.add(getShardingTableRuleConfiguration("user_chat_msg_record", + "ds.user_chat_msg_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}", + "create_time", "userChatMsgRecordStrategy")); + + //家族成员上下麦按月分表 + tableConfigs.add(getShardingTableRuleConfiguration("family_member_room_mic_record", + "ds.family_member_room_mic_record_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}", + "up_time", "familyMemberRoomMicRecordStrategy")); + + tableConfigs.add(getShardingTableRuleConfiguration("game_gold_log", + "ds.game_gold_log_${2024}${['01','02','03', '04','05','06', '07','08','09', '10','11','12']}", + "create_time", "gameGoldLogStrategy")); + + tableConfigs.add(getShardingTableRuleConfiguration("gift_send_record", + "ds.gift_send_record_$->{20240914..20241231}", + "create_time", "giftSendRecordStrategy")); + + tableConfigs.add(getShardingTableRuleConfiguration("lucky_24_record", + "ds.lucky_24_record_$->{20240914..20241231}", + "create_time", "lucky24RecordStrategy")); + + + Map algorithmsConfigs = new HashMap<>(); + // 账单按月分表 + AlgorithmConfiguration billRecordShardingAlgorithm = getBillRecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("billRecordStrategy", billRecordShardingAlgorithm); + // 动态评论按动态id分表 + AlgorithmConfiguration communityDynamicCommentShardingAlgorithm = getCommunityDynamicCommentShardingAlgorithmConfiguration(); + algorithmsConfigs.put("communityDynamicCommentStrategy", communityDynamicCommentShardingAlgorithm); + // 进出房间按月分表 + AlgorithmConfiguration userInOutRoomRecordShardingAlgorithm = getUserInOutRoomRecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("userInOutRoomRecordStrategy", userInOutRoomRecordShardingAlgorithm); + //私聊按月分表 + AlgorithmConfiguration userChatMsgRecordShardingAlgorithm = getUserChatMsgRecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("userChatMsgRecordStrategy", userChatMsgRecordShardingAlgorithm); + // 家族成员上下麦位记录 + AlgorithmConfiguration familyMemberRoomMicRecordShardingAlgorithm = getFamilyMemberRoomMicRecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("familyMemberRoomMicRecordStrategy", familyMemberRoomMicRecordShardingAlgorithm); + //游戏日志 + AlgorithmConfiguration gameGoldLogShardingAlgorithm = getGameGoldLogShardingAlgorithmConfiguration(); + algorithmsConfigs.put("gameGoldLogStrategy", gameGoldLogShardingAlgorithm); + // + AlgorithmConfiguration giftSendRecordShardingAlgorithm = getGiftSendRecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("giftSendRecordStrategy", giftSendRecordShardingAlgorithm); + // + AlgorithmConfiguration lucky24RecordShardingAlgorithm = getLucky24RecordShardingAlgorithmConfiguration(); + algorithmsConfigs.put("lucky24RecordStrategy", lucky24RecordShardingAlgorithm); + + ShardingRuleConfiguration config = new ShardingRuleConfiguration(); + config.setTables(tableConfigs); + config.setAutoTables(autoTableConfigs); + config.setShardingAlgorithms(algorithmsConfigs); + return config; + } + + private AlgorithmConfiguration getLucky24RecordShardingAlgorithmConfiguration() { + return getGiftSendRecordShardingAlgorithmConfiguration(); + } + + private AlgorithmConfiguration getGiftSendRecordShardingAlgorithmConfiguration() { + Properties properties = new Properties(); + properties.setProperty("datetime-pattern", DateTimeUtil.DEFAULT_DATETIME_PATTERN); + properties.setProperty("datetime-lower", "2024-04-23 00:00:00"); + properties.setProperty("datetime-upper", "2024-12-31 23:59:59"); + properties.setProperty("sharding-suffix-pattern", DateTimeUtil.DEFAULT_DATE_PATTERN_); + properties.setProperty("datetime-interval-amount", "1"); + properties.setProperty("datetime-interval-unit", "DAYS"); + return new AlgorithmConfiguration("INTERVAL", properties); + } + + private AlgorithmConfiguration getGameGoldLogShardingAlgorithmConfiguration() { + return getBillRecordShardingAlgorithmConfiguration(); + } + + private AlgorithmConfiguration getFamilyMemberRoomMicRecordShardingAlgorithmConfiguration() { + return getBillRecordShardingAlgorithmConfiguration(); + } + + /** + * =====私聊消息表分表策略===== + **/ + private AlgorithmConfiguration getUserChatMsgRecordShardingAlgorithmConfiguration() { + return getBillRecordShardingAlgorithmConfiguration(); + } + + private ShardingTableRuleConfiguration getShardingTableRuleConfiguration(String table, String nodes, String col, String strategyName) { + ShardingTableRuleConfiguration tableRuleConfiguration = new ShardingTableRuleConfiguration(table, nodes); + tableRuleConfiguration.setTableShardingStrategy(new StandardShardingStrategyConfiguration(col, strategyName)); + return tableRuleConfiguration; + } + + private ShardingAutoTableRuleConfiguration getShardingAutoTableRuleConfiguration(String table, String nodes, String col, String strategyName) { + ShardingAutoTableRuleConfiguration tableRuleConfiguration = new ShardingAutoTableRuleConfiguration(table, nodes); + tableRuleConfiguration.setShardingStrategy(new StandardShardingStrategyConfiguration(col, strategyName)); + return tableRuleConfiguration; + } + + /** + * =====账单表分表策略===== + **/ + private AlgorithmConfiguration getBillRecordShardingAlgorithmConfiguration() { + Properties properties = new Properties(); + properties.setProperty("datetime-pattern", DateTimeUtil.DEFAULT_DATETIME_PATTERN); + properties.setProperty("datetime-lower", "2024-04-23 00:00:00"); + properties.setProperty("datetime-upper", "2024-12-31 23:59:59"); + properties.setProperty("sharding-suffix-pattern", DateTimeUtil.DATE_FORMAT_YEAR_MONTH); + properties.setProperty("datetime-interval-amount", "1"); + properties.setProperty("datetime-interval-unit", "MONTHS"); + return new AlgorithmConfiguration("INTERVAL", properties); + } + + /** + * =======动态评论表分表策略=========== + **/ + private AlgorithmConfiguration getCommunityDynamicCommentShardingAlgorithmConfiguration() { + Properties properties = new Properties(); + properties.setProperty("sharding-count", "10"); + return new AlgorithmConfiguration("MOD", properties); + } + + /** + * =====进出房记录表分表策略===== + **/ + private AlgorithmConfiguration getUserInOutRoomRecordShardingAlgorithmConfiguration() { + return getBillRecordShardingAlgorithmConfiguration(); + } + +} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordRangeShardingAlgorithm.java deleted file mode 100644 index c2411d14f..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class BillRecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Collection collect = new HashSet<>(); - - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - startTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - endTime = DateTimeUtil.getEndTimeOfMonth(endTime); - - for (String each : collection) { - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) { - collect.add(each); - } - } - - return collect; - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordShardingAlgorithm.java deleted file mode 100644 index 64b913ab0..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/BillRecordShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class BillRecordShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/DynamicCommentShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/DynamicCommentShardingAlgorithm.java deleted file mode 100644 index 85c3066df..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/DynamicCommentShardingAlgorithm.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - - -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Collection; - -/** - * 动态评论分表策略 - * @date 2019-11-27 15:45 - * @author fangchengyan - */ -@Component -public final class DynamicCommentShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(final Collection availableTargetNames, final PreciseShardingValue shardingValue) { - - for (String each : availableTargetNames) { - if (each.endsWith(shardingValue.getValue() % 10 + "")) { - return each; - } - } - throw new UnsupportedOperationException(); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordRangeShardingAlgorithm.java deleted file mode 100644 index e1019ac24..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class FamilyMemberRoomMicRecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Collection collect = new HashSet<>(); - - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - startTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - endTime = DateTimeUtil.getEndTimeOfMonth(endTime); - - for (String each : collection) { - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) { - collect.add(each); - } - } - - return collect; - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordShardingAlgorithm.java deleted file mode 100644 index 248c4450e..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/FamilyMemberRoomMicRecordShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class FamilyMemberRoomMicRecordShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogRangeShardingAlgorithm.java deleted file mode 100644 index de7e1d5b2..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogRangeShardingAlgorithm.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class GameGoldLogRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Collection collect = new HashSet<>(); - - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - startTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - endTime = DateTimeUtil.getEndTimeOfMonth(endTime); - - for (String each : collection) { - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) { - collect.add(each); - } - } - - return collect; - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogShardingAlgorithm.java deleted file mode 100644 index efbb5acb9..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GameGoldLogShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class GameGoldLogShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordRangeShardingAlgorithm.java deleted file mode 100644 index 45b468d36..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.stream.Collectors; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class GiftSendRecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - Date finalStartTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - Date finalEndTime = DateTimeUtil.getEndTimeOfMonth(endTime); - return collection.parallelStream().filter(each->{ - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DEFAULT_DATE_PATTERN_); - return null != tableSuffixDate && finalStartTime.compareTo(tableSuffixDate) <= 0 && finalEndTime.compareTo(tableSuffixDate) >= 0; - }).collect(Collectors.toList()); - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordShardingAlgorithm.java deleted file mode 100644 index d0b5bbd6e..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/GiftSendRecordShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class GiftSendRecordShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DEFAULT_DATE_PATTERN_); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordRangeShardingAlgorithm.java deleted file mode 100644 index bc9e31e3f..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.stream.Collectors; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class Lucky24RecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - Date finalStartTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - Date finalEndTime = DateTimeUtil.getEndTimeOfMonth(endTime); - return collection.parallelStream().filter(each->{ - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DEFAULT_DATE_PATTERN_); - return null != tableSuffixDate && finalStartTime.compareTo(tableSuffixDate) <= 0 && finalEndTime.compareTo(tableSuffixDate) >= 0; - }).collect(Collectors.toList()); - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordShardingAlgorithm.java deleted file mode 100644 index 685cefebb..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/Lucky24RecordShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class Lucky24RecordShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DEFAULT_DATE_PATTERN_); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordRangeShardingAlgorithm.java deleted file mode 100644 index 9e003522f..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import cn.hutool.core.util.StrUtil; -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; - -/** - * @author: liaozetao - * @date: 2023/9/21 16:48 - * @description: - */ -@Component -public class UserChatMsgRecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - @Override - public Collection doSharding(Collection availableTargetNames, RangeShardingValue shardingValue) { - Collection collect = new HashSet<>(); - Range valueRange = shardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if (days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH, -3); - startTime = instance.getTime(); - } - startTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - endTime = DateTimeUtil.getEndTimeOfMonth(endTime); - for (String each : availableTargetNames) { - String tableSuffix = each.substring(each.lastIndexOf(StrUtil.UNDERLINE) + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - assert tableSuffixDate != null; - if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) { - collect.add(each); - } - } - return collect; - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordShardingAlgorithm.java deleted file mode 100644 index cab96687a..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserChatMsgRecordShardingAlgorithm.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * @author: liaozetao - * @date: 2023/9/21 16:47 - * @description: - */ -@Component -public class UserChatMsgRecordShardingAlgorithm implements PreciseShardingAlgorithm { - @Override - public String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue) { - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - String suffixTime = formatter.format(shardingValue.getValue()); - for (String each : availableTargetNames) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordRangeShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordRangeShardingAlgorithm.java deleted file mode 100644 index 37cfeeb7c..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordRangeShardingAlgorithm.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import com.google.common.collect.Range; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue; -import org.springframework.stereotype.Component; - -import java.util.Calendar; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; - -/** - * - * 范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class UserInOutRoomRecordRangeShardingAlgorithm implements RangeShardingAlgorithm { - - @Override - public Collection doSharding(Collection collection, RangeShardingValue rangeShardingValue) { - Collection collect = new HashSet<>(); - - Range valueRange = rangeShardingValue.getValueRange(); - Date startTime = valueRange.lowerEndpoint(); - Date endTime = valueRange.upperEndpoint(); - - // 跨度不宜过长 - int days = DateTimeUtil.compareDay(endTime, startTime); - if(days > 120) { - //三个月前 - Calendar instance = Calendar.getInstance(); - instance.add(Calendar.MONTH,-3); - Date threeMonthBefore = instance.getTime(); - startTime = threeMonthBefore; - } - - startTime = DateTimeUtil.getBeginTimeOfMonth(startTime); - endTime = DateTimeUtil.getEndTimeOfMonth(endTime); - - for (String each : collection) { - String tableSuffix = each.substring(each.lastIndexOf("_") + 1); - Date tableSuffixDate = DateTimeUtil.convertStrToDate(tableSuffix, DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - if (startTime.getTime() <= tableSuffixDate.getTime() && endTime.getTime() >= tableSuffixDate.getTime()) { - collect.add(each); - } - } - - return collect; - } - -} diff --git a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordShardingAlgorithm.java b/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordShardingAlgorithm.java deleted file mode 100644 index 00209ce98..000000000 --- a/accompany-base/accompany-sharding/accompany-sharding-service/src/main/java/com/accompany/sharding/shardingalgorithm/UserInOutRoomRecordShardingAlgorithm.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.accompany.sharding.shardingalgorithm; - -import com.accompany.common.utils.DateTimeUtil; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm; -import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Collection; -import java.util.Date; - -/** - * - * 精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 - * - * @Author yubin - * @Description - * @Date 2019-07-20 00:45 - */ -@Component -public class UserInOutRoomRecordShardingAlgorithm implements PreciseShardingAlgorithm { - - @Override - public String doSharding(Collection collection, PreciseShardingValue preciseShardingValue) { - - SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.DATE_FORMAT_YEAR_MONTH); - String suffixTime = formatter.format(preciseShardingValue.getValue()); - - for (String each : collection) { - if (each.endsWith(suffixTime)) { - return each; - } - } - throw new IllegalArgumentException("can not find tables end with " + suffixTime + "!"); - } -} diff --git a/accompany-dependencies/pom.xml b/accompany-dependencies/pom.xml index 1d101e552..5e21c9df4 100644 --- a/accompany-dependencies/pom.xml +++ b/accompany-dependencies/pom.xml @@ -71,7 +71,8 @@ 1.5.0 3.7.110.ALL v3-rev24-1.24.1 - 4.1.1 + 1.0.12 + 5.4.1 2.6 3.1.781 5.6.179