DBUtil教程之数据库集群备份

运维 数据库运维 数据库
在现在系统中,海量数据成为软件工程师要面对的主要问题。很多人都把数据库优化集中在编程和数据库的结构,再构建一些索引和视图,但是在编程和表结构都到了极致的时候,数据库优化该何去何从。

在现在系统中,海量数据成为软件工程师要面对的主要问题。很多人都把数据库优化集中在编程和数据库的结构,再构建一些索引和视图,但是在编程和表结构都到了极致的时候,数据库优化该何去何从。

Oracle公司现在有一个比较热门的数据库集群技术,叫做rac。rac应该是现在数据库集群中最优化和最热门的技术。但是只是局限于同类型和同构数据库上面。

RAC是一个负载均衡的代表,它的集群主要是面对不是大而复杂的数据库查询,而是面对大量的连接。但是如果我们面对是一个异类异构数据库怎么解决。

近年来,有一种比较热门的数据库进入我们生活,列式数据库。它是一个高查询性能,低插入性能的数据库。现在主要代表是sybaseiq,主要开源的 列式数据库有monetdb 。但是列式数据库问题很多,主要是插入慢、数据库不稳定、数据库传统语法支持不强、稳定性低、线程低和扩展性低。但是达到几百万行以上数据以后,列式数据 库的查询速度是mysql的10倍以上。

在一个大型系统中,行式和列式数据库优势互补,合理使用成为开发人员必须关心的问题。我们今天的集群也是主要面对这个问题。

集群原理:

在dbutil的集群中,我们是用了一个行式数据库和若干个列式数据库组成,每次更新数据的时候,我们是用广播模式,把增删改数据通过广播模式,群 体更新所有的数据。当查询数据时候,我们会通过连接池模式,找出最少人使用的数据,查询数据。并且可以设置每天定时同步数据,把存放在行式数据的数据,定 时同步到所有的节点。

配置方法:

在我们之前几个文章简单见过DBUtil的使用,配置方法和之前的教程大同小异。

1.配置xml

  1. <!-- 集群测试数据库 --> 
  2.     <Resource jndi="jdbc/Cluster1" driverClass="com.mysql.jdbc.Driver" 
  3.         dbUserName="root" dbPassWord="root" 
  4.         jdbcUrl="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8" 
  5.         initSize="2" minPoolSize="1" maxPoolSize="10" maxStatements="50" 
  6.         maxIdleTime="60" /> 
  7.     <Resource jndi="jdbc/Cluster2" driverClass="com.mysql.jdbc.Driver" 
  8.         dbUserName="root" dbPassWord="root" 
  9.         jdbcUrl="jdbc:mysql://127.0.0.1:3306/test2?useUnicode=true&characterEncoding=utf-8" 
  10.         initSize="2" minPoolSize="1" maxPoolSize="10" maxStatements="50" 
  11.         maxIdleTime="60" /> 
  12.     <!-- 集群 --> 
  13.     <Cluster jndiCluster="jdbc/Cluster" mainDB="jdbc/Cluster1" 
  14.         synchronous="off" synchronousTime="00:00" protect="on"> 
  15.         <Resource jndi="jdbc/Cluster1" /> 
  16.         <Resource jndi="jdbc/Cluster2" /> 
  17.     </Cluster> 

 

配置xml也是首先配置2个数据库节点,然后加入集群。

  • jndiCluster:是集群的唯一标识符
  • mainDB:集群的主数据库,建议用mysql数据库
  • synchronous:同步数据
  • synchronousTime:同步时间
  • protect:保护模式(查询数据,不用主数据库,只是获取集群数据库的数据)

2.更新数据

  1. package com.shine.DBUtil; 
  2.  
  3. import com.shine.DBUtil.manage.DBManager; 
  4. import com.shine.DBUtil.utils.ClusterList; 
  5.  
  6. public class ClusterUpdateExample { 
  7.  
  8.     /** 
  9.      * 集群更新例子 
  10.      *  
  11.      * @param args 
  12.      */ 
  13.     public static void main(String[] args) { 
  14.         System.out.println("ClusterUpdateExample..."); 
  15.         DBUtil 
  16.                 .getInstance() 
  17.                 .init( 
  18.                         "E:\\workspace\\JavaFramework2.5\\src\\com\\shine\\DBUtil\\config\\dbXml.xml"); 
  19.  
  20.         ClusterList list = DBManager.getInstance() 
  21.                 .getClusterConnectionNameList("jdbc/Cluster"); 
  22.         System.out.println("主数据库为:" + list.getMainDB()); 
  23.         String sql = "insert into test1(test) value('test')"
  24.         DBUtil.getInstance().executeClusterUpdate("jdbc/Cluster", sql); 
  25.  
  26.     } 
  27.  

3.查询数据

  1. package com.shine.DBUtil; 
  2.  
  3. import com.shine.DBUtil.model.DBModel; 
  4.  
  5. public class ClusterSelectExample { 
  6.  
  7.     /** 
  8.      * 集群查询 
  9.      *  
  10.      * @param args 
  11.      */ 
  12.     public static void main(String[] args) { 
  13.         System.out.println("ClusterSelectExample..."); 
  14.         DBUtil 
  15.                 .getInstance() 
  16.                 .init( 
  17.                         "E:\\workspace\\JavaFramework2.5\\src\\com\\shine\\DBUtil\\config\\dbXml.xml"); 
  18.  
  19.         String sql = "select * from test1"
  20.         String clusterJndi = "jdbc/Cluster"
  21.         DBModel dbmodel1 = DBUtil.getInstance().executeClusterQuery( 
  22.                 clusterJndi, sql); 
  23.  
  24.         DBModel dbmodel2 = DBUtil.getInstance().executeClusterQuery( 
  25.                 clusterJndi, sql); 
  26.  
  27.     } 
  28.  

实际上集群数据库的同步最好是不要选择定时同步,除非特殊需要,因为如果用到数据库集群,必然会有海量的数据。而DBUtil的定时同步是整库同步,使用者应该根据业务逻辑分表,部分同步比较实际。

原文链接:http://blog.csdn.net/arjick/article/details/6758872

【编辑推荐】

  1. DataReader链接关闭解惑篇
  2. 详解MySQL如何链接远程SQL
  3. 详解SQL Server如何链接远程MySQL
  4. 为什么要关闭数据库连接,能不能不要啊
  5. SQL语句相关概念及练习之基础篇
责任编辑:艾婧 来源: arjick的专栏
相关推荐

2011-08-10 15:46:29

数据库

2021-05-17 06:57:34

SQLServer数据库

2011-04-07 10:50:47

数据库编程注释规范

2011-08-23 17:33:00

SQLAndroid

2011-04-07 10:29:21

数据库编程书写规范

2009-10-26 09:04:35

VB.NET数据库基础

2011-03-24 09:07:11

SQL Server数备份

2019-03-01 13:40:01

MySQL数据库备份案例

2009-11-20 14:08:39

Oracle数据库备份

2010-06-17 13:24:38

SQL Server教

2011-03-31 14:34:46

cactimysql备份

2011-05-17 15:02:15

ORACLE数据库备份

2011-03-30 13:57:41

MySQL数据库自动备份

2010-08-27 09:59:51

SQL Server

2011-08-24 10:45:23

Oracle数据库进程从属进程

2011-03-24 16:46:44

微软Excel数据库

2009-06-24 13:07:44

Android数据库

2015-03-18 13:39:35

MySQLBackup数据库备份种类

2011-05-16 09:32:33

mysql数据库备份

2018-08-24 13:58:13

数据库MySQL备份
点赞
收藏

51CTO技术栈公众号