package com.taobao.tddl.executor.spi; import com.taobao.tddl.common.exception.TddlException; import com.taobao.tddl.common.model.Group; import com.taobao.tddl.common.model.lifecycle.Lifecycle; import com.taobao.tddl.executor.IExecutor; import com.taobao.tddl.executor.common.TransactionConfig; import com.taobao.tddl.executor.repo.RepositoryConfig; import com.taobao.tddl.optimizer.config.table.TableMeta; /** * 每个存储一个,主入口 * * @author mengshi.sunmengshi 2013-11-27 下午3:59:13 * @since 5.0.0 */ public interface IRepository extends Lifecycle { /** * 获取对应的表结构 */ ITable getTempTable(TableMeta meta) throws TddlException; /** * 获取一个表对象 ,在任何sql操作中都会根据table schema找到对应的数据库实例对象的。 表对象包含核心数据和对应的二级索引。 * * @param meta * @return * @throws Exception */ ITable getTable(TableMeta meta, String groupNode) throws TddlException; /** * 针对这个存储引擎,开始一个事务。 * * @param conf * @return * @throws Exception */ ITransaction beginTransaction(TransactionConfig conf) throws TddlException; /** * 获取当前存储引擎的一些配置信息。 * * @return */ RepositoryConfig getRepoConfig(); /** * 判断当前引擎是否是read only的,如果为readOnly则不可写,只可读,用于容灾。 * * @return */ boolean isWriteAble(); /** * 是否是加强型模式,简单来说,加强模式就是目前bdb的模式,执行query和join,尽可能先在本机内执行完毕后再去远程执行。 * 而mysql有自己的协议,无法做到这一点,所以应该返回false. * * @return */ boolean isEnhanceExecutionModel(String groupKey); /** * cursor实现类 * * @return */ ICursorFactory getCursorFactory(); /** * 获取对应的 handler构造器 * * @return */ ICommandHandlerFactory getCommandExecutorFactory(); /** * 获取对应的group {@link IExecutor} * * @param group * @return */ IGroupExecutor getGroupExecutor(Group group); }