当前位置: 首页 > news >正文

MyCat_全局表及其死锁问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

全局表

全局表说明

  • 全局表配置使用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();
        }
    }
}

转载于:https://my.oschina.net/sandant/blog/698886

相关文章:

  • TortoiseGit状态图标不能正常显示的解决办法
  • 怎么在Beyond Compare中同步压缩文件夹
  • iOS import framework头文件时报错could not build module xxx
  • java 多线程和线程池
  • jQuery Ajax无刷新操作
  • JavaScript里的数组转化新方法Array.From
  • 我的业余项目总结
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 如何获取drawable目录下的图片绝对路径
  • iOS开发多线程篇 09 —NSOperation简单介绍
  • nb
  • PHP字符串操作相关
  • dtrace 手册
  • Nginxt rewrite企业应用实例
  • HDU1863(最小生成树)
  • crontab执行失败的多种原因
  • es6(二):字符串的扩展
  • ES6系列(二)变量的解构赋值
  • github从入门到放弃(1)
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript 奇技淫巧
  • JavaScript设计模式与开发实践系列之策略模式
  • JavaScript实现分页效果
  • JS专题之继承
  • laravel with 查询列表限制条数
  • mysql 5.6 原生Online DDL解析
  • Python学习之路16-使用API
  • VuePress 静态网站生成
  • 从输入URL到页面加载发生了什么
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 为视图添加丝滑的水波纹
  • 详解NodeJs流之一
  • 一道闭包题引发的思考
  • 责任链模式的两种实现
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​水经微图Web1.5.0版即将上线
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Unity3DUnity3D在android下调试
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET CLR基本术语
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET框架设计—常被忽视的C#设计技巧
  • .net专家(张羿专栏)
  • ??javascript里的变量问题
  • @NestedConfigurationProperty 注解用法