use of com.ctrip.platform.dal.dao.configure.DatabaseSet in project dal by ctripcorp.
the class DalShardingHelper method shuffleByTable.
/**
* Shuffle by table shard id.
* @param logicDbName
* @param pojos
* @return
* @throws SQLException
*/
public static Map<String, Map<Integer, Map<String, ?>>> shuffleByTable(String logicDbName, String tableName, String tableShardId, Map<Integer, Map<String, ?>> pojos) throws SQLException {
Map<String, Map<Integer, Map<String, ?>>> shuffled = new HashMap<>();
DalConfigure config = DalClientFactory.getDalConfigure();
DatabaseSet dbSet = config.getDatabaseSet(logicDbName);
DalShardingStrategy strategy = dbSet.getStrategy();
DalHints tmpHints = new DalHints();
for (Integer index : pojos.keySet()) {
Map<String, ?> fields = pojos.get(index);
String shardId = tableShardId == null ? strategy.locateTableShard(config, logicDbName, tableName, tmpHints.setFields(fields)) : tableShardId;
Map<Integer, Map<String, ?>> pojosInShard = shuffled.get(shardId);
if (pojosInShard == null) {
pojosInShard = new LinkedHashMap<>();
shuffled.put(shardId, pojosInShard);
}
pojosInShard.put(index, fields);
}
return shuffled;
}
use of com.ctrip.platform.dal.dao.configure.DatabaseSet in project dal by ctripcorp.
the class DalShardingHelper method shuffle.
/**
* Group pojos by shard id. Should be only used for DB that support sharding.
*
* @param logicDbName
* @param pojos
* @return Grouped pojos
* @throws SQLException In case locate shard id faild
*/
public static Map<String, Map<Integer, Map<String, ?>>> shuffle(String logicDbName, String shardId, List<Map<String, ?>> daoPojos) throws SQLException {
Map<String, Map<Integer, Map<String, ?>>> shuffled = new HashMap<>();
DalConfigure config = DalClientFactory.getDalConfigure();
DatabaseSet dbSet = config.getDatabaseSet(logicDbName);
DalShardingStrategy strategy = dbSet.getStrategy();
DalHints tmpHints = new DalHints();
for (int i = 0; i < daoPojos.size(); i++) {
Map<String, ?> pojo = daoPojos.get(i);
String tmpShardId = shardId == null ? strategy.locateDbShard(config, logicDbName, tmpHints.setFields(pojo)) : shardId;
dbSet.validate(tmpShardId);
Map<Integer, Map<String, ?>> pojosInShard = shuffled.get(tmpShardId);
if (pojosInShard == null) {
pojosInShard = new LinkedHashMap<>();
shuffled.put(tmpShardId, pojosInShard);
}
pojosInShard.put(i, pojo);
}
detectDistributedTransaction(shuffled.keySet());
return shuffled;
}
Aggregations