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
英文地址,請注明出處:http://en.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…