doris: MySQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。
使用须知
要连接到 MySQL 数据库,您需要
-
MySQL 5.7, 8.0 或更高版本
-
MySQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载最新或指定版本的 MySQL JDBC 驱动程序。推荐使用 MySQL Connector/J 8.0.31 及以上版本。
-
Doris 每个 FE 和 BE 节点和 MySQL 服务器之间的网络连接,默认端口为 3306。
连接 MySQL
CREATE CATALOG mysql PROPERTIES ("type"="jdbc","user"="root","password"="secret","jdbc_url" = "jdbc:mysql://example.net:3306","driver_url" = "mysql-connector-j-8.3.0.jar","driver_class" = "com.mysql.cj.jdbc.Driver"
)
备注
jdbc_url
定义要传递给 MySQL JDBC 驱动程序的连接信息和参数。 支持的 URL 的参数可在 MySQL 开发指南 中找到。
连接安全
如果您使用数据源上安装的全局信任证书配置了 TLS,则可以通过将参数附加到在 jdbc_url 属性中设置的 JDBC 连接字符串来启用集群和数据源之间的 TLS。
例如,对于 MySQL Connector/J 8.0 版,使用 sslMode 参数通过 TLS 保护连接。默认情况下,该参数设置为 PREFERRED,如果服务器启用,它可以保护连接。您还可以将此参数设置为 REQUIRED,如果未建立 TLS,则会导致连接失败。
您可以在通过在 jdbc_url
中添加 sslMode 参数来配置它:
“jdbc_url”=“jdbc:mysql://example.net:3306/?sslMode=REQUIRED”
有关 TLS 配置选项的更多信息,请参阅 MySQL JDBC 安全文档。
层级映射
映射 MySQL 时,Doris 的一个 Database 对应于 MySQL 中的一个 Database。而 Doris 的 Database 下的 Table 则对应于 MySQL 中,该 Database 下的 Tables。即映射关系如下:
Doris | MySQL |
---|---|
Catalog | MySQL Server |
Database | Database |
Table | Table |
类型映射
MySQL 到 Doris 类型映射
MYSQL Type | Doris Type | Comment |
---|---|---|
BOOLEAN | TINYINT | |
TINYINT | TINYINT | |
SMALLINT | SMALLINT | |
MEDIUMINT | INT | |
INT | INT | |
BIGINT | BIGINT | |
UNSIGNED TINYINT | SMALLINT | |
UNSIGNED MEDIUMINT | INT | |
UNSIGNED INT | BIGINT | |
UNSIGNED BIGINT | LARGEINT | |
FLOAT | FLOAT | |
DOUBLE | DOUBLE | |
DECIMAL | DECIMAL | |
UNSIGNED DECIMAL(p,s) | DECIMAL(p+1,s) / STRING | |
DATE | DATE | |
TIMESTAMP | DATETIME | |
DATETIME | DATETIME | |
YEAR | SMALLINT | |
TIME | STRING | |
CHAR | CHAR | |
VARCHAR | VARCHAR | |
JSON | STRING | |
SET | STRING | |
ENUM | STRING | |
BIT | BOOLEAN/STRING | |
TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT | STRING | |
BLOB,MEDIUMBLOB,LONGBLOB,TINYBLOB | STRING | |
BINARY,VARBINARY | STRING | |
Other | UNSUPPORTED |
提示
- Doris 不支持 UNSIGNED 数据类型,所以 UNSIGNED 数据类型会被映射为 Doris 对应大一个数量级的数据类型。
- UNSIGNED DECIMAL(p,s) 会被映射为 DECIMAL(p+1,s) 或 STRING。注意在此类型被映射为 String 时,只能支持查询,不能对 MySQL 进行写入操作。
- 为了更好的读取与计算性能均衡,Doris 会将 JSON 类型映射为 STRING 类型。
- Doris 不支持 BIT 类型,BIT 类型会在 BIT(1) 时被映射为 BOOLEAN,其他情况下映射为 STRING。
- Doris 不支持 YEAR 类型,YEAR 类型会被映射为 SMALLINT。
- Doris 不支持 TIME 类型,TIME 类型会被映射为 STRING。
时间戳类型处理
在 JDBC 类型 Catalog 读取数据时,BE 的 Java 部分使用 JVM 时区。JVM 时区默认为 BE 部署机器的时区,这会影响 JDBC 读取数据时的时区转换。
为了确保时区一致性,建议在 be.conf 的 JAVA_OPTS 中设置 JVM 时区与 Doris session 的 time_zone
一致。
读取 MySQL 的 TIMESTAMP 类型时,请在 JDBC URL 中添加参数:connectionTimeZone=LOCAL
和 forceConnectionTimeZoneToSession=true
。这些参数适用于 MySQL Connector/J 8 以上版本,可确保读取的时间为 Doris BE JVM 时区,而非 MySQL session 时区。
查询优化
谓词下推
-
当执行类似于
where dt = '2022-01-01'
这样的查询时,Doris 能够将这些过滤条件下推到外部数据源,从而直接在数据源层面排除不符合条件的数据,减少了不必要的数据获取和传输。这大大提高了查询性能,同时也降低了对外部数据源的负载。 -
当变量
enable_ext_func_pred_pushdown
设置为 true,会将 where 之后的函数条件也下推到外部数据源,Doris 会自动识别部分 MySQL 不支持的函数,可通过 explain sql 查看。当前 Doris 默认不会下推到 MySQL 的函数如下
Function DATE_TRUNC MONEY_FORMAT NEGATIVE 当您发现还有其他函数不支持下推时,可以通过
fe.conf
配置jdbc_mysql_unsupported_pushdown_functions
来指定不支持下推的函数。如:jdbc_mysql_unsupported_pushdown_functions=func1,func2
行数限制
如果在查询中带有 limit 关键字,Doris 会将 limit 下推到 MySQL,以减少数据传输量。
转义字符
Doris 会在下发到 MySQL 的查询语句中,自动在字段名与表名上加上转义符:(``),以避免字段名与表名与 MySQL 内部关键字冲突。
连接异常排查
-
Communications link failure The last packet successfully received from the server was 7 milliseconds ago.
- 原因:
- 网络问题:
- 网络不稳定或连接中断。
- 客户端和服务器之间的网络延迟过高。
- MySQL 服务器设置
- MySQL 服务器可能配置了连接超时参数,例如 wait_timeout 或 interactive_timeout,导致连接超时被关闭。
- 防火墙设置
- 防火墙规则可能阻止了客户端与服务器之间的通信。
- 连接池设置
- 连接池中的配置 connection_pool_max_life_time 可能导致连接被关闭或回收,或者未及时探活
- 服务器资源问题
- MySQL 服务器可能资源不足,无法处理新的连接请求。
- 客户端配置
- 客户端 JDBC 驱动配置错误,例如 autoReconnect 参数未设置或设置不当。
- 网络问题:
- 解决
- 检查网络连接:
- 确认客户端和服务器之间的网络连接稳定,避免网络延迟过高。
- 检查 MySQL 服务器配置:
- 查看并调整 MySQL 服务器的 wait_timeout 和 interactive_timeout 参数,确保它们设置合理。
- 检查防火墙配置:
- 确认防火墙规则允许客户端与服务器之间的通信。
- 调整连接池设置:
- 检查并调整连接池的配置参数 connection_pool_max_life_time,确保小于 MySQL 的 wait_timeout 和 interactive_timeout 参数并大于执行时间最长的 SQL
- 监控服务器资源:
- 监控 MySQL 服务器的资源使用情况,确保有足够的资源处理连接请求。
- 优化客户端配置:
- 确认 JDBC 驱动的配置参数正确,例如 autoReconnect=true,确保连接能在中断后自动重连。
- 检查网络连接:
- 原因:
-
java.io.EOFException MESSAGE: Can not read response from server. Expected to read 819 bytes, read 686 bytes before connection was unexpectedly lost.
- 原因:连接被 MySQL Kill 或者 MySQL 宕机
- 解决:检查 MySQL 是否有主动 kill 连接的机制,或者是否因为查询过大查崩 MySQL
常见问题
-
读写 MySQL 的 emoji 表情出现乱码
Doris 进行 MySQL Catalog 查询时,由于 MySQL 之中默认的 utf8 编码为 utf8mb3,无法表示需要 4 字节编码的 emoji 表情。这里需要将 MySQL 的编码修改为 utf8mb4,以支持 4 字节编码。
可全局修改配置项
修改 mysql 目录下的 my.ini 文件(linux 系统为 etc 目录下的 my.cnf 文件) [client] default-character-set=utf8mb4[mysql] 设置 mysql 默认字符集 default-character-set=utf8mb4[mysqld] 设置 mysql 字符集服务器 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4修改对应表与列的类型 ALTER TABLE table_name MODIFY colum_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE table_name CHARSET=utf8mb4; SET NAMES utf8mb4
-
读取 MySQL DATE/DATETIME 类型出现异常
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.6)[INTERNAL_ERROR]UdfRuntimeException: get next block failed: CAUSED BY: SQLException: Zero date value prohibited CAUSED BY: DataReadException: Zero date value prohibited
这是因为 JDBC 中对于该非法的 DATE/DATETIME 默认处理为抛出异常,可以通过参数
zeroDateTimeBehavior
控制该行为。可选参数为:
exception
,convertToNull
,round
, 分别为:异常报错,转为 NULL 值,转为 "0001-01-01 00:00:00";需要在创建 Catalog 的
jdbc_url
把 JDBC 连接串最后增加zeroDateTimeBehavior=convertToNull
,如"jdbc_url" = "jdbc:mysql://127.0.0.1:3306/test?zeroDateTimeBehavior=convertToNull"
这种情况下,JDBC 会把 0000-00-00 或者 0000-00-00 00:00:00 转换成 null,然后 Doris 会把当前 Catalog 的所有 Date/DateTime 类型的列按照可空类型处理,这样就可以正常读取了。 -
读取 MySQL Catalog 或其他 JDBC Catalog 时,出现加载类失败
如以下异常:
failed to load driver class com.mysql.cj.jdbc.driver in either of hikariconfig class loader
这是因为在创建 Catalog 时,填写的 driver_class 不正确,需要正确填写,如上方例子为大小写问题,应填写为
"driver_class" = "com.mysql.cj.jdbc.Driver"
-
读取 MySQL 出现通信链路异常
如果出现如下报错:
ERROR 1105 (HY000): errCode = 2, detailMessage = PoolInitializationException: Failed to initialize pool: Communications link failureThe last packet successfully received from the server was 7 milliseconds ago. The last packet sent successfully to the server was 4 milliseconds ago. CAUSED BY: CommunicationsException: Communications link failureThe last packet successfully received from the server was 7 milliseconds ago. The last packet sent successfully to the server was 4 milliseconds ago. CAUSED BY: SSLHandshakeExcepti
可查看 be 的 be.out 日志
如果包含以下信息:
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
可在创建 Catalog 的
jdbc_url
把 JDBC 连接串最后增加?useSSL=false
,如"jdbc_url" = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false"
-
查询 MySQL 大数据量时,如果查询偶尔能够成功,偶尔会报如下错误,且出现该错误时 MySQL 的连接被全部断开,无法连接到 MySQL Server,过段时间后 MySQL 又恢复正常,但是之前的连接都没了:
ERROR 1105 (HY000): errCode = 2, detailMessage = [INTERNAL_ERROR]UdfRuntimeException: JDBC executor sql has error: CAUSED BY: CommunicationsException: Communications link failure The last packet successfully received from the server was 4,446 milliseconds ago. The last packet sent successfully to the server was 4,446 milliseconds ago.
出现上述现象时,可能是 MySQL Server 自身的内存或 CPU 资源被耗尽导致 MySQL 服务不可用,可以尝试增大 MySQL Server 的内存或 CPU 配置。
-
查询 MySQL 的过程中,如果发现和在 MySQL 库的查询结果不一致的情况
首先要先排查下查询字段中是字符串否存在有大小写情况。比如,Table 中有一个字段 c_1 中有 "aaa" 和 "AAA" 两条数据,如果在初始化 MySQL 数据库时未指定区分字符串大小写,那么 MySQL 默认是不区分字符串大小写的,但是在 Doris 中是严格区分大小写的,所以会出现以下情况:
MySQL 行为: select count(c_1) from table where c_1 = "aaa"; 未区分字符串大小,所以结果为:2Doris 行为: select count(c_1) from table where c_1 = "aaa"; 严格区分字符串大小,所以结果为:1
如果出现上述现象,那么需要按照需求来调整,方式如下:
在 MySQL 中查询时添加“BINARY”关键字来强制区分大小写:
select count(c_1) from table where BINARY c_1 = "aaa";
或者在 MySQL 中建表时候指定:
CREATE TABLE table (c_1 VARCHAR(255) CHARACTER SET binary);
或者在初始化 MySQL 数据库时指定校对规则来区分大小写:
[mysqld] character-set-server=utf8 collation-server=utf8_bin [client] default-character-set=utf8 [mysql] default-character-set=utf8
-
查询 MySQL 的时候,出现长时间卡住没有返回结果,或着卡住很长时间并且 fe.warn.log 中出现出现大量 write lock 日志,可以尝试在 URL 添加 socketTimeout,例如:
jdbc:mysql://host:port/database?socketTimeout=30000
,防止 JDBC 客户端 在被 MySQL 关闭连接后无限等待。 -
在使用 MySQL Catalog 的过程中发现 FE 的 JVM 内存或 Threads 数持续增长不减少,并可能同时出现 Forward to master connection timed out 报错
打印 FE 线程堆栈
jstack fe_pid > fe.js
,如果出现大量mysql-cj-abandoned-connection-cleanup
线程,说明是 MySQL JDBC 驱动的问题。按照如下方式处理:
- 升级 MySQL JDBC 驱动到 8.0.31 及以上版本
- 在 FE 和 BE conf 文件的 JAVA_OPTS 中增加
-Dcom.mysql.cj.disableAbandonedConnectionCleanup=true
参数,禁用 MySQL JDBC 驱动的连接清理功能,并重启集群
注意: 如果 Doris 的版本在 2.0.13 及以上(2.0 Release),或 2.1.5 及以上(2.1 Release)则无需增加该参数,因为 Doris 已经默认禁用了 MySQL JDBC 驱动的连接清理功能。只需更换 MySQL JDBC 驱动版本即可。但是需要重启 Doris 集群来清理掉之前的 Threads。
相关文章:
doris: MySQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。 使用须知 要连接到 MySQL 数据库,您需要 MySQL 5.7, 8.0 或更高版本 MySQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载最新或指定版本的…...
Django模型数据删除:详解两种方式
Django模型数据删除:详解两种方式 在Django框架中,数据模型(Model)不仅定义了应用的数据结构,还提供了与数据库交互的接口,包括数据的删除操作。本文将详细介绍两种在Django中删除数据的方式:通…...
C++并发以及多线程的秘密
1.基础概念 并发(Concurrency) 并发是指在同一时间段内,多个任务看起来像是同时执行的。并发并不一定意味着真正的同时执行,它可以是通过时间片轮转等方式在多个任务之间快速切换,让用户感觉多个任务在同时进行。并发…...

自学微信小程序的第十二天
DAY12 1、腾讯地图SDK是一套为开发者提供多种地理位置服务的工具,可以使开发者在自己的应用中加入地图相关功能,轻松访问腾讯地图服务和数据,更好地实现微信小程序的地图功能。 表49:search()方法的常用选项 选项 类型 说明 keyword string POI搜索关键词,默认周边搜索 l…...
⭐算法OJ⭐跳跃游戏【贪心算法】(C++实现)Jump Game 系列 I,II
既股票买卖系列之后的第二组贪心算法题目:跳跃游戏系列。这一篇介绍的两个问题,其输入均为一个数组,每个元素表示在该位置可以跳跃的最大长度。 55. Jump Game You are given an integer array nums. You are initially positioned at the …...

带你从入门到精通——自然语言处理(五. Transformer中的自注意力机制和输入部分)
建议先阅读我之前的博客,掌握一定的自然语言处理前置知识后再阅读本文,链接如下: 带你从入门到精通——自然语言处理(一. 文本的基本预处理方法和张量表示)-CSDN博客 带你从入门到精通——自然语言处理(二…...

ubuntu挂载固态硬盘
Ubuntu 中挂载位于 /dev/sdc1 的固态硬盘,可以按照以下步骤操作: 步骤 1:确认分区信息 首先,确保设备 /dev/sdc1 存在且已正确分区: sudo fdisk -l /dev/sdc # 查看分区表 lsblk # 确认分区路…...

WPF+WebView 基础
1、基于.NET8,通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...

国内光子AI智能引擎:OptoChat AI在南京江北新区亮相
3月3日,从南京市投资促进局传来振奋人心的消息,南京江北新区的一家高科技企业——南京南智先进光电集成技术研究院有限公司(简称“南智光电”),携手南京知满科技等合作伙伴,成功研发出国内首个光子AI智能引…...

vscode离线配置远程服务器
目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器,并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port(vscode报错解决方法)-C…...
【安装】SQL Server 2005 安装及安装包
安装包 SQLEXPR.EXE:SQL Server 服务SQLServer2005_SSMSEE.msi:数据库管理工具,可以创建数据库,执行脚本等。SQLServer2005_SSMSEE_x64.msi:同上。这个是 64 位操作系统。 下载地址 https://www.microsoft.com/zh-c…...

使用Maven搭建Spring Boot框架
文章目录 前言1.环境准备2.创建SpringBoot项目3.配置Maven3.1 pom.xml文件3.2 添加其他依赖 4. 编写代码4.1 启动类4.2 控制器4.3 配置文件 5.运行项目6.打包与部署6.1 打包6.2 运行JAR文件 7.总结 前言 Spring Boot 是一个用于快速构建 Spring 应用程序的框架,它简…...

将docker容器打包为.tar包
1. 创建打包脚本 #!/bin/bash # 设置 -e 使得脚本在遇到错误时停止执行 set -e# 必要的参数 exported_container_name"needed_export_container_name_or_id" # 需要被导出的容器的名称或id image_save_name"my_custom_image_name:v25.03.03" # 镜像需…...

SYSTEM文件夹下的文件
sys文件夹下的.c和.h文件里的函数 最重要的倒数第二个 deley文件夹下的.c和.h文件 Systick工作原理 系统滴答定时器是在内核里的 每来一个时钟信号,计数器减一 F1系列时钟源是HCLK(就是AHB总线上的时钟信号) Systick控制寄存器 Systick重装…...

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数:#paper/⭐⭐# 动机 本文探讨了图神经网络(GNN)在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练(…...

【SegRNN 源码理解】PMF的多步并行预测
位置编码 elif self.dec_way "pmf":if self.channel_id:# m,d//2 -> 1,m,d//2 -> c,m,d//2# c,d//2 -> c,1,d//2 -> c,m,d//2# c,m,d -> cm,1,d -> bcm, 1, dpos_emb torch.cat([self.pos_emb.unsqueeze(0).repeat(self.enc_in, 1, 1),self.cha…...
构建自己的AI客服【根据用户输入生成EL表达式】
要实现一个基于对话形式的AI客服系统,该系统能够提示用户输入必要的信息,并根据用户的输入生成相应的EL(Expression Language)表达式编排规则,您可以按照以下步骤进行设计和开发。本文将涵盖系统架构设计、关键技术选型…...

(50)[HGAME 2023 week2]before_main
[HGAME 2023 week2]before_main nss:3501 我们进入那个sub_12EB然后我们发现这个就是base64加密 我们取得qword_4020: 0CxWsOemvJq4zdk2V6QlArj9wnHbt1NfEX/3DhyPoBRLY8pK5FciZau7UMIgTSG 很显然这个是自定义映射base64.然后我们代入我们之前写的base64自定义映射代码 enc:A…...
机器学习数学基础:39.样本和隐含和残差协方差矩阵
假设我们研究学生的数学成绩、英语成绩和学习时间之间的关系。收集了100名学生这三项数据作为样本。 样本协方差矩阵 计算得到的样本协方差矩阵如下(假设数据简化): [ V a r ( 数学 ) C o v ( 数学 , 英语 ) C o v ( 数学 , 学习时间 ) C …...
java之http传MultipartFile文件
【需求】前端请求后端做文件上传或者excel上传,后端不解析直接把MultipartFile传给第三方平台,通过http的方式该怎么写 import org.springframework.web.multipart.MultipartFile;import java.io.*; import java.net.HttpURLConnection; import java.ne…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...