OBLoader和OBDumper导数工具介绍

OBLoader和OBDumper导数工具介绍

  • 使用指南
    • 产品功能
    • 使用须知
    • 使用示例
  • 旁路导入
  • 性能调优
    • 导入性能优化
    • 导出性能优化
  • 数据处理
    • 控制文件
    • 预处理函数
    • 条件表达式
  • 注意事项

使用指南

产品功能

🐘 OBLOADER是什么:

  • Java语言开发的客户端工具,仅适用于OceanBase数据库。
  • 将存储介质中的数据库对象的定义文件和表数据文件导入到OCceanBase数据库中。
  • 兼容mysqldump、Mydumper等客户端工具导出的CSV格式的文件。
  • OBLOADER专门优化了数据的导入性能,内置多种数据预处理函数又,自动容错保证数据导入的稳定性,以及提供较为丰富的监控信息,以便于用户实时观测到数据文件导入的性能和进度。

🐘 产品功能:

  • 支持从本地磁盘、Apache Hadoop、Aliyun OSS或者AmazzonS3导入数据库对象定义和表数据。
  • 支持导入mysqldump导出的SQL-Format格式的文件。
  • 支持导入标准的CSV、InsertSQL、ORC、Parquet等格式的数据文件。
  • 支持丰富的数据清洗功能。
  • 支持多种错误处理策略。
  • 支持在导入前逻辑切分原始数据文件,从而充分发挥CPU多核性能。
  • 支持对命令行中指定的敏感参数进行加密。包括数据库的账号密码、云存储的账号密钥。

🦁 OBDUMPER是什么:

  • Java语言开发的客户端工具。仅适用于OceanBase数据库。
  • 可以使用该工具将OceanBase数据库中定义的对象和表数据居以指定的文件格式导出到存储介质中。
  • 如果用户希望借助于OBDUMPER进行逻辑备份,可以直接将该工具集成到数据库运维系统中(不支持增量备份)。
  • 与mysqldump等客户端导出工具相比,OBDUMPER具备以下显著的优势:
    • 快速的数据导出能力,设计了多种数据查询策略,大幅提升导导出的性能。
    • 丰富的数据交换能力,支持将表中数据以多种格式导出到多和中存储介质。
    • 强大的数据处理能力,导出前对数据进行压缩、加密、脱敏、预处理等。

🦁 产品功能:

  • 支持导出数据库对象定义和表数据到本地磁盘、Aliyun OSS和Amaazon S3。
  • 支持将表中的数据按照CSV、InsertSQL、ORC、Parquet等格式导出到文件中。
  • 支持指定分区名,仅导出指定的表分区内的数据。
  • 支持指定全局的过滤条件,仅导出满足条件的数据。
  • 支持配置数据预处理规则,导出前对数据进行转换、脱敏等预处理。
  • 支持指定SCN或者TIMESTAMP,仅导出有效事务点或者时间点的历历史快照数据。
  • 支持从OceanBase的备副本中导出数据(区别于备集群)。
  • 支持指定自定义的查询语句,仅导出该查询语句的结果集。
  • 支持通过最新的快照版本以不锁表的方式导出全局一致的数据。
  • 支持对命令行中指定的敏感参数进行加密。包括数据库的账号密码、云存储的账号密钥。

使用须知

运行环境要求:

  • 系统版本:支持Linux/macOS/Windows7及之后版本。
  • Java环境:请安装Oracle JDK 1.8.0_3xx,配置JAVA_HOME环境变量。
  • 字符集:推荐使用UTF-8文件编码。
  • JVM参数:请编辑bin/obloaderbin/obdumper脚本修改JVM内存参数,避免出现JVM内存不足。

OBLOADER运行权限要求:

  • 使用OBLOADER连接OceanBase数据库导入数据时,连接数据库的账号需要拥有CREATE/SELECT/INSERT/UPDATE等命令的执行权限。
  • 导入数据前,用户需要拥有oceanbase数据库的查询权限。

OBDUMPER运行权限要求:

  • 使用OBDUMPER连接OceanBase数据库导出数据库导出数据时,连接数据库的账号需要拥有CREATE/SELECT等命令的执行权限。
  • 导出数据前,用户需要拥有oceanbase数据库的查询权限。
  • 下载地址:www.oceanbase.com/softwarecenter
  • 安装包:ob-loader-dumper-4.3.3.1-RELEAE.zip

使用示例

obloader和obdumper命令行选项分为基础选项和高级选项。

  • 基础选项:常用选项,包括连接选项(连接数据库模式)、功能选选项(文件格式、数据库对象类型、存储路径)和其它选项。
  • 高级选项:包括功能选项(时间戳格式、表/列黑白名单筛选、错误处理)和性能选项。

OBLOADER导入示例:

./obloader -h xx.x.x.x -P 2883 -u test@mysql#cluster_a -p ****** -D USERA --csv --table '*' -f /output

其中,-h/-P/-u/-p/-D为数据库连接选项;--csv为文件格式选项;--table为数据库对象类型选项;-f为存储路径。

OBDUMPER导出示例:

./obdumper -h xx.x.x.x -P 2883 -u test@mysql#cluster_a -p ****** -D USERA --csv --table '*' -f /output

其中,-h/-P/-u/-p/-D为数据库连接选项;--csv为文件格式选项;--table为数据库对象类型选项;-f为存储路径。

旁路导入

OBLOADER v4.2.6及之后的版本支持旁路导入数据。

旁路导入重点参数:

  • --direct:用于指定旁路导入模式。该选项与--rpc-port--parallel搭配使用。
  • --rpc-port=rpc_port_num:用于连接OBServer RPC端口。该选项与--direct--parallel搭配使用,表示在旁路导入模式下连接OBServer RPC端口导,入数据。
  • --parallel= parallel_num:用于旁路导入时加载数据的并行度。该选项与--rpc-port--direct搭配使用。

注意事项:

  • OBLOADER旁路导入模式暂时不支持二进制数据类型。
  • OBLOADER旁路导入模式支持连接OBServer和ODP。对应的版本要求:
    • 连接OBServer时:要求OBServer版本必须为4.2.0及之后。
    • 连接ODP时:要求ODP版本必须为4.1.3及之后,且OBServer版本必须为4.2.1及之后。

性能调优

导入性能优化

  1. 命令行选项调优:
  • 宽表或者列值较长,将--batch选项的参数值调小。
  • 索引会影响数据导入的性能。除主键和唯一键以外,普通索引延迟到数据导入结束后再创建。
  • 机器的负载和网络都较低时,视情况可调整--thread选项的参数值。
  1. 虚拟机参数调优:将导入脚本中的虚拟机参数修改为可用物理内存的60%。默认值为-Xms4G -Xmx4G
vim bin/obloader
JAVA_OPTS="$JAVA_OPTS -server -Xms4G -Xmx4G -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Xss352K"
  1. 数据库内核调优:导入数据的性能会严重受到租户的增量内存写入速度的影响。
  • 增量内存不足时,数据库会触发合并或者转储。合并比较泪消耗性能,尽量不要触发。
  • 增量内存使用率达到租户限速阈值时,导入性能同时会下降。
  • 增量内存使用率已满时,数据很容易导入失败。建议租户限速的阈值高于90。转储相关参数的设置跟租户内存的大小、写入速度都有关系,需根据实际情况进行调优。内核相关的调优参数如下所示。
--SQL中过程中的内存占用百分比。默认值为5
set global ob_sql_work_area_percentage=20;--服务端可接收的最大的网络数据包大小
set global max_allowed_packet=1073741824;--用于设置触发全局冻结的租户内存使用阈值。v4.x默认值为20
alter system set freeze_trigger_percentage=30;--用于控制分层转储触发向下一层的下压的阈值。默认值为2
alter system set minor_compact_trigger=16;--服务端的内存限流阈值。默认值为60,设置为100表示不做限流
alter system set writing_throttling_trigger_percentage=100;

导出性能优化

  1. 命令行选项调优:
  • --thread:导出线程的并发数,根据数据库系统资源的利用情况进行调整。默认值为CPU * 2
  • --page-size:指定任务分片的大小,根据数据库系统资源的利用情况进行调整。默认值为1000000。
  1. 虚拟机参数调优:将导出脚本中的虚拟机参数修改为可用物理内存的60%。默认值为`-Xms4G -Xmx4G 。
vim bin/obdumper
JAVA_OPTS="$JAVA_OPTS -server -Xms4G -Xmx4G -XX:MetaspaaceSize=128M -XX:MaxMetaspaceSize=128M -Xss352K
  1. 数据库内核调优:要求导出一致性数据时,建议在导出数据前,手动触发一次合并,在合并成功后再重新导出数据。

数据处理

控制文件

定义控制文件:

lang=java
(
列名 字节偏移位置(可选) "预处理函数"(可选) 映射定义(可选),
列名 字节偏移位置(可选) "预处理函数"(可选) 映射定义(可选),
列名 字节偏移位置(可选) "预处理函数"(可选) 映射定义(可选),
列名 字节偏移位置(可选) "预处理函数"(可选) 映射定义(可选)
);
  • 列名:数据库表结构中的字段名称。OBLOADER不区分列名大小写。果需要区分大小写,请将列名放入中括号([])或者反引号(``)内。例如:[c1]表示c1列,[C1]表示C1列。
  • 字节偏移位置:支持两种声明方式,绝对偏移和相对偏移。仅--pos格式数据支持定义字节偏移位置。
    • 绝对偏移:position(start,end),start与end分别表示字段的起始位置置(字节)与结束位置(字节)。如果需要指定列长以忽略导入某一段字节到数据库表中,可以使用特殊关键字_FILLER代替实际的列名并标记该部分数据,此操作将创建一个匿名列,该列会由OBLOADER解析,但不会与表中的任何现有列关联。此关键字特别适用于忽略文件中某些不相关的数据,如行尾的填充字节。示例:_filler position(5:10),表示跳过第5到第10个字节。
    • 相对偏移:position(length),length表示字段的长度(字节)。
  • 预处理函数:在控制文件中为指定的列配置预处理函数,以对导入的数据进行预处理。
  • 映射定义:导入的数据文件中预处理数据的列位置。

注意:

  • 控制文件的命名规范为<表名>.ctrl
  • 一个控制文件对应一个表,预处理多个表的数据时,需要在ctl-path路径下创建多个控制文件,且控制文件名须与导入的对应表名相同。
  • 通过--ctl-path选项指定控制文件所在的绝对路径。

预处理函数

定义控制文件时,用户可以为每一个列配置对应的预处理函数。

注意事项:

  • 任何预处理函数的形式参数中只能引用当前列的值,暂不支持跨列引用。例如:不支持c14 "concat(c15,'_suffix')",仅支持c15 "concat(c15,'_suffix')"
  • 预处理函数LPADB()RPADB()适用于字母、数字和中文等字符,处理Emoji表情符号时可能会出现截断。
  • 预处理函数REPLACE()在导数工具中的表现不同于在Oracle和MySQL中。其语法上更接近Oracle,实现上更接近MySQL。
  • 预处理函数NVL()参考了MySQL中对应的内置函数,它在实现上是区分了空字符和NULL
  • 与日期时间相关的预处理函数(SYSTIMESTAMPTMSFMT()TO_TIMESTAMP()等)只能精确到毫秒。此外,要求工具运行的服务器时钟与数据库服务器时钟相同。
  • 预处理函数LPAD(char,length[,pad_string])RPAD(char,length[,pad_string])参考了MySQL中对应的内置函数。参数length是最终显示在终端上的返回值的总长度。在大多数字符集中,这会是返回值中的字符数。但是,在某些多字节字符集中,字符串的显示长度可能与字符串中实际的字符数不不同,所以此函数在处理多字节值时是不安全的。

条件表达式

定义控制文件时,可使用条件表达式进行简单的逻辑运算和算术运算以实现更复杂的数据处理能力。

条件表达式语法:

--Simple Case表达式
CASE <expr> WHEN <constant> THEN [constant | expr] ELSE [constant | expr] END;--Search Case表达式
CASE WHEN <condition> THEN [constant | expr] ELSE [constant | expr] END;

参数为条件运算表达式:

is [not] null           # 空/非空判断
not <condition>         # 真值条件表达式的取反运算
[not] in (string_list)  # 关系判断

数据处理示例:

lang=java
(c1 "lower(c1)" map(1),                                                                            -- c1 列的值中的字母转换为小写c2 "ltrim(c2)" map(2),                                                                            -- c2 列的值从左开始截断空格c3 "rtrim(c3)" map(3),                                                                            -- c3 列的值从右开始截断空格c4 "substr(c4,0,5)" map(4),                                                                       -- c4 列的值第 1 位置截取 5 个字符长度的字符串c5 "trim(c5)" map(5),                                                                             -- c5 列的值左右两侧截断空格c6 "upper(c6)" map(6),                                                                            -- c6 列的值中的字母转换为大写c7 "nanvl(c7,'0')" map(7),                                                                        -- c7 列的值进行数值验证,非数值则返回 0c8 "replace(c8,'a','A')" map(8),                                                                  -- c8 列的值中的 a 替换为 Ac9 "nvl(c9,'null')" map(9),                                                                       -- c9 列的值进行判空,若为 null 返回 null 字符串c10 "length(c10)" map(10),                                                                        -- c10 列的值进行长度计算c11 "lpad(c11,5,'x')" map(11),                                                                    -- c11 列的值左侧追加 5 个字节长度字符串 'x'c12 "rpad(c12,5,'x')" map(12),                                                                    -- c12 列的值右侧追加 5 个字节长度字符串 'x'c13 "convert(c13,'utf-8','gbk')" map(13),                                                         -- c13 列的值从 gbk 转换为 utf-8 字符编码c14 "concat(c14, '_suffix')" map(14),                                                             -- c14 列的值与常量进行拼接c15 "none" map(15),                                                                               -- c15 列的值不作任何处理,直接返回对应列的值c16 "systimestamp" map(16),                                                                       -- c16 列的值不作任何处理,直接返回当前集群的时间戳c17 "constant('1')" map(17),                                                                      -- c17 列的值不作任何处理,仅返回常量 1c18 "lpadb(c18,5,'x')" map(18),                                                                   -- c18 列的值左侧追加 5 个字节长度的()字符 'x'c19 "rpadb(c19,5,'x')" map(19),                                                                   -- c19 列的值右侧追加 5 个字节长度的()字符 'x'c20 "case when length(trim(c20))<18 then 'Y' else 'N' end" map(20),                               -- c20 列的值进行条件真值匹配,若为真返回对应列的值c21 "case length(trim(c21)) when '1' then 'one' when '2' then 'two' else 'unknown' end" map(21),  -- c21 列的值进行条件等值匹配,若匹配成功返回对应列的值C22 "SYSDATE" map(22),                                                                            -- c22 列的值为当前日期C23 "MASK(C23)" map(23),                                                                          -- c23 列的值进行脱敏,只对列名有效,列中的大、小写字母和数字使用默认脱敏字符替代(默认脱敏字符:大写字母 X,小写字母 x,数字 n)C24 "MASK_FIRST_N(C24,'A','a','b',3)" map(24),                                                    -- c24 列的值指定大、小写字母以及数字的脱敏字符(默认 N0,从第一个字符开始)C25 "MASK_LAST_N(C25,'A','a','b',3)" map(25),                                                     -- c25 列的值指定大、小写字母以及数字的脱敏字符(默认 N0,从最后一个字符开始)C26 "MASK_SHOW_FIRST_N(C26,'A','a','b',3)" map(26),                                               -- c26 列的值指定不脱敏字符数(默认 N0,从第一个字符开始)C27 "MASK_SHOW_LAST_N(C27,'A','a','b',3)" map(27),                                                -- c27 列的值指定不脱敏字符数(默认 N0,从最后一个字符开始)C28 "REVERSE(C28)" map(28),                                                                       -- c28 列的值将字符顺序颠倒
);

注意事项

  • 标准的CSV格式请参考RFC 4180规范,建议导入时严格遵从RFC 4180规范。
  • 导入导出大量数据时,请在运行的脚本中修改JAVA虚拟机的内存参数以便于提升性能。
  • 命令行参数指定的对象名、数据文件名、规则文件名要求大小写一致。MySQL默认小写。如果需要区分大小写,请将表名放入中括号内。例如:
    • --table'[test]'表示test表,文件名格式为test.group.sequence.suffix
    • --table [TEST]表示TEST表,文件名格式为TEST.group.sequence.suffix
    • 其中,group表示子任务号(由程序依子任务切分策略决定),sequence表示文件滚动号(当文件大小超过--block-size,则会发生滚动),suffix表示文件拓展名。
  • 导入时,OBLOADER可以识别的文件名格式为:"表名"+文件拓展名。可以使用--file-regular-expression命令行选项,通过正则表达式实现自定义的文件检索规则。
  • 数据库对象存在依赖(如表间外键依赖、触发器对序列的依赖等)时,请尽可能按依赖顺序依次导入。如果通过--all或者--table '*'导入,则无法严格保证导入顺序。
  • 无主键的表,暂不支持断点续传。
  • OceanBase 3.2.4及之后的版本使用OBLOADER前,请将系统配置项open_cursors设置为较大的值,否则导入可能会出现错误。数据导入结束后,请将该系统配置项重置成初始值。例如:ALTER SYSTEM SET open_cursors=65535;
  • 导入DDL时,请区分--mix--ddl选项。--ddl选项适用于导入包含仅有一条DDL语句的文件,而--mix选项无此限制。
  • OBLOADER支持的文件格式如下:
  • DDL文件:文件中的内容仅包含DDL语句,不包含表数据。
  • CSV文件:符合RFC 4180规范的标准CSV格式。
  • SQL文件:文件中的内容仅包含INSERT SQL语句,数据不换行。
  • ORC文件:符合标准的Apache ORC的格式,默认使用zstd压缩。
  • Parquet文件:符合标准的Apache Parquet的格式,默认使用zstd压缩。
  • MIX文件:文件中的内容包含DDL语句、DML语句等任意符合合SQL标准的语句。
  • POS文件:以固定字节长度定义的格式,暂不支持固定字符长度。
  • CUT文件:数据列使用单字符或多字符进行分隔、且不带定界符。别于标准的CSV格式。

References
【1】https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002781937

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins+Docker+Git实现自动化CI/CD

你是否还在手动构建、测试、部署过程中频繁等待&#xff1f;或者担心“我本地没问题&#xff0c;部署却报错”&#xff1f;在敏捷开发和 DevOps 时代&#xff0c;**持续集成与持续交付&#xff08;CI/CD&#xff09;**变得至关重要。将 Jenkins、Docker、Git 三者结合&#xff…

Apache Ignite 的 SQL 功能和分布式查询机制

这段内容讲的是 Apache Ignite 的 SQL 功能和分布式查询机制。我们可以从几个关键点来理解&#xff1a;一、Ignite 是一个分布式 SQL 数据库 ✅ 特点&#xff1a; 符合 ANSI-99 SQL 标准水平扩展&#xff08;可扩展到多个节点&#xff09;容错&#xff08;fault-tolerant&#…

C++中的deque容器

deque容器基本概念功能&#xff1a;双端数组&#xff0c;可以对头端进行插入和删除操作deque与vector区别&#xff1a;vector对于头部的插入删除掉率低&#xff0c;数据量越大&#xff0c;效率越低deque相对而言&#xff0c;对头部的插入删除速度会比vector快vetcor访问元素时的…

闲庭信步使用图像验证平台加速FPGA的开发:第三十课——车牌识别的FPGA实现(2)实现车牌定位

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

前端性能优化:从“龟速“到“闪电“的终极加速指南

一、性能指标:你的网站"体检报告" 📊 1. 核心Web指标(Google排名因素) 指标 全称 优秀标准 优化方向 LCP 最大内容绘制 ≤2.5s 关键资源预加载 FID 首次输入延迟 ≤100ms 减少长任务 CLS 累计布局偏移 ≤0.1 预留图片尺寸 测量方法: // 使用web-vitals库测量…

Linux 重定向和缓冲区

序言&#xff1a; 前面在Linux 基础文件IO操作-CSDN博客这篇博客里说了很多函数无论是在语言层还是在系统调用的方面。在调用系统调用open的时候会返回一个整型&#xff0c;在write传参的时候第一个参数是一个叫fd的东西&#xff0c;这个是什么东西&#xff1f;这篇博客会详细…

web登录页面

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简易登录页面</title><style>* {mar…

Java中关于线程池的解析

引语在学习了线程与多线程的相关知识后&#xff0c;我们已经能够实现在程序中使多个任务并行&#xff0c;但是我们在操作时候&#xff0c;往往每执行一个的任务就需要创建一个新的线程。这种方式在需要执行任务很多时不利于我们对线程的管理&#xff0c;且创建过多线程也非常占…

J2EE模式---前端控制器模式

前端控制器模式基础概念前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一种结构型设计模式&#xff0c;其核心思想是将应用程序的所有请求集中到一个中央处理器&#xff08;前端控制器&#xff09;进行处理&#xff0c;由它负责接收请求、协调处理流程并返…

模块加载、ES、TS、Babel 浅析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

day056-Dockerfile案例与Docker Compose

文章目录0. 老男孩思想-老男孩名言警句1. Dockerfile指令&#xff1a;ENV与ARG的区别&#xff1f;2. 创建WordPress镜像2.1 CA证书2.1.1 客户端访问HTTPS站点&#xff08;阿里云镜像源&#xff09;过程2.1.2 查看Windows的CA证书2.1.3 ubuntu查看CA证书是否安装2.2 准备apt下载…

gcc 源码分析:从IR-RTL 到汇编输出

在完成了IR-RTL的优化与寄存器分配后就来到汇编代码的输出&#xff1a;实现如下&#xff1a;class pass_final : public rtl_opt_pass { public:pass_final (gcc::context *ctxt): rtl_opt_pass (pass_data_final, ctxt){}/* opt_pass methods: */unsigned int execute (functi…

STC89C52系列单片机内部结构详解

STC89C52 是基于 MCS-51 内核的增强型单片机&#xff0c;其内部结构集成了多种功能模块&#xff0c;具备强大的数据处理和控制能力&#xff0c;是嵌入式系统中常用的一种微控制器。本文将结合内部结构框图&#xff0c;详细介绍 STC89C52 的各个核心组成部分及其功能作用。一、中…

Linux防火墙管理和基础服务(FTP/SFTP)

防火墙管理# 开放端口firewalld-cmd --add-port880/tcp --permanent# 移除端口或阻止端口firewalld-cmd --remove-port880/tcp --permanent# 重启服务systemctl restart firewalld# 查看防火墙开放哪些端口&#xff08;查看当前区域的规则&#xff09;firewall-cmd --lis…

Selenium+Java 自动化测试入门到实践:从环境搭建到元素操作

在自动化测试领域&#xff0c;Selenium 凭借其强大的跨浏览器兼容性和灵活的 API&#xff0c;成为 Web 应用测试的首选工具。而 Java 作为一门稳定且广泛应用的编程语言&#xff0c;与 Selenium 结合能构建出高效、可维护的自动化测试框架。本文将从环境搭建开始&#xff0c;逐…

Hugging Face 模型的缓存和直接下载有什么区别?

Hugging Face 模型的缓存和直接下载&#xff08;下载到本地文件夹&#xff09;是两种不同的模型管理方式&#xff0c;它们在使用场景、存储结构和效率上各有优劣。 以下是它们之间的主要区别&#xff1a; Hugging Face 缓存 (Cache) 当您通过 transformers 库中的 from_pretrai…

JavaScript AJAX 实现,演示如何将 Token 添加到 Authorization

以下是一个完整的原生 JavaScript AJAX 实现&#xff0c;演示如何将 Token 添加到 Authorization 头部的示例&#xff1a;基础实现html复制代码<!DOCTYPE html> <html> <head><title>AJAX Token 示例</title><script>// 获取当前用户的 To…

开发语言的优劣势对比及主要应用领域分析

开发语言是程序员用来编写软件指令的工具。每种语言都有自己的设计哲学、语法&#xff08;规则&#xff09;和应用场景&#xff0c;但没有“放之四海而皆准”的最佳语言。以下是主流和重要开发语言的介绍&#xff0c;按主要应用领域分类&#xff1a; 一、全能型语言 (可在多个领…

Java学习-------事务失效

在 Java 开发中&#xff0c;事务是保证数据一致性和完整性的关键机制&#xff0c;尤其在涉及多步数据库操作的业务场景中不可或缺。然而&#xff0c;在实际开发过程中&#xff0c;事务常常会出现 “失效” 的情况 —— 预期的回滚没有发生&#xff0c;数据出现不一致。 Java 事…

JavaScript 01 JavaScript 是什么

1.1 JavaScript 是什么JavaScript 是一门世界上最流行的脚本语言&#xff08;基本所有平台的所有软件都会用到它&#xff09;。“1994年&#xff0c;网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器&#xff0c;轰动一时。但是&#xff0…