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语句相关概念及练习之基础篇

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/308422.html<

(0)
运维的头像运维
上一篇2025-05-27 14:05
下一篇 2025-05-27 14:07

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注