good-134 opened a new issue, #32591:
URL: https://github.com/apache/shardingsphere/issues/32591

   I have observed an unexpected behavior in ShardingSphere's table sharding 
configuration. My configuration doesn't explicitly specify all physical tables, 
yet it works correctly. I'm trying to understand why this is possible.
   
   Here's my current configuration and sharding code:
   
   ```
     shardingsphere:
       datasource:
         names: ds0
         ds0:
           type: com.zaxxer.hikari.HikariDataSource
           driver-class-name: com.mysql.cj.jdbc.Driver
           url: 
jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
           username: root
           password: '111111'
       rules:
         sharding:
           key-generate:
             snowflake-gen:
               type: SNOWFLAKE
           shardingAlgorithms:
             agreement-table-complex-algorithm:
               type: CLASS_BASED
               props:
                 strategy: COMPLEX
                 algorithmClassName: biz.demo.config.sharding.AgreementAlgorithm
           tables:
             agreement:
               actual-data-nodes: ds0.agreement
               table-strategy:
                 complex:
                   sharding-algorithm-name: agreement-table-complex-algorithm
                   sharding-columns: id,create_time
       props:
         sql-show: true
   ```
   ```
   public Collection<String> doSharding(Collection<String> 
availableTargetNames, ComplexKeysShardingValue<Long> complexKeysShardingValue) {
   
           Map<String, Range<Long>> columnNameAndRangeValuesMap = 
complexKeysShardingValue.getColumnNameAndRangeValuesMap();
   
           Map<String, Collection<Long>> columnNameAndShardingValuesMap = 
complexKeysShardingValue.getColumnNameAndShardingValuesMap();
   
           List<String> actualTarget = new ArrayList<>();
           Snowflake snowflakeInstances = Snow.getSnowflakeInstances();
           Collection<Long> idKeyColl = 
columnNameAndShardingValuesMap.get("id");
           String logicTableName = complexKeysShardingValue.getLogicTableName();
           if (CollectionUtils.isNotEmpty(idKeyColl)) {
               for (Long id : idKeyColl) {
                   long generateDateTime = 
snowflakeInstances.getGenerateDateTime(id);
                   int suffix = 
Math.abs(String.valueOf(generateDateTime).hashCode() % 4);
                   String tb = logicTableName + "_" + suffix;
                   actualTarget.add(tb);
               }
           }
           return actualTarget;
   }
   ```
   
   
   
   
   In my database, I have four physical tables: agreement_0, agreement_1, 
agreement_2, and agreement_3. However, in my configuration, I've only specified 
actual-data-nodes: ds0.agreement instead of actual-data-nodes: 
ds0.agreement_$->{0..3}.
   
   
   Despite this, my sharding setup works correctly. The system successfully 
routes queries to the appropriate physical tables.
   
   My questions are:
   1. Why does this configuration work without explicitly specifying all 
physical tables?
   2. Is this behavior intentional or a side effect of how ShardingSphere 
processes configurations?
   3. Are there any potential risks or downsides to using this simplified 
configuration in a production environment?
   4. Is there any documentation that explains this behavior?
   
   Is there some default behavior in ShardingSphere that I'm not aware of, or 
is it related to my custom sharding algorithm?
   Thank you.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: 
[email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to