hi,English is not my first language,if you don’t  understand which I talk 
about, please mail me. 

my config:

Shardjdbc version:              4.0.0-RC2
Springboot version:              2.1.7
DB:                                     mysql5.7
Jdbc driver:                    com.mysql.jdbc.Driver
Db connection pool:     com.alibaba.druid.pool.DruidDataSource

When I use hint to sharing my table, it looks like not work.please show me 
which one I was mistake. 

When I insert one object to mysql, it will insert 12 records in every sharding 
table, and, when query by createdAt it also query all tables don’t use the 
sharing algorithm.

The official demo link was 
failure.(https://github.com/apache/incubator-shardingsphere-example/tree/dev/sharding-jdbc-example/hint-example
 
<https://github.com/apache/incubator-shardingsphere-example/tree/dev/sharding-jdbc-example/hint-example>)

Thanks all.



Config in application.yml:

spring:
  application.name: demo
  shardingsphere:
    datasource:
      ds0:
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://$ <mysql://$>{DB_URL}:3306/demo
        username: ${DB_USERNAME}
        password: ${DB_PASS}
      names: ds0
    sharding:
      binding-tables: t_order
      default-database-strategy:
        hint:
          algorithmClassName: com.demo.config.MyShardingAlgorithm
      tables:
        illegal_result:
          actual-data-nodes: ds0.t_order$->{1..9}, ds0.t_order$->{10..12}
          key-generator:
            column: id
            type: SNOWFLAKE
          table-strategy:
            hint:
              algorithmClassName: com.demo.config.MyShardingAlgorithm
    props:
      sql:
        show: true

MyShardAlgorithm.java
public class MyShardingAlgorithm implements HintShardingAlgorithm<String> {
  private static final String ORDER_TABLE = "illegal_result";

  @Override
  public Collection<String> doSharding(Collection<String> collection, 
HintShardingValue<String> shardingValue) {

    List<String> list = Lists.newArrayList(shardingValue.getValues());
    List<String> actualTable = Lists.newArrayList();

    // 页面上的查询条件会以json的方式传到shardingValue变量中
    String json = list.get(0);
    QueryCondition condition = JSON.parseObject(json, 
IllegalResultQueryCondition.class);
    // if no createdat, quarry all
    if (StringUtils.isEmpty(condition.getCreatedAt())) {
      // 所有的分表
      for (int i = 1; i < 13; i++) {
        String tabIndex = i < 10 ? "0".concat(String.valueOf(i)) : 
String.valueOf(i);
        actualTable.add(ORDER_TABLE.concat(tabIndex));
      }
    } else {
      // if has createdAt, only query month table which createAt in. 
ShardingUtils.getDateIndex will get month from createdAt
      String tableSuffix = ShardingUtils.getDateIndex(condition.getCreatedAt());
      actualTable.add(ORDER_TABLE.concat(tableSuffix));
    }

    return actualTable;
  }

}

Hi,英文水平有限,抱歉。
我在使用shardinng jdbc进行分表实践的时候,使用hint策略,并根据文档进行了配置,发现并没有生效。官方给出的demo链接已经失效(404)。
根据官方文档(https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/usage/hint/
 
<https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/usage/hint/>)我实现了自己的路由算法,但debug时,并没有执行该方法
另外对于文档中提到的
获取HintManager


HintManager hintManager = HintManager.getInstance();

不太理解应该放在那里。

Reply via email to