求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
使用IBM移动数据库构建Android离线数据应用
 
发布于2013-7-3
 

简介:IBM solidDB 是一种内存型关系数据库,其运行效率相当于磁盘数据库的十倍,吞吐量为数万事务每秒,响应时间为微秒级。作为移动设备的迁移版本,IBM Mobile Database 继承了 solidDB 诸多优点。与此同时,IBM Mobile Database 针对移动设备专作了许多改进与优化。

本文试图向读者介绍 IBM Mobile Database 的工作原理,并结合示例,展示如何使用 IBM Mobile Database 实现 Android 设备与后端企业级数据库的数据同步。

什么是 IBM Mobile Database

IBM Mobile Database(以下简称 Mobile DB)是内存数据库 IBM solidDB(以下简称 solidDB)专为移动设备优化设计的移动数据库。一方面,Mobile DB 继承了内存数据库性能卓越(相对磁盘数据库,运行速度快十倍)的特点,另一方面,利用 solidDB 的 Advanced Replication 功能与 Universal Cache 组件,可实现与后端企业级数据库(如 DB2,Informix,Oracle,SQL Server 等主流数据库)的双向数据同步。这样,Mobile DB 不仅是一款类似 SQL Lite 的离线移动数据库,与此同时,还可以作为后端企业级数据库的移动客户端缓存。图 1 显示的是 Mobile DB 数据复制解决方案的拓扑结构。

图 1. Mobile DB 数据复制解决方案拓扑结构

关于 Mobile DB 的介绍,主要分为两节,如下:

1、Mobile DB 主要功能

2、Mobile DB 工作原理

Mobile DB 主要功能

Mobile DB 是一款符合工业标准的移动数据库,具有性能好,可靠性高,离线,轻量级(少于 10 MB)等优点。同时,Mobile DB 还完全支持 ACID 事务,标准的数据库访问接口,数据安全,与企业数据库双向数据同步等特点。关于 Mobile DB 的主要功能,具体说明如下:

支持事务的 ACID 特性

从数据库事务的角度,Mobile DB 完全满足 ACID 要求,即原子性,一致性,隔离性,持久性。即便在连接丢失的情况下,Mobile DB 也能提供基于事务级的数据持久化存储。

支持标准的数据库接口

对于上层应用程序而言,Mobile DB 完全支持标准的 SQL 操作以及 JDBC 访问接口。对于更加复杂的企业级应用,Mobile DB 还支持存储过程,触发器等高级 SQL 操作。另外,从大数据的角度,Mobile DB 还支持 BLOB 与 CLOB 等数据类型。

数据安全

Mobile DB 完全符合数据库的安全标准。一方面,Mobile DB 基于 OpenSSL 数据加密算法,可有效保护敏感数据;另一方面,Mobile DB 支持 VPN 安全协议,防止隐私信息在网络传输泄密。

双向数据同步

通过与 solidDB 的协同工作,Mobile DB 支持与企业级数据库之间的双向数据同步。在此模型中,solidDB 扮演数据复制的 Hub 角色。
Mobile DB 工作原理。

Mobile DB 数据复制解决方案的核心组件分为四部分:手机数据库 Mobile DB,内存数据库 solidDB,数据复制引擎 InfoSphere CDC,以及后端企业级数据库。图 2 所示显示的是 Mobile DB 数据复制解决方案的工作原理。

图 2. Mobile DB 数据复制解决方案的工作原理

由图可知,作为数据复制的 Hub 角色,solidDB 一方面利用自身的 Advanced Replication 功能,实现与移动端 Mobile DB 的数据同步,另一方面也利用另一组件 solidDB Universal Cache,协同 InfoSphere CDC 数据同步引擎,实现与后端企业数据库的数据同步。

内存数据库 solidDB 与移动端 Mobile DB 的同步

如前所述,利用 solidDB 的 Advanced Replication 功能,solidDB 可实现与 Mobile DB 的同步。从这角度,Mobile DB 可以理解为solidDB 的移动客户端,而 solidDB 则可视为 Mobile DB 的同步服务器,提供主从数据库之间的数据同步与版本冲突管理。

内存数据库 solidDB 与后端企业级数据库的同步

solidDB 与后端企业级数据库的同步,主要依赖于 solidDB Universal Cache 组件。solidDB Universal Cache 包含了数据同步引擎 InfoSphere CDC 家族之一—— InfoSphere CDC for solidDB。作为 solidDB 的数据复制引擎,InfoSphere CDC for solidDB 支持与其它数据库复制引擎(如 InfoSphere CDC for DB2)协同工作,实现 solidDB 与企业级数据库的数据双向同步。

值得一提的是,除了作为数据复制的 Hub 角色,solidDB 还经常用作后端企业级数据库的高速缓存,加载频繁访问的核心数据,可有效提供数据库的查询性能。此外,solidDB 的 HotStandby 特性,使得针对缓存数据库的 HA 与 Failover 变得更加容易。对于上层应用而言,也可利用 solidDB 提供的共享内存访问(SMA)技术,获得良好的数据库访问性能。

使用 IBM Mobile Database 开发 Android 应用

上一部分主要介绍了 Mobile DB 的基本概念与工作原理。在这一部分,将从应用开发的角度,展示如何使用 Mobile DB 开发基于 Android 平台的移动数据库应用。从结构上,主要分为以下两节:

1、如何安装 Mobile DB

2、如何开发基于 Mobile DB 的 Android 应用

MobileDB 之 Standalone 应用

MobileDB 之 Replica 应用

安装 Mobile DB

笔者拿到的是 Mobile DB 的最新版本 V7.0.1.0,支持 Android 设备的最低配置为 Android 2.3 ARM。要获取 Android SDK 以及相关开发工具与资料,请参见 Android 开发网站。Mobile DB 安装包目前支持 Linux(solidDB-7.0.1-android.bin)与 Windows 平台(solidDB-7.0.1-android.exe)两个操作系统,下载网址为:IBM Mobile Database downloads。

表 1 列举了 Mobile DB V7.0.1.0 安装包的主要文件以及详细说明。

文件名 描述说明

 lib/libsolcrypto.so
Cryptographic 库。需要说明的是,无论是否启动 Mobile DB 的数据加密功能,都需要安装 Cryptographic 库,否则 Mobile DB 无法工作。
lib/SolidDriver2.0.jar
 solidDB JDBC 驱动。
lib/libssolidac70.so
 
Linked library access (LLA) 共享库
/licence
 

 许可证信息
/properties 用于 IBM Tivoli Usage and Accounting Manager 产品的元数据信息。
 

表 1. Mobile DB 安装包主要文件说明

可选择以下安装两种方式,将以上 Mobile DB 相关安装文件传输到 Android 设备:

1、Android 设备提供的文件传输服务安装。

2、作为嵌入式数据库,随 Android 应用一并安装。

开发基于 Mobile DB 的 Android 应用

要开发一个基于 Mobile DB 的 Android 应用,典型的 6 个步骤如下:

步骤 1 —— 配置 Mobile DB

最简单也是最快捷的方式,是采用 Mobile DB 的默认配置。有关 Mobile DB 的详细配置参数,请参见 Configuration parameters for IBM Mobile Database。

步骤 2 ( 可选 ) —— 创建数据库

当第一次启动 Mobile DB 时,会自动创建一些系统以及元数据表。根据业务需要,读者也可创建数据库。

步骤 3 —— 编写 Android 应用源程序

在开发 Android 应用程序时,需要考虑到以下几个因素:

作为嵌入式数据库,须将 Android 应用链接至 Mobile DB 的 LLA 共享库—— libssolidac70.so。具体配置信息,请详情参考 Configuring your environment for LLA use with Java 。

前面提到,要保证 Mobile DB 正常工作,须包含 Cryptographic 库—— libsolcrypto.so。

在客户端发起数据访问连接前,须调用 SolidServerControl 类的 startServer 方法,启动 Mobile DB。相应地,调用 stopServer 方法,可关闭 Mobile DB。

步骤 4 —— JDBC 访问 URL

作为 Mobile DB 的标准数据访问 API,其 JDBC 的 URL 定义如下:

jdbc:solid://localhost:<port_no> 

对于本地(Non-RPC)JDBC 连接,端口可指定为 0,对应的 URL 为:

jdbc:solid://localhost:0

步骤 5 —— 编译并打包 Android 应用

编译之后,Android 应用程序的 build 文件通常为一个 apk 文件,其中包含了表 1 列出的各种 Mobile DB 文件。

步骤 6 —— 部署 Android 应用

要部署 Android 应用,可借助于 Android SDK 提供的 adb 调试及部署工具,或者 Eclipse 的 Android 插件 ADT。

接下来,分别通过两个样例程序(均可通过 IBM Mobile Database 官方网站 下载源代码),展示 Mobile DB 的 Standalone 用法与 Replica 用法。所谓 Standalone 用法,指的是 Mobile DB 作为一个独立的嵌入式数据库,提供给 Android 应用程序使用;而 Replica 用法则至的是 Mobile DB 作为企业级数据库在移动客户端的副本,实现主从数据库之间的双向数据同步。

1. Mobile DB 之 Standlone 应用

Mobile DB 的 Standalone 应用对应的源代码为 mobile-setup-sample.zip。读者可按照以上 6 个开发步骤,结合 README.txt 指定的操作指南,创建并导入 Android 工程,其工程结构如图 3 所示。

图 3. Standalone 样例应用的 Android 工程结构

出于演示效果的考虑,这里选择屏幕较大的 Android 平板电脑模拟器。Mobile DB 的 Standalone 应用—— MobileDB Sample 的运行效果如图 4 所示:

图 4. Standalone 样例应用的演示效果

由图可知,MobileDB Sample 类似一个 Mobile DB 的管理程序。在执行具体的 SQL 操作之前,用户需要启动并连接 Mobile DB。待一切 SQL 操作完毕之后,可关闭相应的 Mobile DB 连接及数据库,释放资源。

为便于读者理解,这里抽取 MobileDB Sample 源程序中的关键代码,经过简化处理,对应的代码片段如清单 1 至清单 5。

其中,清单 1 与清单 2 分别演示 Mobile DB 的启动与停止。

清单 1. 启动 Mobile DB

public void startServer() { 
   // SolidServerControl class instance holds a reference to the mobile database server 
   SolidServerControl ssc = SolidServerControl.instance(System.out); 
   …
   // Parameters to be passed to the startServer method 
   // -c  
   //If solid.ini configuration file is used, it must be in the 
   // directory pointed by this argument. 
   // -U  
   // -P  
   // -C  
   // -E 
   // -S  
   // -E and -S encrypts the database, optional parameters 
        
   String av[] = { 
      "-c"+mobileDBDir, 
      "-U"+login, 
      "-P"+pwd, 
      "-C"+catalog, 
      "-E", 
      "-Ssecurepwd"
    }; 

   rc = SolidServerControl.startServer( av, SolidServerControl.SSC_STATE_OPEN ); 
        
   if (SolidServerControl.SSC_SUCCESS == rc) { 
      android.util.Log.w("MobileDB Sample", "solidDB - startServer is SSC_SUCCESS."); 
   } else { 
      android.util.Log.w("MobileDB Sample", "solidDB - startServer not SSC_SUCCESS."); 
   } 
        
 } 

清单 2. 停止 Mobile DB

public void stopServer() { 
 ssc_.stopServer(SolidServerControl.SSC_STATE_OPEN | SolidServerControl.SSC_STATE_OPEN); 
 android.util.Log.w("MobileDB Sample", "solidDB – server is shut down.");            
 } 

清单 3 至清单 5 演示的则是 Mobile DB 连接的打开,SQL 执行,Mobile DB 连接的关闭。

清单 3. 打开 Mobile DB 连接

 public void connectDB () throws Exception { 
   // Load the Solid JDBC Driver 
   Class.forName ("solid.jdbc.SolidDriver").newInstance(); 
   conn_ = DriverManager.getConnection ("jdbc:solid://localserver:0/dba/dba");         
 } 

清单 4. 执行 SQL 操作 ( 增、删、改、查 )

 public String executeSQL(String queryString) throws Exception { 
   StringBuffer sb = new StringBuffer(); 
   boolean usesResultSet = false; 

   if (queryString.toUpperCase().startsWith("SELECT ")) { 
      usesResultSet = true; 
   } 

   Statement stmt = conn_.createStatement(); 

   if (usesResultSet) { 
      ResultSet rs = stmt.executeQuery(queryString); 
      ResultSetMetaData meta = rs.getMetaData(); 
      int cols = meta.getColumnCount(); 

      while (rs.next()) { 
         String resultRow = ""; 
         for (int i = 1; i <= cols; i++) { 
            resultRow = resultRow + rs.getString(i) + " "; 
         } 
         android.util.Log.w("MobileDB Sample", resultRow); 
         sb.append("\t" + resultRow + "\n"); 
      } 

      conn_.commit(); 
   } else { 
      int rc = stmt.executeUpdate(queryString); 
      conn_.commit(); 
      sb.append("Operation executed succesfully.\n"); 
      if (rc > 0) { 
         sb.append(rc + " rows updated\n"); 
      } 
   } 

   return sb.toString(); 
 } 

清单 5. 关闭 Mobile DB 连接

 public void disconnectDB throws Exception() { 
   conn_.close();;         
 } 

通过 adb 提供的 shell,可查看 MobileDB Sample 程序对应的数据,如图 5 所示。

图 5. Standalone 样例应用的数据存储

由图可知,com.example.MobileDBSample_E 作为 MobileDB Sample 的根目录;cache 目录存 放的是 Mobile DB 的缓存数据;lib 目录存放的是 Mobile DB 对应的 so 共享库;files 目录存放的是 Mobile DB 对应的数据库记录,数据库日志,以及 SQL 相关操作的输出消息。

2. Mobile DB 之 Replica 应用

Mobile DB 的 Replica 应用对应的源代码为 mobile-replication-sample.zip。其工程结构与 mobile-setup-sample.zip 类似,这里不再赘述。

Mobile DB 的 Replica 应用—— Replicating MobileDB Sample,类似一个 Mobile DB 与 solidDB 构成主从关系的数据复制管理程序。Replicating MobileDB Sample 主要分为两部分:Replication Setup 负责安装复制环境;Refresh MobileDB 则负责同步数据。

图 6 演示的是 Replication Setup 环节的运行结果。

图 6. Replica 样例应用的演示效果—— Replication Setup 环节

由图可知,在 Replication Setup 环节,位于移动客户端的 Mobile DB 中将插入 1 条记录:

2000 MobileDB inserted this 

与此同时,作为数据同步服务器的 solidDB,则插入 ID 数字连续的 10 条记录:

1000 This is from SyncServer
1001 This is from SyncServer
1002 This is from SyncServer
1003 This is from SyncServer
1004 This is from SyncServer
1005 This is from SyncServer
1006 This is from SyncServer
1007 This is from SyncServer
1008 This is from SyncServer
1009 This is from SyncServer

作为 Replica 数据库,Mobile DB 的数据更新被同步至 Master 数据库 solidDB。因此,solidDB 数据库新增一条数据,其记录总数为 11。通过 solidDB 提供的命令行工具 solsql SQL editor,可以验证数据同步功能的正确性,如图 7 所示。

图 7. Replica 样例应用之 solidDB 数据库记录

以上演示的第一个环节—— Replication Setup。而作为第二个环节,Refresh MobileDB 的相关运行效果如图 8 所示。

图 8. Replica 样例应用的演示效果—— Refresh MobileDB 环节

由图可知,在 Refresh MobileDB 环节,Master 数据库 solidDB 的偶数(ID 为偶数)行被复制到 Replica 数据库 Mobile DB,即 6 条记录:

1000 This is from SyncServer
1002 This is from SyncServer
1004 This is from SyncServer
1006 This is from SyncServer
1008 This is from SyncServer
2000 MobileDB inserted this

前面提到,MobileDB 数据复制由图可知主要包含两部分:MobileDB 与 solidDB 的同步;solidDB 与后端企业数据库的同步。Replicating MobileDB Sample 仅演示了 MobileDB 与 solidDB 之间的数据同步;关于 solidDB 与后端企业数据库的数据同步,由于并非本文重点,这里仅作简单介绍。

图 9 显示了 Mobile DB 数据复制解决方案所涉及的关键组件。其中,solidDB 与后端企业数据库的数据同步,主要依赖于数据实时复制引擎—— IBM InfoSphere Change Data Capture(简称 InfoSphere CDC)。

图 9. Mobile DB 数据复制解决方案的关键组件

InfoSphere CDC 的关键组件解释说明如下:

1、Datastore Replication Engine: 表示数据库所在的源或目标服务器上运行的 InfoSphere CDC 进程,用于发送与接收变更的数据。我们把发送端进程称为 源捕获引擎(Source capture engine),接收端进程称为 目标引擎(Target engine)。InfoSphere CDC 支持 Datastore Replication Engine 以多个实例(Instance)的方式同时运行,甚至也可以同时作为源捕获引擎和目标引擎工作。

2、Access Server:是一组客户机后台进程(Daemon),用于控制客户机 Management Console 对服务器端 InfoSphere CDC 的 UI 交互式访问。当然,InfoSphere CDC 也提供命令行操作接口。

3、Management Console:是一个 Eclipse 风格的管理控制台,方便用户轻松创建、配置、监控与管理各种数据复制任务。通常而言,Management Console 与 Access Server 是一起协同工作的。无论退出 Management Console,或是关闭 Access Server,均不影响 Datastore Replication Engine 的数据复制活动。

IBM Mobile Database 的安全性

安全性始终是数据库设计者追求的重要目标之一。作为移动数据库,Mobile DB 还需考虑手机偷盗或丢失引起的额外安全风险。这一部分将集中讨论 Mobile DB 的安全性。

前面提到,Mobile DB 是一个基于 OpenSSL 加密算法的移动数据库。具体而言,Mobile DB 提供以下级别的数据库安全性:

数据库文件级加密

为了限制非法访问,Mobile DB 提供数据库文件以及数据库日志级别的加密,采用的加密算法为 AES ECB 256-Bit。

举例说明,要在启动阶段,加密整个数据库,可利用 Mobile DB 加密共享库 libsolcrypto.so 提供的 -E and -S <encryption_password> 选项,代码片段如清单 6 所示:

清单 6. 加密数据库

// Parameters to be passed to the startServer method 
 // -c  
 //      If solid.ini is used it must be in the 
 //      directory pointed by this argument. 
 // -U  
 // -P  
 // -C  
 // -E 
 // -S  
 //    -E and -S encrypts the database 
 String av[] = { 
    "-c/data/data/tmp/", 
    "-Udba", 
    "-Pdba", 
    "-Cdba"
    "-E"
    "-S admin123"
 };

关于密码的处理,建议使用 Android 框架提供的 Android KeyStore API。

密码级加密

Mobile DB 通常作为嵌入式数据库,其访问密码不会经过网络传输。即使如此,Mobile DB 的访问密码默认值为加密状态。

网络传输级加密

出于性能考虑,除用户密码之外,Mobile DB 与 solidDB 之间的网络传输数据均为非加密状态。根据业务需要,可选择 VPN 加密网络,传输敏感数据与信息。

数据复制级加密

Mobile DB 支持 ACL 访问控制功能,通过为不同用户赋予不同权限,控制对不同数据库对象的合法访问。

作为数据复制,solidDB 的 Advanced Replication 功能不仅负责主从数据库之间的数据复制,还负责数据复制过程涉及的数据安全性。
具体说来,solidDB 的 Advanced Replication 维护两类用户:作为主数据库 solidDB 所有者的 Master 用户,以及从数据库 Mobile DB 所有者的 Local 用户。为保证数据复制任务正常运行,需要在 Local 用户与 Master 用户建立合适的映射关系。关于如何创建与管理 Local 与 Master 用户,请参见 Implementing security in advanced replication setups。

移动设备(特别是手机)偷盗或丢失在所难免。一旦发生,应立即终止正在进行的数据复制活动。为简化管理与便于维护,建议应用程序为每一个 Local 用户均匹配一个 Master。这样,只要删除 Master 用户,即可终止一切相关的数据同步操作。

结束语

本文从实用性的角度,结合示例演示了如何开发基于 IBM Mobile Database 的 Android 应用,包括 Standalone 与 Replica 两种模式。IBM Mobile Database 的数据库安全性也是本文关注的重点。另外,用户也可实现 IBM DB2 Everyplace 向 IBM Mobile Database 的迁移。

 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
 
分享到
 
 


android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...