You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shardingsphere.apache.org by GitBox <gi...@apache.org> on 2019/03/05 03:35:53 UTC
[GitHub] [incubator-shardingsphere] linyuliang commented on issue #1967:
Shard table name error when exec select sql in multi thread concurrent
linyuliang commented on issue #1967: Shard table name error when exec select sql in multi thread concurrent
URL: https://github.com/apache/incubator-shardingsphere/issues/1967#issuecomment-469523747
I use sharding-jdbc for single database and sub-table。
my sharding config file is sharding.yml :
dataSources:
shardingdb: !!org.apache.commons.dbcp.BasicDataSource
driverClassName: org.mariadb.jdbc.Driver
url: jdbc:mysql://Mysql:3306/test?useUnicode=true&characterEncoding=utf-8
username: root
password: rjbigdata
initialSize: 3
minIdle: 3
maxIdle: 20
maxActive: 100
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: true
testOnReturn: false
logAbandoned: true
removeAbandoned: true
removeAbandonedTimeout: 60
shardingRule:
tables:
#新增的mysql表分片配置
app_ap_offline_event:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_network_flow_minute:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_rrm_radio_link_quality:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_sta_working_info_day:
tableStrategy:
# inline:
# shardingColumn: ymd
# algorithmExpression: app_sta_working_info_day_${ymd}
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_ap_offline_event_hour_stats:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_sta_flow_info:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
app_ap_offline_summary:
tableStrategy:
standard:
#精确分片算法类名称,用于=和IN
preciseAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
#范围分片算法类名称,用于BETWEEN,可选
rangeAlgorithmClassName: com.ruijie.cloud.idata.api.sharding.DateStringStandardShardingAlgorithm
shardingColumn: ymd
bindingTables:
#新增的mysql表需要规则绑定
- app_ap_offline_event
- app_network_flow_minute
- app_rrm_radio_link_quality
- app_sta_working_info_day
- app_ap_offline_event_hour_stats
- app_sta_flow_info
- app_ap_offline_summary
My DateStringStandardShardingAlgorithm.java:
`import com.google.common.collect.Range;
import io.shardingsphere.api.algorithm.sharding.PreciseShardingValue;
import io.shardingsphere.api.algorithm.sharding.RangeShardingValue;
import io.shardingsphere.api.algorithm.sharding.standard.PreciseShardingAlgorithm;
import io.shardingsphere.api.algorithm.sharding.standard.RangeShardingAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.util.*;
public class DateStringStandardShardingAlgorithm extends BaseShardingFilter implements PreciseShardingAlgorithm<String>, RangeShardingAlgorithm<String> {
private static final Logger logger = LoggerFactory.getLogger(DateStringStandardShardingAlgorithm.class);
@Override
public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> shardingValue) {
//*********************** shardingValue.getLogicTableName() is error **************************
return getTableName(shardingValue.getLogicTableName() , "_" + shardingValue.getValue());
}
@Override
public Collection<String> doSharding(Collection<String> availableTargetNames,
RangeShardingValue<String> shardingValue) {
List<String> result = new ArrayList<>();
Range<String> ranges = shardingValue.getValueRange();
final String logicTableName = shardingValue.getLogicTableName();
Date startTime;
try {
startTime = YYYYMMDD.parse(ranges.lowerEndpoint());
} catch (ParseException e) {
throw new RuntimeException("table" + logicTableName + " timeRange start parameter not yyyyMMdd format error:" + ranges.lowerEndpoint());
}
Date endTime;
try {
endTime = YYYYMMDD.parse(ranges.upperEndpoint());
} catch (ParseException e) {
throw new RuntimeException("table" + logicTableName + " timeRange end parameter not yyyyMMdd format error:" + ranges.lowerEndpoint());
}
// 此处应该返回 tablePrefix+201808 , tablePrefix+201809,tablePrefix+201810,
Calendar cal = Calendar.getInstance();
result = getTableNames(result, startTime, endTime, cal, logicTableName);
return result;
}
}`
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services