海山数据库(He3DB)代理ProxySQL使用详解:(二)功能实测

读写分离实测

ProxySQL官方demo演示了三种读写分离的方式:使用不同的端口进行读写分离、使用正则表达式进行通用的读写分离、使用正则和digest进行更智能的读写分离。最后一种是针对特定业务进行的优化调整,也可将其归结为第二种方式,下边分别进行测试。

基于端口的读写分离

环境准备

  1. MySQL里创建访问用户,监控用户

SQL
#创建监控账号
create user monitor@'192.168.31.%' identified with mysql_native_password by '******';
#授权
grant replication client on *.* to monitor@'192.168.31.%' identified by '******' ;

#创建访问用户账号    
create user proxyadmin@'192.168.31.%' identified with mysql_native_password by '******';
#开放权限
grant all privileges on *.* to proxyadmin@'192.168.31.%';

flush privileges;

  1. ProxySQL配置mysql节点

SQL
##hostgroup_id, hostname, port 组成一个主键
mysql>  select * from mysql_servers;
Empty set (0.00 sec)

mysql> insert into mysql_servers(hostgroup_id,hostname,port)  values(10,'192.168.31.128',5310);
Query OK, 1 row affected (0.01 sec)

mysql> insert into mysql_servers(hostgroup_id,hostname,port)  values(20,'192.168.31.130',5310);
Query OK, 1 row affected (0.01 sec)
mysql>  select * from mysql_servers\G
*************************** 1. row ***************************
       hostgroup_id: 10
           hostname: 192.168.31.128
               port: 5310
          gtid_port: 0
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 1000
max_replication_lag: 0
            use_ssl: 0
     max_latency_ms: 0
            comment:        
*************************** 2. row ***************************
       hostgroup_id: 20
           hostname: 192.168.31.130
               port: 5310
          gtid_port: 0
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 1000
max_replication_lag: 0
            use_ssl: 0
     max_latency_ms: 0
            comment:
2 rows in set (0.00 sec)

##加载到内存
mysql> load mysql servers to runtime;
Query OK, 0 rows affected (0.04 sec)
##持久化到磁盘
mysql> save mysql servers to disk;
Query OK, 0 rows affected (0.08 sec)

  1. 使用用户配置,配置mysql_users表

SQL
mysql> insert into mysql_users(username,password,default_hostgroup) values('proxyadmin','123qwe',10);
Query OK, 1 row affected (0.00 sec)
mysql> load mysql users to runtime;
Query OK, 0 rows affected (0.01 sec)

mysql> save mysql users to disk;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from mysql_users\G
*************************** 1. row ***************************
              username: proxyadmin
              password: 123qwe
                active: 1
               use_ssl: 0
     default_hostgroup: 10
        default_schema: NULL
         schema_locked: 0
transaction_persistent: 1
          fast_forward: 0
               backend: 1
              frontend: 1
       max_connections: 10000
            attributes:
               comment:
1 row in set (0.01 sec)

  1. 监控用户配置

Monitor模块就会开始监控后端的read_only值,当监控到read_only值后,就会按照read_only的值将某些节点自动移动到读/写组

SQL
mysql> set mysql-monitor_username='monitor';
Query OK, 1 row affected (0.00 sec)

mysql> set mysql-monitor_password='123qwe';
Query OK, 1 row affected (0.00 sec)

mysql> load mysql variables to runtime;
Query OK, 0 rows affected (0.02 sec)

mysql> save mysql variables to disk;
Query OK, 158 rows affected (0.02 sec)

  1. 配置基于端口的路由规则

写端口通过6401端口,读端口通过6402端口,从而通过不同端口来实现读写分离功能。

SQL
INSERT INTO mysql_query_rules (rule_id,active,proxy_port,destination_hostgroup,apply)
VALUES (1,1,6401,10,1), (2,1,6402,20,1);

mysql> load mysql query rules to runtime;
Query OK, 0 rows affected (0.01 sec)

mysql> save mysql query rules to disk;
Query OK, 0 rows affected (0.03 sec)

  1. 设置读写分离端口

因端口的修改不能动态加载,需重启ProxySQL实例

SQL
mysql> SET mysql-interfaces='0.0.0.0:6401;0.0.0.0:6402';
Query OK, 1 row affected (0.00 sec)

mysql> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)

mysql> save mysql variables to disk;
Query OK, 158 rows affected (0.01 sec)

验证

SQL
[user@server1 proxysql]$ mysql -uproxyadmin -p***** -P6401 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

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> select @@hostname;
+------------+
| @@hostname |
+------------+
| server1    |
+------------+
1 row in set (0.01 sec)


[user@server1 proxysql]$ mysql -uproxyadmin -p***** -P6402 -h127.0.0.1
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

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> select @@hostname;
+------------+
| @@hostname |
+------------+
| server2    |
+------------+
1 row in set (0.01 sec)

测试验证

  • 所有来自于6401端口连接的查询都将被发送到hostgroup为10的组中;
  • 所有来自于6402端口连接的查询都将被发送到hostgroup为20的组中;

配置缺点

  • 该配置需要应用有内置的读写分离功能,以便区分读和写;
  • 通常应用只配置一个单独的入口来连接ProxySQL,这对很多业务来说是不可接受的。
  1. 信息查询

#read_only日志此时也为空(正常来说,新环境配置时,这个只读日志是为空的)

Plaintext
MySQL [(none)]> select * from mysql_server_read_only_log;

#replication_lag的监控日志为空

Plaintext
MySQL [(none)]> select * from mysql_server_replication_lag_log;

#注意:可能会有很多connect_error,这是因为没有配置监控信息时的错误,配置后如果connect_error的结果为NULL则表示正常。

Plaintext
MySQL [(none)]> select * from mysql_server_connect_log;

#以下是对心跳信息的监控(对ping指标的监控)

Plaintext
MySQL [(none)]> select * from mysql_server_ping_log;

查看路由的信息,可查询stats库中的stats_mysql_query_digest表。

Plaintext
mysql> select* from stats_mysql_query_digest;
mysql>SELECT hostgroup hg, sum_time, count_star, digest_text FROM stats_mysql_query_digest ORDER BY

  1. 开启web统计功能

查看路由的信息,可查询stats库中的stats_mysql_query_digest表。

SQL
mysql> update global_variables set variable_value='true' where variable_name='admin-web_enabled';
Query OK, 1 row affected (0.01 sec)

mysql> LOAD ADMIN VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.02 sec)

mysql>  SAVE ADMIN VARIABLES TO DISK;
Query OK, 49 rows affected (0.01 sec)

mysql> select * from global_variables where variable_name LIKE 'admin-web%' or variable_name LIKE 'admin-stats%';
+----------------------------------------+----------------+
| variable_name                          | variable_value |
+----------------------------------------+----------------+
| admin-stats_credentials                | stats:*****    |
| admin-stats_mysql_connections          | 60             |
| admin-stats_mysql_connection_pool      | 60             |
| admin-stats_mysql_query_cache          | 60             |
| admin-stats_mysql_query_digest_to_disk | 0              |
| admin-stats_system_cpu                 | 60             |
| admin-stats_system_memory              | 60             |
| admin-web_enabled                      | true           |
| admin-web_port                         | 6080           |
| admin-web_verbosity                    | 0              |
+----------------------------------------+----------------+
10 rows in set (0.00 sec)

访问http://192.168.31.128:6080并使用stats:****登录即可查看一些统计信息。

基于正则规则的读写分离

开启eventlog

eventslog可以记录用户在通过ProxySQL访问时的所有SQL语句,可以用其观察具体的路由规则,以下为开启方法:

SQL
## 设置eventslog的文件名称
mysql> SET mysql-eventslog_filename='queries.log';
Query OK, 1 row affected (0.00 sec)
## 设置eventslog的格式为json
mysql>  SET mysql-eventslog_format=2;
Query OK, 1 row affected (0.00 sec)
## 加载到runtime层并保存到持久层
mysql> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)

mysql> save mysql variables to disk;
Query OK, 158 rows affected (0.01 sec)

清除之前创建的查询规则:

SQL
mysql> delete from mysql_query_rules;
Query OK, 2 rows affected (0.00 sec)

mysql> SET mysql-interfaces='0.0.0.0:6033';;
Query OK, 1 row affected (0.00 sec)

mysql> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)

mysql> save mysql variables to disk;
Query OK, 158 rows affected (0.01 sec)

## 延续上面配置,添加查询规则记录eventslog,如下表示对所有的操作都记录
INSERT INTO mysql_query_rules(active, match_digest, log,apply)
VALUES(1,'.',1,0);

## 添加基于正则的路由规则
INSERT INTO mysql_query_rules(active,match_digest,destination_hostgroup,apply)
VALUES(1,'^SELECT.*FOR UPDATE$',10,1),(1,'^SELECT',20,1);

## 加载配置到运行层并保存配置到持久层
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

测试预测

  • 所有的SELECT FOR UPDATE语句将被路由到hostgroup为10的组中;
  • 其他的SELECT语句将被路由到hostgroup为 20的组中;
  • 除以上外的其他语句,将被路由到连接用户默认的hostgroup组中;

测试验证

SQL
## 小写查询(select请求忽略大小写,查看eventslog,该SQL路由到读组20)
mysql> select * from sbtest1 limit 1;

## 大写查询(select请求忽略大小写,查看eventslog,该SQL路由到读组20)
mysql> SELECT * from sbtest1 limit 1;

## 大小写混合查询(select请求忽略大小写,查看eventslog,该SQL路由到读组20)
mysql> SelECT * from sbtest1 limit 1;

## 包含空格的查询(ProxySQL会对包含空格的SQL进行处理,查看eventslog,该SQL路由到读组20)
mysql>    SelECT * from sbtest1 limit 1;

## 小写查询(select请求忽略大小写,查看eventslog,该SQL路由到写组10)
mysql> select * from sbtest1 limit 1 for update;

ProxySQL集群

proxysql-1:192.168.31.128
proxysql-2:192.168.31.130

  1. 更改所有ProxySQL节点的配置文件

SQL
# vim /etc/proxysql.cnf
#修改
admin_variables=
{
        admin_credentials="admin:admin;;cluster1:******"
#       mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
        mysql_ifaces="0.0.0.0:6032"
#       refresh_interval=2000
#       debug=true
#集群用户名称,与最上面的相同
        cluster_username="cluster1"
#集群用户密码,与最上面的相同        
        cluster_password="*******"
        cluster_check_interval_ms=200
        cluster_check_status_frequency=100
        cluster_mysql_query_rules_save_to_disk=true
        cluster_mysql_servers_save_to_disk=true
        cluster_mysql_users_save_to_disk=true
        cluster_proxysql_servers_save_to_disk=true
        cluster_mysql_query_rules_diffs_before_sync=3
        cluster_mysql_servers_diffs_before_sync=3
        cluster_mysql_users_diffs_before_sync=3
        cluster_proxysql_servers_diffs_before_sync=3
}
#新增
proxysql_servers=
(
        {
                hostname="192.168.31.128"
                port=6032
                weight=1
                comment="ProxySQL-node1"
        },
        {
                hostname="192.168.31.130"
                port=6032
                weight=1
                comment="ProxySQL-node2"
        }
)

  1. 启动两个节点的ProxySQL服务

注意:

如果存在如果存在"proxysql.db"文件(在/var/lib/proxysql目录下),则ProxySQL服务只有在第一次启动时才会去读取proxysql.cnf文件并解析;后面启动会就不会读取proxysql.cnf文件了!如果想要让proxysql.cnf文件里的配置在重启proxysql服务后生效(即想要让proxysql重启时读取并解析proxysql.cnf配置文件),则需要先删除/var/lib/proxysql/proxysql.db数据库文件,然后再重启proxysql服务。这样就相当于初始化启动proxysql服务了,会再次生产一个纯净的proxysql.db数据库文件(如果之前配置了proxysql相关路由规则等,则就会被抹掉)。

  1. 观察集群状况 (两个节点上都可以查看,无特殊说明均在192.168.31.128上操作))

SQL
mysql> select * from proxysql_servers;
+----------------+------+--------+----------------+
| hostname       | port | weight | comment        |
+----------------+------+--------+----------------+
| 192.168.31.128 | 6032 | 1      | ProxySQL-node1 |
| 192.168.31.130 | 6032 | 1      | ProxySQL-node2 |
+----------------+------+--------+----------------+
2 rows in set (0.00 sec)
mysql> select * from stats_proxysql_servers_metrics;
+----------------+------+--------+----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| hostname       | port | weight | comment        | response_time_ms | Uptime_s | last_check_ms | Queries | Client_Connections_connected | Client_Connections_created |
+----------------+------+--------+----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
| 192.168.31.130 | 6032 | 1      | ProxySQL-node2 | 0                | 0        | 46226673      | 0       | 0                            | 0                          |
| 192.168.31.128 | 6032 | 1      | ProxySQL-node1 | 9                | 141      | 18414         | 0       | 0                            | 0                          |
+----------------+------+--------+----------------+------------------+----------+---------------+---------+------------------------------+----------------------------+
2 rows in set (0.00 sec)

mysql> select hostname,port,comment,Uptime_s,last_check_ms from stats_proxysql_servers_metrics;
+----------------+------+----------------+----------+---------------+
| hostname       | port | comment        | Uptime_s | last_check_ms |
+----------------+------+----------------+----------+---------------+
| 192.168.31.130 | 6032 | ProxySQL-node2 | 0        | 46285888      |
| 192.168.31.128 | 6032 | ProxySQL-node1 | 201      | 17332         |
+----------------+------+----------------+----------+---------------+
2 rows in set (0.00 sec)

mysql> select hostname,name,checksum,updated_at from stats_proxysql_servers_checksums;
+----------------+-------------------+--------------------+------------+
| hostname       | name              | checksum           | updated_at |
+----------------+-------------------+--------------------+------------+
| 192.168.31.130 | admin_variables   |                    | 0          |
| 192.168.31.130 | mysql_query_rules |                    | 0          |
| 192.168.31.130 | mysql_servers     |                    | 0          |
| 192.168.31.130 | mysql_users       |                    | 0          |
| 192.168.31.130 | mysql_variables   |                    | 0          |
| 192.168.31.130 | proxysql_servers  |                    | 0          |
| 192.168.31.128 | admin_variables   | 0x6A7FE5E0EFF3CC92 | 1693908720 |
| 192.168.31.128 | mysql_query_rules | 0x0000000000000000 | 1693908720 |
| 192.168.31.128 | mysql_servers     | 0x0000000000000000 | 1693908720 |
| 192.168.31.128 | mysql_users       | 0x0000000000000000 | 1693908720 |
| 192.168.31.128 | mysql_variables   | 0x3F6C52D7C3EE3ADD | 1693908720 |
| 192.168.31.128 | proxysql_servers  | 0x7F9BB0FB6C104089 | 1693908720 |
+----------------+-------------------+--------------------+------------+
12 rows in set (0.00 sec)

  1. 观察ProxySQL集群中实例之间的数据同步,新增mysql节点

SQL
#原有数据
mysql> select * from mysql_servers;
Empty set (0.01 sec)

# 新增一个后端MySQL主机信息
mysql> insert into mysql_servers(hostgroup_id,hostname,port,comment) values (10,'192.168.31.128',5310,'master_mysql');
Query OK, 1 row affected (0.00 sec)
#当前主机查看mysql_servers信息

mysql> select * from mysql_servers\G
*************************** 1. row ***************************
       hostgroup_id: 10
           hostname: 192.168.31.128
               port: 5310
          gtid_port: 0
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 1000
max_replication_lag: 0
            use_ssl: 0
     max_latency_ms: 0
            comment: master_mysql
1 row in set (0.01 sec)

#另一台主机查看为空

# 持久化,并加载到运行环境中
mysql> save mysql servers to disk;
mysql> load mysql servers to runtime;

# 再次到另一台proxysql主机上查看,可以看到新插入的数据,发现有这个后端MySQL主机信息,已经被更新到192.168.31.130实例中的memory和runtime环境中。
mysql> select * from mysql_servers\G
*************************** 1. row ***************************
       hostgroup_id: 10
           hostname: 192.168.31.128
               port: 5310
          gtid_port: 0
             status: ONLINE
             weight: 1
        compression: 0
    max_connections: 1000
max_replication_lag: 0
            use_ssl: 0
     max_latency_ms: 0
            comment: master_mysql
1 row in set (0.01 sec)

# 查看另一台proxysql主机日志,会看到同步的具体信息
2023-09-05 20:20:22 [INFO] Cluster: Loading to runtime MySQL Servers from peer 192.168.31.128:6032
2023-09-05 20:20:22 [INFO] Dumping mysql_servers_incoming
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+
| hostgroup_id | hostname       | port | gtid_port | weight | status | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment      |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+
| 10           | 192.168.31.128 | 5310 | 0         | 1      | 0      | 0           | 1000            | 0                   | 0       | 0              | master_mysql |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+--------------+

此时,两节点的proxysql cluster集群搭建完毕

ProxySQL其他功能参考https://proxysql.com/documentation/

作者简介

丁鹏,中国移动云能力中心数据库产品部分布式数据库高级开发工程师,负责云原生数据库海山(He3DB)分布式版架构设计,拥有丰富的数据库内核开发经验和实践知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/648356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

紫光展锐突破创新终端品类,搭载展锐芯的全球首款二合一5G云电脑正式发布

近日,搭载紫光展锐5G芯片T760的中兴云电脑逍遥系列正式发布,亮点: 全球首款二合一5G云电脑,支持本地/云端双模式,一键切换,用户可同时享有Android平板和Windows云电脑两种形态;支持5G蜂窝网络&…

【OceanBase诊断调优】—— 排查 IO 问题的方法

本文主要介绍 OceanBase 数据库 V4.x 版本中排查 IO 问题的方法以及 IO 相关的日志和视图。 IO 相关问题 -4013 内存爆、IoControl 模块内存泄漏 目前 IO 内存爆可能的原因如下,及相应的排查方法。 其他模块使用 IO 内存后未释放导致泄漏。 日志分析。 通过关键词…

视频批量剪辑神器:一键合并多个视频,轻松添加音频,高效创作无极限!

视频已经成为我们生活中不可或缺的一部分。无论是工作汇报、生活记录,还是创意表达,视频都扮演着至关重要的角色。然而,对于很多非专业剪辑师来说,视频剪辑却是一项既繁琐又耗时的工作。别担心,今天我要给大家介绍一款…

全球AI新闻速递527

📢📢📢📣📣📣 哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝 一位上进心十足的【Java ToB端大厂…

Mysql中的慢查询

Mysql慢查询的一些sql命令 慢查询的默认事件为10秒 #注意:慢查询一般是在调试阶段开启的,在开发阶段中一般不会开启,会对效率产生延误 #查询慢查询是否开启 show variables like %general%; #慢查询时间设置 show variables like long_query…

酷开科技相伴童年 | 酷开系统六一特辑:亲子共赏,启迪成长

六一儿童节,属于每个茁壮成长的孩子,也属于每个童心未泯的“少年”。《小王子》里说,使生活如此美丽的是我们藏起来的真诚和童心。马上就到六一儿童节了,就让我们用温柔而富有童真的笔触,唤醒那份沉睡已久的童心吧。 在…

NVIDIA Orin/Jetson 平台+数字同轴GMSL 车载AI视觉方案,应用于车载,机器人等领域

专注于成像和视觉技术于近期正式发布了可适配NVIDIA DRIVE AGX Orin平台的一系列摄像头产品,该产品是自主开发的数字同轴GMSL2摄像头模组,可满足智能汽车的高质量成像需求。 目前,推出可适配于NVIDIA DRIVE AGX Orin平台的摄像头产品一共有11…

微软改进WSL子系统 新版将支持镜像宿主机网络接口及使用外部DNS

Windows SubSystem for Linux (即 WSL) 是微软在 Windows 10/11 中开发的子系统功能,该功能允许用户在 Windows 上安装 Linux 系统和相关环境,对开发者来说可以构建 Linux 开发环境进行工作。不过 WSL 系统在功能上也有不少缺点,典型的就是默…

docker安装Elasticsearch(ES)详细教程

使用Docker来安装Elasticsearch(简称ES)的详细教程如下: 1. 前提条件 确保你的系统已经安装了Docker,并且Docker服务正在运行。如果你使用的是Windows系统,还需要确保已经启用了Hyper-V和容器功能。 2. 拉取Elastic…

Python-opencv通过距离变换提取图像骨骼

文章目录 距离变换distanceTransform函数 距离变换 如果把二值图像理解成地形,黑色表示海洋,白色表示陆地,那么陆地上任意一点,到海洋都有一个最近的距离,如下图所示,对于左侧二值图像来说,【d…

工程技术SCI期刊,中科院4区,收稿范围非常广泛,审稿快易录用!

一、期刊名称 CMES-Computer Modeling in Engineering & Sciences 二、期刊简介概况 期刊类型:SCI 学科领域:工程技术 影响因子:2.4 中科院分区:4区 三、期刊征稿范围 本期刊在工程与科学的计算机建模领域发表具有合理永…

神经网络的工程基础(一)——利用PyTorch实现梯度下降法

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch06_optimizer/gradient_descent.ipynb 本文将讨论利用PyTorch实现…

力扣 第 399 场周赛 解题报告 | 珂学家 | 调和级数 + 分块DP

前言 T1. 优质数对的总数 I 题型: 签到 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:res 0for v1 in nums1:for v2 in nums2:if v1 % (v2 * k) 0:res 1return resT2. 压缩字符串 III 思路: 模拟 感觉引入一个栈&…

基于PHP的物业管理的设计与实现

第1章 绪论... 1 1.1 研究背景与意义... 1 1.2 国内外发展现状... 2 第2章 关键技术介绍... 3 2.1 PHP语言... 3 2.2 MySQL数据库... 3 2.3 Zend框架... 4 2.4 B/S架构... 4 第3章 系统需求分析... 5 3.1 可行性分析... 5 3.1.1 技术可行性分析... 5 3.1.2 经济可行…

解决updateByExample时属性值异常的问题(部分属性值没有使用占位符?进行占位,而是变成了属性的名称)

目录 场景简介代码片断实体类 报错信息排查原因解决测试过程解决方案 场景简介 1、程序将mybatis框架升级为3.5.9版本后执行updateByExample方法时报错 代码片断 Condition condition new Condition(MbCcsSessionConfig.class); condition.createCriteria().andEqualTo(&quo…

知识分享:隔多久查询一次网贷大数据信用报告比较好?

随着互联网金融的快速发展,越来越多的人开始接触和使用网络贷款。而在这个过程中,网贷大数据信用报告成为了评估借款人信用状况的重要依据。那么,隔多久查询一次网贷大数据信用报告比较好呢?接下来随小易大数据平台小编去看看吧。 首先&…

【Python】 Django 框架如何支持百万级日访问量

基本原理 Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 遵循 MVC(模型-视图-控制器)设计模式,允许开发者通过编写更少的代码来构建高质量的 Web 应用程序。Django 自带了许多内置功能&#xf…

《最新出炉》系列入门篇-Python+Playwright自动化测试-42-强大的可视化追踪利器Trace Viewer

宏哥微信粉丝群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 在我们日常执行自动化测试工作的过程中,经常会遇到一些偶发性的bug,但是因为bug是偶发性的,我们不一定每次执行都能复现,所以我…

深度学习模型

深度学习模型 深度学习网络模型是人工智能领域的重要分支,它通过模拟人脑神经网络的工作方式来处理数据并识别模式。以下是对深度学习网络模型的一些主要类型的详细概述: 卷积神经网络(Convolutional Neural Network, CNN) 结构&a…

【Unity实战篇 】| Unity实现 文本框可以自适应大小,到达最大宽度之后再缩小字体

前言 在文本框可以自适应大小拉伸的前提下,增加一个最大限制宽度,使其到达最大宽度后 再启用 Best Fit 实现自适应改变文字大小以适应文本框的大小。 【Unity实战篇 】 | Unity实现 Text文本框可以自适应大小,到达最大宽度之后再缩小字体 在Unity中经常会用到文本组件的自…