package com.taobao.tddl.rule; import java.util.List; import java.util.Map; import java.util.Set; import com.taobao.tddl.common.model.DBType; import com.taobao.tddl.rule.virtualnode.DBTableMap; import com.taobao.tddl.rule.virtualnode.TableSlotMap; /** * 对应月tddl中的一张逻辑表,每张逻辑表上存在db/tb的{@linkplain Rule}<br/> * 基于该静态Rule(利用枚举步长和次数)可简单推算出数据库拓扑结构 * * @author linxuan */ public interface VirtualTableRule<D, T> { /** * 库规则链 */ List<Rule<String>> getDbShardRules(); /** * 表规则链 */ List<Rule<String>> getTbShardRules(); /** * 返回本规则实际对应的全部库表拓扑结构 * * @return key:dbIndex; value:实际物理表名的集合 */ Map<String, Set<String>> getActualTopology(); Object getOuterContext(); public TableSlotMap getTableSlotMap(); public DBTableMap getDbTableMap(); // ========================================================================= // 规则和其他属性的分割线 // ========================================================================= DBType getDbType(); boolean isAllowReverseOutput(); boolean isAllowFullTableScan(); public String getTbNamePattern(); public String getDbNamePattern(); public String[] getDbRuleStrs(); public String[] getTbRulesStrs(); public boolean isBroadcast(); public String getJoinGroup(); // ==================== 获取rule的一些信息,比如分区字段 ================= /** * 获取当前默认版本,逻辑表的分区字段,如果存在多个规则时,返回多个规则分区字段的总和 */ public List<String> getShardColumns(); }