虚拟数据库(VDB)介绍
Teiid 是一个数据虚拟化系统,它的核心是虚拟数据库(VDB),本文结合一些实际案例来介绍一下 VDB。主要内容包括:
- QuickStart 示例
- VDB 定义
QuickStart 示例
QuickStart 示例包括 teiid-embedded-samples 和 teiid-quickstarts:
上面示例中 Teiid 通过 VDB 将数据源(关系数据库,WebService,No-SQL数据库,In-Memory 缓存/数据网格)中的数据保存在 View 中,User Application 通过 Teiid JDBC Driver 使用 View 中数据。上面所有示例中 VDB 都是通过 -vdb.xml 来定义的,接下来我们来介绍 VDB 的定义。
VDB 定义
VDB 或虚拟数据库是通过一个 XML 文件 -vdb.xml 定义的。Teiid Designer 创建的 .vdb 文件中 VDB 的定义也是 XML,它通常路径为 .vdb/META-INF/vdb.xml。如下为一个 -vdb.xml 定义例子:
<vdb name="${vdb-name}" version="${vdb-version}">
<!-- VDB properties -->
<property name="${property-name}" value="${property-value}" />
<!-- UDF defined in an AS module, see Developers Guide -->
<property name ="lib" value ="{module-name}"></property>
<import-vdb name="..." version="..." import-data-policies="true|false"/>
<!-- define a model fragment for each data source -->
<model visible="true" name="${model-name}" type="${model-type}" >
<property name="..." value="..." />
<source name="${source-name}" translator-name="${translator-name}" connection-jndi-name="${deployed-jndi-name}">
<metadata type="${repository-type}">raw text</metadata>
</model>
<!-- define a model with multiple sources - see Multi-Source Models -->
<model name="${model-name}" path="/Test/Customers.xmi">
<property name="multisource" value="true"/>
. . .
<source name="${source-name}"
translator-name="${translator-name}" connection-jndi-name="${deployed-jndi-name}"/>
<source . . . />
<source . . . />
</model>
<!-- see Reference Guide - Data Roles -->
<data-role name="${role-name}">
<description>${role-description}</description>
….
</data-role>
<!-- create translator instances that override default properties -->
<translator name="${translator-name}" type="${translator-type}" />
<property name="..." value="..." />
</translator>
</vdb>
上面 -vdb.xml 中定义属性值如 ${xx.xx},它可以通过 Java System Properties 替换,如果 JVM 启动时设定了相关的属性,则 VDB 在加载时动态替换 ${xx.xx} 为设定的相关属性值。
如上 -vdb.xml 包括一些属性和元素,接下来我们逐一介绍。
属性
-vdb.xml 属性有:
- name - VDB 的名字
- version - VDB 的版本号
如上属性决定了 JDBC 连接 URL,JDBC URL 通过 VDB 的 name 和 version 连接到相关 VDB。
Property 元素
- cache-metadata - 可以是 “true” 或 “false”,默认值为 “false”。如果值为 “false” Teiid 将在每次 VDB 加载时获取元数据,值为 “true” 则保存元数据到 PROFILE/data/teiid
- query-timeout - 设定默认查询 VDB 的 timeout 时间,单位为毫秒。默认值为 0,0意思是 Teiid 的默认 timeout 值被使用。该值可以在客户端被重新设定。
- lib - Teiid 支持用户自定义方法,该属性指定自定义方法所需相关 jar 包路径
- security-domain - 设定 VDB security domain,如果不设定,则 transport security domain 被使用
- connection.XXX - 数据源连接相关的属性
- authentication-type - 设定认证类型,可以是 GSS, USERPASSWORD
- password-pattern - 正则表达式限制用户名和密码,如果 USERPASSWORD 认证方式被使用
- gss-pattern - 如果 GSS 认证方式被使用,类似 password-pattern 正则表达式来限制用户名
import-vdb 元素
import-vdb 元素有如下属性:
- name - 要引入 VDB 的名字
- version - 要引入 VDB 的版本号
- import-data-policies - 控制是否引入数据,默认 “true”
Model 元素
Model 元素所包括的属性:
- name - Model 元素的名字,一个 VDB 可以有多个 Model,但需要名字唯一
- visibility - 该属性默认值为 “true”,如果设定为 “false” 则表明 Model 不会被 JDBC query 看到。
Model 元素子元素包括:
- Property 元素 - Model 相关的一些属性如 cache-metadata,modelClass 等
- Source 元素 - 绑定一个 translator,并且连接数据源
- Metadata 元素 - 指定元数据,可以是视图创建 DDL 语句
Translator 元素
Translator 元素所包括的属性:
- name - Translator 的名字
- type - Translator 的类型,可以是 ws, file, ldap, oracle, sqlserver, db2, derby 等
Translator 元素也可以通过 Property 子元素定义一些相关属性。