shikeying
2024-01-11 3b67e947e36133e2a40eb2737b15ea375e157ea0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.walker.store;
 
import com.walker.connector.Address;
import com.walker.db.DatabaseException;
import com.walker.db.TableInfo;
 
import java.util.List;
import java.util.Map;
 
/**
 * 元数据引擎接口定义,提供数据中心存储的基本信息
 * @author shikeying
 * @date 2015年12月17日
 *
 */
public abstract interface MetaDataEngine {
 
    /**
     * 返回存储正在使用的库对象,在多库情况下,这个会不断变化。
     * @param storeId
     * @return
     */
    Address getUsingAddress(String storeId);
    
//    /**
//     * 根据存储ID获得对应已经存在的资源库信息,里面包含了连接的地址列表
//     * @param storeId
//     * @return
//     */
//    Repository getExistRepository(String storeId);
    
    /**
     * 创建新的库地址后,保存到系统元数据中
     * @param storeId 存储ID
     * @param address 地址对象
     */
    void saveNewAddress(String storeId, Address address) throws DatabaseException;
    
    /**
     * 创建新的表,保存到元数据中
     * @param storeId
     * @param addr 数据库地址
     * @param destTableName 创建的表名
     * @throws DatabaseException
     */
    void saveNewTable(String storeId, Address addr, String destTableName) throws DatabaseException;
    
    /**
     * 返回给定数据库中,某个表里面包含的所有字段集合
     * @param address
     * @param tableName
     * @return
     */
    List<String> getFields(Address address, String tableName);
    
    /**
     * 根据输入的数据库连接地址,返回里面存放的表数量
     * @param address
     * @return
     */
    public abstract int getTableSize(Address address);
    
    /**
     * 判断给定的主机上已经使用的数据库数量,这个结果是计算元数据存在中的;<br>
     * 如果是用户通过系统之外的途径添加的,则不会计算在内。
     * @param address
     * @return
     */
    int getDatabaseSize(Address address);
    
    /**
     * 从数据库元数据信息中查询给定表名(集合)的数据量
     * @param storeId
     * @param metaDbId
     * @param tableNameList
     * @return
     */
    Map<String, TableInfo> getTableRows(String storeId, long metaDbId, List<String> tableNameList);
    
    /**
     * 判断给定的地址对应的数据库在元数据中是否存在
     * @param address
     * @return
     */
    boolean isExistDatabase(String storeId, Address address);
    
    /**
     * 检查在元数据中是否存在对应存储中的表名。</p>
     * 注意:在同一个storeId中,无论是否分库,表名都要唯一
     * @param storeId
     * @param tableName
     * @return
     */
    boolean isExistTable(String storeId, Address address, String tableName);
}