文档章节

MyCat_全局表及其死锁问题

sand_ant
 sand_ant
发布于 2016/06/22 09:30
字数 334
阅读 1211
收藏 7

全局表

全局表说明

  • 全局表配置使用type='global'
  • 全局表数据增加或者修改时,节点之间保持数据一致
  • 全局表只适合修改不频繁的表,例如字典表

全局表死锁

为了保持数据的一致性,当全局表更新数据时会通过锁机制来保证数据统一。
当时这也导致了并发更新的时候死锁的发生,全局表需要慎用。
以下是测试代码:

z_dict表配置的为全局表
两个线程并发更新一条记录
基本上每次都会造成锁超时的问题

    public static void testThreadUpdate(DataSourceFactory ds) throws SQLException {
        Connection con1 = ds.getConnection();
        Connection con2 = ds.getConnection();
        UpdateThread thread1 = new UpdateThread(con1, "update z_dict set name=? where id=?", new ArrayList<String>() {
            private static final long serialVersionUID = 1L;
            {
                add("Q1");
                add("1");
            }
        });
        UpdateThread thread2 = new UpdateThread(con2, "update z_dict set name=? where id=?", new ArrayList<String>() {
            private static final long serialVersionUID = 1L;
            {
                add("Q2");
                add("1");
            }
        });
        thread1.start();
        thread2.start();
        try {
            Thread.sleep(60000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
package com.am.mycatclient;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

public class UpdateThread extends Thread {
    private Connection con;
    private List<String> values;
    private PreparedStatement ps;
    public UpdateThread(Connection con, String updateSql, List<String> values) {
        super();
        this.con = con;
        this.values = values;
        try {
            con.setAutoCommit(false);
            ps = con.prepareStatement(updateSql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        try {
            for (int i = 1; i <= values.size(); i++) {
                ps.setString(i, values.get(i - 1));
            }
            int executeUpdate = ps.executeUpdate();
            System.out.println("=="+executeUpdate);
            con.commit();
            ps.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

© 著作权归作者所有

sand_ant
粉丝 3
博文 35
码字总数 18706
作品 0
无锡
私信 提问
MyCAT全局序列号-数据库方式

1.MyCat中的全局序列号介绍 在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,MyCat 提供了全局 sequence,并且提供了包含本地配置和数据库配置等多种实现方式。...

HilaryHe
2018/07/23
0
0
技术分享 | MyCat的坑如何在分布式中间件DBLE上改善(内含视频链接)

作者简介 蓝寅,开源分布式中间件DBLE项目负责人;持续专注于数据库方面的技术, 始终在一线从事开发;对数据复制,读写分离,分库分表的有深入的理解与实践。 3月14日,爱可生开源社区联合I...

爱可生
03/19
82
0
MyCat数据库的基础配置及使用

一、为什么需要分布式数据据库 随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技...

宜信技术学院
09/10
4.2K
1
Dubbo学习系列之十三(Mycat数据库代理)

软件界有只猫,不用我说,各位看官肯定知道是哪只,那就是大名鼎鼎的Tomcat,现在又来了一只猫,据说是位东方萌妹子,暂且认作Tom猫的表妹,本来叫OpencloudDB,后又改名为Mycat,或许Cat更亲...

甲由崽
09/29
0
0
Mysql数据库周末学习之Mycat全局表 mysql DBA

Mysql数据库业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,但是大部分的业务场景都会用到,那么这种表适合于Mycat...

mo默瑶
2018/05/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
27分钟前
2
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
28分钟前
3
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
44分钟前
3
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
45分钟前
4
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
50分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部