首页 > 其他分享 >读写分离

读写分离

时间:2022-12-07 16:00:31浏览次数:57  
标签:JDBC name 数据源 读写 分离 com 数据库

读写分离

读写分离需要保证两个数据库数据一致, 需要用到 MySQL 的主从复制:
主从复制: https://www.cnblogs.com/mynode/p/16955825.html

面对日益增加的系统访问量,数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说,将数据库拆分为主库从库,主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能得到极大的改善。

ShardingJDBC介绍

Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。

使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。

Sharding-JDBC具有以下几个特点:

1). 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

2). 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

3). 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

依赖:

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>

数据库环境

在主库中创建一个数据库rw, 并且创建一张表, 该数据库及表结构创建完毕后会自动同步至从数据库,SQL语句如下:

create database rw default charset utf8mb4;

use rw;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

配置

spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.200.200:3306/rw?characterEncoding=utf-8
        username: root
        password: root
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.200.201:3306/rw?characterEncoding=utf-8
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    # 如果使用了 druid 数据池则需要开启允许 bean 配置覆盖
    # ShardingJDBC 和 druid 都会创建一个 DataSource, 会产生冲突
    allow-bean-definition-overriding: true

image

标签:JDBC,name,数据源,读写,分离,com,数据库
From: https://www.cnblogs.com/mynode/p/16963337.html

相关文章

  • win32API 读写ANSI\UNICODE\UNICODE BIG-ENDIAN\UTF-8格式文本
    #include<windows.h>#include<tchar.h>#include<cassert>////读写文件的简单API函数封装//CFileBaseHelper//|......
  • C++ 读写文本文件
    1.逐行读文本,文本以空格分隔points.txt文件内容如下:indexx1y1x2y202473722646141224158246400238926440750934664349028943337949618......
  • 034-MemoryStream内存数据读写
    位与字节计算机中最小的单位时“位”,用bit表示,数据是用二进制来表示。但是bit过小,因此用字节来作为存储单位,用“Byte”表示,其中8位组成一个字节。所以一个字节表示的数的......
  • [C++11与并发编程]读写锁的简单实现
    读写锁的简单实现layout:posttitle:读写锁categories:cpp_concurrencydescription:C++并发编程简介keywords:c++,并发编程,读写锁​​boost共享锁实现​​​读写......
  • 思维拉练前后端分离诞生记-系统学习八
    目录​​一、背景​​​​二、介绍​​​​第一练:实现5+6需求​​​​第二练:简单变化的开始​​​​第三练:质的变化​​​​期中训练:​​​​第四练:变是永远不变的​​​​......
  • C++读写二进制文件
    方法一:#include<stdio.h>#include<stdlib.h>#include<fstream>#include<string>//size_treadBinaryFile(constchar*filename,unsignedchar*&data){......
  • 用NetCore + ReactJS 实现一个前后端分离的网站 (5) 日志 - log4net & AOP切面编程
    用NetCore+ReactJS实现一个前后端分离的网站(5)日志-log4net&AOP切面编程1.前言日志始终是跟踪与调试程序的最佳手段,因为调试难以溯及既往,而日志则能忠实地记......
  • Linux 下 hwclock 读写 RTC 报错 Invalid argument
    以上错误信息都是因为year设置不当引起的。没有设置RTC,RTC也不会启动计时。下面首先设置正确的系统时间,然后将系统时间传递给RTC。tm里的tm_year是从1900年开始算的,如要......
  • CSV:CSV文件的读写库
    CSV格式的全称是CommaSeparatedValues,意思是逗号分割的数据,是最常见的电子表格和数据库的导出格式之一,在RFC4180中已经成为了一种标准格式。Python中提供了一个官......
  • Mysql主从复制,读写分离
    一、Mysql主从复制概述在企业中,业务数据量通常都比较大,单台Mysql在安全性,高可用性和高并发方面都无法满足实际需求,因此可以通过主从复制的方式来同步数据,再通过读写分离来提......