虚拟数据库(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 子元素定义一些相关属性。