MySQL 读写分离

Mysql进阶之Mysql-proxy的读写分离 Mysql-proxy简介: mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等 MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤, 从而实现读写分离和负载平衡。对于应用来说,My... 阅读详情

一 什么是读写分离

      

MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。可以看下这张图:


 

二 读写分离的好处


1.增加冗余

2.增加了机器的处理能力

3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

 

三 读写分离提高性能之原因

 

1.物理服务器增加,负荷增加
2.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用
3.从库可配置myisam引擎,提升查询性能以及节约系统开销
4.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的
5.读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制

6.可以在从库启动是增加一些参数来提高其读的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上

7.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”

8.MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

 

四 读写分离示意图

  

    

 

五 读写分离模拟

 

实验环境简介

serv01:代理服务器 192.168.1.11 serv01.host.com

serv08:主服务器(主要写数据,可读可写) 192.168.1.18 serv08.host.com

serv09:从服务器(主要读数据) 192.168.1.19 serv09.host.com

 

操作系统版本

RHEL Server6.1 64位系统

 

使用到的软件包版本

mysql-5.5.29-linux2.6-x86_64.tar.gz

 mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz

 

第一步,搭建MySQL服务器,清空日志。注意:代理服务器中不需要装MySQL

 

第二步,拷贝mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz文件,解压文件

[root@larrywen 1005]# scp mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz 192.168.1.11:/opt

[root@serv01 opt]# tar -xvf mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz -C /usr/local/

[root@serv01 opt]# cd /usr/local/

[root@serv01 local]# mv mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit/ mysql-proxy
[root@serv01 local]# ll mysql-proxy/
total 24
drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 bin
drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 include
drwxr-xr-x. 4 7157 wheel 4096 Aug 17  2011 lib
drwxr-xr-x. 2 7157 wheel 4096 Aug 17  2011 libexec
drwxr-xr-x. 3 7157 wheel 4096 Aug 17  2011 licenses
drwxr-xr-x. 3 7157 wheel 4096 Aug 17  2011 share

--可以查看帮助
[root@serv01 bin]# ./mysql-proxy --help-all

 

第三步,serv08主服务器创建用户,serv09从服务器创建用户,注意用户名和密码一致

serv08
mysql> grant all on *.* to 'larry'@'192.168.1.%' identified by 'larry';
Query OK, 0 rows affected (0.00 sec)

serv09
mysql> grant all on *.* to 'larry'@'192.168.1.%' identified by 'larry';
Query OK, 0 rows affected (0.00 sec)


第四步,serv09从服务器更改设置,开启slave,查看slave状态。创建测试数据库,插入测试数据

serv09
mysql> change master to  master_host='192.168.1.18',  master_user='larry', master_password='larry', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=107;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.18
                  Master_User: larry
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 107
               Relay_Log_File: serv09-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 410
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
1 row in set (0.00 sec)

ERROR: 
No query specified

mysql> select user,password,host from mysql.user;
+------+-------------------------------------------+-----------------+
| user | password                                  | host            |
+------+-------------------------------------------+-----------------+
| root |                                           | localhost       |
| root |                                           | serv08.host.com |
| root |                                           | 127.0.0.1       |
| root |                                           | ::1             |
|      |                                           | localhost       |
|      |                                           | serv08.host.com |
| rep  | *0CDC8D34246E22649D647DB04E7CCCACAB4368B6 | 192.168.1.%     |
+------+-------------------------------------------+-----------------+
7 rows in set (0.00 sec)

  
mysql> create database larrydb;
Query OK, 1 row affected (0.00 sec)

mysql> use larrydb;
Database changed
mysql> create table user(id int, name varchar(30));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into user values(1,'larrywen');
Query OK, 1 row affected (0.01 sec)

mysql> insert into user values(2,'wentasy');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
+------+----------+
2 rows in set (0.00 sec)


serv09
mysql> select * from larrydb.user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
+------+----------+
2 rows in set (0.00 sec)


第五步,为了查看现象,serv09从服务器关闭slave

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)


第六步,serv 01查看是否有MySQL用户,修改rw-splitting.lua文件,修改如下几个参数

[root@serv01 mysql-proxy]# id mysql
uid=500(mysql) gid=500(mysql) groups=500(mysql)

[root@serv01 mysql-proxy]# vim rw-splitting.lua 
[root@serv01 mysql-proxy]# cat rw-splitting.lua | grep -e min_idle_connections -e max_idle_connections -e is_debug
    min_idle_connections = 1,--最小空闲连接数,为了测试,这里设置为1
    max_idle_connections = 1,--最大空闲连接数,为了测试,这里设置为1
    is_debug = true--是否打开Debug调试,为了查看调试信息,这里设置为true

 

第七步,启动mysql-proxy

[root@serv01 mysql-proxy]# /etc/init.d/mysql-proxy start
Starting mysql-proxy:
  
--先确定是否可以连接
[root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.18
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
[root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.19
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye


第八步,查看现象

[root@serv01 ~]# /etc/init.d/mysql-proxy start
Starting mysql-proxy: 
[root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.11

[connect_server] 192.168.1.11:51054
  [1].connected_clients = 0
  [1].pool.cur_idle     = 0
  [1].pool.max_idle     = 1
  [1].pool.min_idle     = 1
  [1].type = 1
  [1].state = 0
  [1] idle-conns below min-idle
Welcome to the MySQL monitor.  Commands end with ; or \g.
[read_query] 192.168.1.11:51054
  current backend   = 0
  client default db = 
  client username   = larry
  query             = select @@version_comment limit 1
  sending to backend : 192.168.1.19:3306
    is_slave         : false
    server default db: 
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true
Your MySQL connection id is 10
Server version: 5.5.29-log Source distribution

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

mysql> use larrydb;
[read_query] 192.168.1.11:51054
  current backend   = 0
  client default db = 
  client username   = larry
  query             = SELECT DATABASE()
  sending to backend : 192.168.1.19:3306
    is_slave         : false
    server default db: 
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true
[read_query] 192.168.1.11:51054
  current backend   = 0
  client default db = 
  client username   = larry
  sending to backend : 192.168.1.19:3306
    is_slave         : false
    server default db: 
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : false
Database changed
mysql> select * from user;
[read_query] 192.168.1.11:51054
  current backend   = 0
  client default db = larrydb
  client username   = larry
  query             = select * from user
  sending to backend : 192.168.1.19:3306
    is_slave         : false
    server default db: larrydb
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
+------+----------+
2 rows in set (0.00 sec)

mysql> insert into user values(3,'jsutdb');
[read_query] 192.168.1.11:51644
  current backend   = 0
  client default db = larrydb
  client username   = larry
  query             = insert into user values(3,'jsutdb')
  sending to backend : 192.168.1.19:3306
    is_slave         : false
    server default db: larrydb
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true
Query OK, 1 row affected (0.00 sec)


serv08
mysql> select * from user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
+------+----------+
2 rows in set (0.00 sec)

serv09
mysql> select * from larrydb.user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
|    3 | jsutdb   |
+------+----------+
3 rows in set (0.00 sec)


第九步,以上的测试虽有效果,但不是预期。排查原因,重新配置。发现proxy-read-only-backend-addresses和proxy-backend-addresses参数配置出错,proxy-read-only-backend-addresses应该配置成从服务器的IP地址,proxy-backend-addresses应该配置成主服务器的IP地址。

[root@serv01 ~]# vim /etc/init.d/mysql-proxy 
[root@serv01 ~]# cat /etc/init.d/mysql-proxy
#!/bin/sh
#
# mysql-proxy This script starts and stops the mysql-proxy daemon
#
# chkconfig: - 78 30
# processname: mysql-proxy
# description: mysql-proxy is a proxy daemon to mysql

# Source function library.
. /etc/rc.d/init.d/functions

#PROXY_PATH=/usr/local/bin
PROXY_PATH=/usr/local/mysql-proxy/bin

prog="mysql-proxy"

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Set default mysql-proxy configuration.
#PROXY_OPTIONS="--daemon"
PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.1.19:3306 --proxy-backend-addresses=192.168.1.18:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"

#PROXY_PID=/usr/local/mysql-proxy/run/mysql-proxy.pid
PROXY_PID=/var/run/mysql-proxy.pid

# Source mysql-proxy configuration.
if [ -f /etc/sysconfig/mysql-proxy ]; then
        . /etc/sysconfig/mysql-proxy
fi

PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH

# By default it's all good
RETVAL=0

# See how we were called.
case "$1" in
  start)
        # Start daemon.
        echo -n $"Starting $prog: "
        $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=debug --log-file=/var/log/mysql-proxy.log --proxy-address=192.168.1.11:3306
        RETVAL=$?
        echo
        if [ $RETVAL = 0 ]; then
                touch /var/lock/subsys/mysql-proxy
        fi
       ;;
  stop)
        # Stop daemons.
        echo -n $"Stopping $prog: "
        killproc $prog
        RETVAL=$?
        echo
        if [ $RETVAL = 0 ]; then
                rm -f /var/lock/subsys/mysql-proxy
                rm -f $PROXY_PID
        fi
       ;;
  restart)
        $0 stop
        sleep 3
        $0 start
       ;;
  condrestart)
       [ -e /var/lock/subsys/mysql-proxy ] && $0 restart
      ;;
  status)
        status mysql-proxy
        RETVAL=$?
       ;;
  *)
        echo "Usage: $0 {start|stop|restart|status|condrestart}"
        RETVAL=1
       ;;
esac

exit $RETVAL

 

第十步,测试。插入数据,可以发现连接的是主服务器,查询的时候也是主服务器。说明主服务器和从服务器均有读的的功能。

[root@serv01 ~]# mysql -ularry -plarry -h 192.168.1.11

[connect_server] 192.168.1.11:57891
  [1].connected_clients = 0
  [1].pool.cur_idle     = 0
  [1].pool.max_idle     = 1
  [1].pool.min_idle     = 1
  [1].type = 1
  [1].state = 1
  [1] idle-conns below min-idle
[read_query] 192.168.1.11:57891
  current backend   = 0
  client default db = 
  client username   = larry
  query             = select @@version_comment limit 1
  sending to backend : 192.168.1.18:3306
    is_slave         : false
    server default db: 
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true


mysql> insert into user values(5,'test');
Query OK, 1 row affected (0.01 sec)
[read_query] 192.168.1.11:57893
  current backend   = 0
  client default db = larrydb
  client username   = larry
  query             = insert into user values(5,'test')
  sending to backend : 192.168.1.18:3306
    is_slave         : false
    server default db: larrydb
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true
mysql> select * from user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
|    5 | test     |
+------+----------+
3 rows in set (0.00 sec)
[read_query] 192.168.1.11:57893
  current backend   = 0
  client default db = larrydb
  client username   = larry
  query             = select * from user
  sending to backend : 192.168.1.18:3306
    is_slave         : false
    server default db: larrydb
    server username  : larry
    in_trans        : false
    in_calc_found   : false
    COM_QUERY       : true

serv08主服务器查看数据,可以查询到,说明主服务器可以写
mysql> select * from larrydb.user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
|    5 | test     |
+------+----------+
3 rows in set (0.00 sec)

serv09从服务器查询数据,发现不可查询到,说明从服务器只读
mysql> mysql> select * from larrydb.user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
|    3 | jsutdb   |
|    4 | db       |
+------+----------+
4 rows in set (0.00 sec)


第十一步,开启slave。发现数据同步成功。

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from larrydb.user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | larrywen |
|    2 | wentasy  |
|    3 | jsutdb   |
|    4 | db       |
|    5 | test     |
+------+----------+
5 rows in set (0.00 sec)


六 参考资料

原文地址:点击打开链接

Mysql 读写分离中间件 mysql读写分离算是很早就提出的一个提高数据库性能的方案,最少有10多年之久了吧,但是实际应用中非常多的企业系统中还是在使用MySQL主从,甚至就是一个mysql。甚至很多资深的开发人员知道读写分离,什么mycat 等等,但是真正用于生产的还是不多。今天我们就给大家推荐一款轻量级,配置简单搭建方便的读写分离中间件。经过多款读写分离中间件比对后最为实用,非常适合中小型系统的读写分离中间件 maxscale。 阅读详情

相关推荐

mysql读写分离

1.创建登陆用户create user 'maxscale_monitor'@'192.168.142.%' identified with mysql_native_password by 'Admin@123456';3.创建路由用户:create user 'maxscale_route'@'192.168.142.%' identified with mysql_native_password by 'Admin@123456';高可用:底层mysql,如果从库挂了,自动摘除流量;

2301_78530830的博客 1047

MySQL 分库分表实战之ShardingSpare(分库分表+读写分离)

本文全方位的对shardingsphere的搭建、MySQL分库分表配置、测试进行了介绍

weixin_38597669的博客 3010

MySQL的读写分离的配置

MySQL的读写分离的配置

hzk1791318012的博客 1781

Spring Boot demo系列(十):ShardingSphereJDBC + MyBatisPlus 读写分离 + 主从复制

1 概述 本文讲述了如何使用MyBatisPlus+ShardingSphere进行读写分离,以及利用MySQL进行一主一从的主从复制。 具体步骤包括: MySQL主从复制环境准备(Docker) 搭建ShardingShpere+MyBatisPlus+Druid环境 测试 2 环境 OpenJDK 11.0.11 Spring Boot 2.5.1 MyBatis Plus 3.4.3.1 MyBatis Plus Generator 3.5.0 Druid 1.2.6 ShardingSpher

氷泠 4114

Windows 下 Codex MCP 服务配置全攻略:从环境搭建到实战避坑

本文详细介绍了在Windows系统下配置Codex MCP服务的完整流程与实战避坑指南。内容涵盖从Node.js环境搭建、Codex CLI安装,到核心配置文件config.toml的编写与解析,并重点解决了Windows平台特有的环境变量设置、MCP服务启动命令适配等关键难点,帮助开发者顺利完成从环境准备到编辑器插件连接的整个配置过程。

weixin_28826545的博客 2069

STM32F103跑LVGL,用DMA加速刷屏,800*480大屏也能丝滑

本文详细介绍了如何在STM32F103芯片上通过DMA加速和内存优化,实现800*480大屏的LVGL流畅运行。通过FSMC+DMA硬件架构优化、双缓冲机制和LVGL参数调优,显著提升了界面刷新率和响应速度,适用于嵌入式GUI开发中的高性能需求场景。

weixin_30357231的博客 376

Apache shardingSphere(5.x)源码解析之readwrite-splitting源码

概述 读写分离功能作为shardingsphere的可插拔能力之一 包结构分析 api:对外暴露的接口,包括算法spi、配置的对象类 core:核心层,包含默认提供的读分配的负载均衡的算法、以及SQL改写,选取数据源的核心逻辑 distSQL:distsql解析以及管理的相关的流程 spring:spring-boot-starter以及spring-namespace相关的实现。 具体实现 在api层面,对外提供的主要是配置对象以及,读的负载均衡。 在这里,官方提供了两种方式的负载。 1、ROUND_

zzz 1455

记录一次PowerJob使用达梦数据库的配置

记录一次PowerJob使用达梦数据库的配置

早晨阳光一般暖的博客 2159

ShardingSphere-Proxy读写分离详解与实战

ShardingSphere-Proxy读写分离详解与实战,本篇文章主要讲解了ShardingSphere-Proxy读写分离详解与实战,实操过程非常重要,大家一定要动手亲自实践一下,必须掌握。下节预告,ShardingSphere-Proxy垂直分片详解与实战,大家敬请期待呦!!!。

Coder_ljw的博客 1982

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2780

Sharding-jdbc-ReadWriteSplit-Sharding总结

引入顺序和spring-bean的方式是一致的,只不过通过springboot的方式将一些bean的创建采用配置类的方式,自动化进行。

u014511571的博客 744

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 375

MySQL读写分离

在slave1和2上查询不到,在master上才能查看到这条语句内容,说明写操作在master服务器上,由此验证,已经实现了mysql读写分离,目前所有的操作都全部在master主服务器上,用来避免数据的不同步,所有的读操作都分摊给了slave从服务器,用来分担数据库的压力。简单来说,读写分离就是只在主服务器上写,只在从服务器上读。不过,无论是哪种存储方式,在最终用户看,MyCAT里都是一个传统的数据库表,支持标准的 SQL,语句进行数据的操作,这样,对前端业务系统来说可以大幅降低开发难度,提升开发速度。

2501_91344113的博客 1652

8、对比 LightGBM、XGBoost 和深度学习

本文对比了LightGBM、XGBoost和深度学习模型(特别是TabTransformer)在处理表格数据时的性能差异。从模型复杂度、数据准备、训练时间、准确性和适用场景等方面进行分析,重点探讨了三者在人口普查收入预测任务中的表现。文章详细介绍了XGBoost与LightGBM的核心特性与区别,深入讲解了TabTransformer的架构与实现,并涵盖了分类特征编码、缺失值处理和类别不平衡等关键数据预处理技术,为选择合适的表格数据建模方法提供了实践指导。

julia4scientist的博客 120

Quuppa 如何引领蓝牙 ® 定位服务的全新发展方向

我们最优质的客户,是那些对其他实时定位系统(RTLS)的承诺感到失望、转而寻求 “能覆盖全业务场景的更广泛赋能技术” 的客户 —— 前文提到的消防车制造商就是典型案例:他们尝试并通过 Quuppa 的蓝牙方案取得了成功。我们希望业务合作伙伴(如系统集成商、解决方案提供商)能充分利用 Quuppa 智能定位系统的功能,为客户提供专属解决方案:无论是追踪微型标签、实现未来移动设备的 AoD 功能,还是基于 RSSI 的简单信标(信标作为物联网网关),这些功能都能让同一套 Quuppa 系统支持广泛的用例。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 832

mysql 读写分离_详解MySQL读写分离

主从复制的原理MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。读写分离的原理简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到从数据库中。基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客...

weixin_33173924的博客 3250

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Mysql 读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

lihui12356的博客 2406

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【MySQL数据库】MySQL读写分离

读写分离是为了优化数据库性能,通过将写操作(INSERT、UPDATE、DELETE)和读操作(SELECT)分别分配到不同的数据库实例上,以达到降低单一数据库负载、提高整体响应速度的目的。这通常通过数据库的主从复制技术来实现,主数据库负责处理写操作,从数据库负责处理读操作,并保持与主数据库的数据同步。1)基于程序代码内部实现:优点:性能好,不需要额外的硬件设备支出;首先,在 Master、Slave1、Slave2 的 MySQL 上开放权限给 Amoeba 访问。

Karoku的博客 1608

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: CentOS 6.3下rsync服务器的安装与配置
下一篇: MySQL 配置文件详解
光速之年
博客等级 码龄12年 31粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值