基本上每种数据库都有对应的java开发jar包,为了规范使用和便于分发,我们会对每种数据库提供的java api进行封装,封装后的工具类将作为数据库管理、数据通道、数据迁移的基础。
封装数据库工具类好处有很多:规范编程人员的开发规范、易于培训、利于维护调试、便于分发,在开发成本、开发效率和安全性等多个方面可以进行有效控制。坏处就是:在某些地方可能会过度封装,影响接口的执行效率。不过在多方权衡后,我们仍然认为,在设计这样一个复杂的数据源管理系统时,进行数据库工具类的封装是不得不做的事情。
工具类中的接口按照技术架构分为以下几种:原生api封装接口、rmi接口、thrift接口。我们将在第三章节“数据通道管理”中详细介绍各种技术架构的接口服务。
封装接口
原生api封装接口是在各种数据库官方api接口的基础上进行的二次轻微封装,封装的目的,一是制定开发规范;二是便于接口调用和维护(譬如如果采用原生hadoop api接口,则需要引用几十个jar文件);三是为其他类型的接口提供设计基础。原生api封装接口一般只在设计“多数据源综合管理系统”时使用,所以在下面各个“工具类”章节中我们将不再详细介绍原生api封装接口,如果您有兴趣,可以参考数据库官方提供的api手册。
接口
rmi接口是我们在各数据库官方api接口的基础上设计的针对java语言的接口服务,在设计的过程中,我们添加了以下几种特性。
第一, 将rmi服务进行逻辑上的分层,三层分别为:通道、服务、接口;基于此种逻辑上的划分,我们为每种数据库设计了rmi通道模板,通过这些模板,我们可以快速地不编写任何代码地构建出rmi通道,并且同一数据源可以有多个rmi通道。通道包括多个服务,服务包括多个接口。并且rmi通道服务的各种配置信息(譬如服务名、路径、端口号等)以及启动关闭等操作等均由“多数据源综合管理系统”配置管理,客户端只需引用jar包文件即可访问rmi服务通道。
第二, 具有灵活的授权控制机制。针对通道、服务、接口三个层次,可以在用户、IP地址两个层面上进行授权控制。
第三, 接口访问日志监控机制,系统会记录下接口调用的详细信息,包括用户、客户端IP、时间、接口名称等。
第四, 在线用户监控机制,系统会记录访问rmi通道的在线用户信息。
接口
thrift接口是我们在各数据库官方api接口的基础上设计的针对跨语言的接口服务。截止到编写本文档时,thrift接口正在设计和测试中,后续将会更新发布。
接口
截止到编写本文档时,restful接口正在设计和测试中,后续将会更新发布。
下表是我们已经封装后的数据库工具类(均包含原生api封装接口和rmi接口,暂不包括thrift等其他接口)。
名称 | 描述 |
hnepri-hbase-template-v1.0.jar | HBase数据库工具类,包括命名空间管理、表管理、写数据、读数据、分页检索、过滤器等接口方法。支持非kerberos和kerberos两种版本。 |
hnepri-hdfs-template-v1.0.jar | HDFS分布式文件系统工具类,包括目录文件管理、文件上传下载、文件权限设置等接口方法。支持非kerberos和kerberos两种版本。 |
hnepri-neo4j-template-v1.0.jar | Neo4j图数据库工具类,包括图数据模式管理、节点管理、关系管理、索引管理、路径管理、Cypher操作等接口方法。 |
hnepri-mongodb-template-v1.0.jar | MongoDB文档数据库工具类,包括数据库管理、集合管理、文档管理、用户管理、索引管理等接口方法。 |
hnepri-hve-template-v1.0.jar | Hive数据仓库工具类,包括数据库管理、表视图管理、HBasse表映射管理、数据检索等接口方法。支持非kerberos和kerberos两种版本。 |
hnepri-bricklayer-common-v2.0.jar | 基础工具类(包含关系数据库工具类)。 |
hnepri-redis-template-v1.0.jar | Redis键值数据库工具类,包括key管理、List管理、Hash管理、Set管理等接口方法。 |
【注】在下面的几个章节中,我们将陆续穿插讲解各个数据库工具类的设计细节,并在发布的试用系统中分发对应的工具类jar包文件。
当我们决定将某个数据库接入本系统中时,需要先注册其数据源信息,其实就是数据库的连接信息。截止到编写本文档时,系统已经允许接入以下8种类型的数据库,分别为:关系数据库(Oracle、MySQL等)、HBase、HDFS、Hive、Neo4j、MongoDB、Redis等,其他类型的数据库正在设计或者测试中。可以为一个数据库配置多个数据源。功能界面如下所示:
其中, 图标表示此数据源尚未连接,此时字体颜色为黑色; 图标表示此数据源已经连接,此时字体颜色为蓝色。当点击 图标时,将弹出“登录”窗口,并显示部分连接选项信息,用户只需点击“登录”即可。当点击图标时,将断开与数据源的连接,此时所有与此数据源相关的数据访问操作都将中断,包括数据访问、数据迁移、数据通道等,所以一旦数据源启动,就不能随随便便停止或者断开。
2.2.1.1 注册数据源
数据源基本信息如下表所示:
属性 | 描述 |
名称 | 数据源名称;一般采用具有实际意义的英文单词表示。数据源名称由英文字母、数字、下划线等组合而成,必须具有唯一性,并且建议用具有实际意义的字词进行命名,譬如“hnepri_test_hbase”,表示公司的测试的HBase集群。【必填项】 |
标题 | 数据源标题;数据源中文标题。 |
种类 | 数据源所属数据库种类。 |
验证登录 | 此数据库是否需要登录验证。 |
服务器 | 部署服务器信息。 |
数据库版本 | 数据版本信息。 |
安装类型 | 数据库安装类型信息。 |
启用状态 | 此数据库在系统中是否已经启用(此属性暂时未使用到)。 |
备注 | 数据源描述信息。 |
|
新增或者编辑数据源基本信息后,可以配置数据源的连接选项信息,然后就可以进行数据库连接测试。可以在“数据源配置管理”页面中点击图标连接数据库,也可以在对应的管理页面中点击图标连接数据库。
功能截图如下所示:
2.2.1.2 删除数据源
用户拥有删除自己创建的数据源的权利,但是无权删除为其授权分配的可访问的数据源。数据源删除之前,需要先删除删除连接配置选项信息。删除数据源后,将同时删除授权信息、日志信息等。其他的关联数据,譬如数据通道信息、数据迁移方案信息等,需要手动删除。
2.2.1.3 登录/注销数据源
登录连接数据源,是基于此数据源进行数据访问操作的第一步,也是后续数据通道、数据迁移等正常运行的基础。数据源登录后,连接对象会一直保存在内存中,只有非常非常微小的概率,会出现连接对象超时中断、损坏等异常,一般情况下,只需重新登录即可解决。
注销断开数据源,会注销数据库连接对象并释放资源,同时从数据源连接列表中删除。
2.2.2.1 数据源种类
DataBaseCategoryHelper
类型(Type) | 种类(Category) | 名称 |
关系数据库 | Oracle | |
MySQL | ||
分布式文件系统 | HDFS | |
列数据库 | HBase | |
图形数据库 | Neo4j | |
键值数据库 | Redis | |
文档数据库 | MongoDB | |
CouchDB | ||
对象数据库 | db4o | |
Versant | ||
XML数据库 | Berkeley DB XML | |
BaseX | ||
其他数据库 | Cassandra | |
Voldemort | ||
|
2.2.2.2 数据源类型
DataBaseTypeHelper
代码 | 名称 |
Sql | 关系数据库 |
DFS | 分布式文件系统 |
Column | 列数据库 |
Graph | 图形数据库 |
KeyValue | 键值数据库 |
Document | 文档数据库 |
Object | 对象数据库 |
XML | XML数据库 |
Other | 其他数据库 |
下表为数据源的连接选项信息表:
数据源类型 | 连接选项名称 | 连接选项描述 |
关系数据库 | JDBC数据库连接字符串 | 关系数据库库连接字符串,譬如针对Oracle,其连接字符串为“jdbc:oracle:thin:@10.230.4.12:1521:orcl”。 目前支持的关系数据库包括:ORACLE,MYSQL,SqlServer,DB2,PostgreSQL,Sybase,Informix,Access等8中,其中Oracle和MySQL已经经过测试,其他几种未完全测试。【必填项】 |
数据库登录用户名称 | 数据库登录用户名称。【必填项】 | |
数据库登录用户密码 | 数据库登录用户密码。【必填项】 | |
HDFS | coreSite文件名 | core-site.xml文件,一般将此文件放在classes目录下,如下图所示: 【必填项】 |
hdfsSite文件名 | hdfs-site.xml文件,一般将此文件放在classes目录下。通过hdfs工具类连接HDFS集群时会根据这两个属性读取xml文件,并初始化Configuration对象。【必填项】 | |
启用Kerberos | hdfs集群是否启用了kerberos机制。如果启用了则输入true,否则输入false。默认情况下视为未启用kerberos机制。 | |
Kerberos用户名 | 当启用Kerberos机制时,必须配置Kerberos用户名。 | |
Kerberos配置文件 | 当启用Kerberos机制时,必须配置Kerberos配置文件。文件后缀名为conf,譬如krb5.conf,此文件可以放在本地磁盘的任何目录中,配置时输入完整的文件路径即可。 | |
Kerberos证书密钥文件 | 当启用Kerberos机制时,必须配置Kerberos证书密钥文件。文件后缀名keytab,譬如ZK00001.keytab,此文件可以放在本地磁盘的任何目录中,配置时输入完整的文件路径即可。 | |
HBase | Master主机名/IP地址 | HBase Master主机名称,一般不建议用IP地址。【必填项】 |
zookeeper监听端口号 | Zookeeper服务的监听端口号,一般为2181。【必填项】 | |
zookeeper实例部署地址 | Zookeeper服务部署主机名称,一个集群一般至少要有三个zookeeper。主机名称之间用英文逗号分割。当zookeeper服务主机较少时,可以使用此种方式,如果zookeeper服务主机较多(譬如超过10个等),可以选择采用下面的“zookeeper实例文件路径”进行配置。 | |
zookeeper实例文件路径 | 当zookeeper服务主机较多时,可以将这些主机名称按照每行一个的方式组织存储在文本文件中,然后将此选项配置为文件的完整路径即可。工具类会自动解析实例文件,并初始化Configuration。谨记:zookeeper实例部署地址和zookeeper实例文件路径只能二选一。 | |
coreSite文件名 | 请参考HDFS对应选项。 | |
hdfsSite文件名 | 请参考HDFS对应选项。 | |
hbaseSite文件名 | hbase-site.xml文件,一般将此文件放在classes目录下。 | |
启用Kerberos | 请参考HDFS对应选项。 | |
Kerberos用户名 | 请参考HDFS对应选项。 | |
Kerberos配置文件 | 请参考HDFS对应选项。 | |
Kerberos证书密钥文件 | 请参考HDFS对应选项。 | |
Neo4j | 数据库服务器IP地址 | 数据库服务器IP地址。【必填项】 |
数据库服务器端口号 | 数据库服务器端口号,默认是7474。【必填项】 | |
数据库登录用户名称 | 数据库登录用户名称。【必填项】 | |
数据库登录用户密码 | 数据库登录用户密码。【必填项】 | |
MongoDB | 数据库服务器IP地址 | 数据库服务器IP地址。【必填项】 |
数据库服务器端口号 | 数据库服务器端口号,默认是27017。【必填项】 | |
数据库登录用户名称 | 数据库登录用户名称。【备用选项】 | |
数据库登录用户密码 | 数据库登录用户密码。【备用选项】 | |
Hive | JDBC数据库驱动 | org.apache.hive.jdbc.HiveDriver【必填项】 |
JDBC数据库连接字符串 | jdbc:hive2://10.230.5.2:10000/default?characterEncoding=UTF-8【必填项】 | |
数据库登录用户名称 | 数据库登录用户名称【必填项】 | |
数据库登录用户密码 | 数据库登录用户密码【必填项】 | |
Redis | 数据库服务器IP地址 | 数据库服务器IP地址。【必填项】 |
数据库服务器端口号 | 数据库服务器端口号,默认是6379。【必填项】 | |
数据库登录用户名称 | 数据库登录用户名称。【备用选项】 | |
数据库登录用户密码 | 数据库登录用户密码。【备用选项】 | |
|
数据源授权机制仅仅是针对本系统内而言,而并非指数据源本身的授权验证机制。数据源授权机制主要分为两个层级。第一,用户是否有权访问数据源,称之为数据源访问授权。第二,用户拥有哪些数据源动作,称之为数据源动作授权。
2.2.4.1 数据源访问授权
这个很容易理解,如果用户没有数据源访问授权,将无法读写数据,更别说数据源管理操作了,同样也将无法进行针对此数据源进行数据迁移操作。
系统管理员拥有访问系统内已注册的所有数据源的权利,可以为任何数据源授权访问用户。
非系统管理员,只能访问自己注册和被授权访问的数据源,可以为自己注册的数据源授权访问用户。
查看用户的授权动作。
删除用户的授权动作
删除授权用户
添加授权用户
2.2.4.2 数据源动作授权
在本系统中,将HDFS分布式文件系统也视为一种数据源,但是针对它的动作却和正规意义上的数据库动作不同,而更倾向于常规的文件系统动作。如下图所示:
【数据库动作】
【文件系统动作】
【未完待续】