數據倉庫Hive

1.數據倉庫

1.1數據倉庫的概念

數據倉庫(Data Warehouse)是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用于支持管理決策。

  1. 面向主題。操作型數據庫的數據組織面向事務處理任務,而數據倉庫中的數據按照一定的主題域進行組織。主題是指用戶使用數據倉庫進行決策時所關心的重點,一個主題通常與多個操作型信息系統相關。

  2. 集成。數據倉庫的數據來自分散的操作型數據,將所需數據從原來的數據中抽取出來,進行加工與集成、統一與綜合之后才能進入數據倉庫。

  3. 相對穩定。數據倉庫一般是不可更新的。數據倉庫主要為決策分析提供數據,所涉及的操作主要是數據的查詢。

  4. 反映歷史變化。在構建數據倉庫時,會每隔一定的時間(比如每周、每天或每小時)從數據源抽取數據并加載到數據倉庫。

1.2數據倉庫的結構

一個典型的數據倉庫系統通常包含數據源、數據存儲和管理、OLAP(Online Analytical Processing)服務器、前端工具和應用等4個部分。

在這里插入圖片描述

1.3數據倉庫和數據庫之間的區別

特性數據庫數據倉庫
擅長做什么事務處理分析、報告、大數據
數據從哪里來從單個來源“捕獲”從多個來源抽取和標準化
數據標準化高度標準化的靜態Schema非標準化Schema
數據如何寫針對連續寫入操作進行優化按批處理計劃進行批量寫入操作
數據怎么存針對單行型物理塊的高吞吐寫操作進行了優化使用列式存儲進行了優化,便于實現高速查詢和低開銷訪問
數據怎么讀大量小型讀取操作為最小化I/O且最大化吞吐而優化

2.數據湖

企業在持續發展,企業的數據也不斷堆積,雖然“含金量”最高的數據都存在數據庫和數據倉庫里,支撐著企業的運轉。但是,企業希望把生產經營中的所有相關數據,歷史的、實時的,在線的、離線的,內部的、外部的,結構化的、非結構化的,都能完整保存下來,方便“沙中淘金”。數據庫和數據倉庫都不具備這個功能,怎么辦呢?

2.1 數據湖的概念

數據湖是一類存儲數據自然、原始格式的系統或存儲,通常是對象塊或者文件。

數據湖通常是企業中全量數據的單一存儲。全量數據包括原始系統所產生的原始數據拷貝以及為了各類任務而產生的轉換數據,各類任務包括報表、可視化、高級分析和機器學習等。

數據湖的本質,是由“數據存儲架構+數據處理工具”組成的解決方案,而不是某個單一獨立產品。

數據處理工具則分為兩大類。

分類關鍵信息具體描述工具示例
第一類數據處理工具解決數據 “搬到” 湖里的問題定義數據源、制定數據訪問和安全策略、移動數據、編制數據目錄等,保障數據質量,避免數據湖變成 “數據沼澤”Amazon Web Services 的 “Lake Formation”,搭配 Amazon Glue 進行 ETL、編制數據目錄,提高數據質量
第二類數據處理工具從海量數據中 “淘金”對數據進行分析、挖掘、利用,提供給機器學習、數據科學類業務,進行離線分析、實時分析、交互式分析、機器學習等多種數據分析無(未提及具體工具)

2.2 數據湖與數據倉庫的區別

特性數據倉庫數據湖
存放什么數據結構化數據,抽取自事務系統、運營數據庫和業務應用系統所有類型的數據,結構化、半結構化和非結構化
數據模式(Schema)通常在數倉實施之前設計,但也可以在數據分析時編寫在分析時編寫
性價比起步成本高,使用本地存儲以獲得最快查詢結果起步成本低,計算存儲分離
數據質量如何可作為重要事實依據的數據包含原始數據在內的任何數據
最適合誰用業務分析師為主數據科學家、數據開發人員為主
具體能做什么批處理報告、BI、可視化分析機器學習、探索性分析、數據發現、流處理、大數據與特征分析

2.3數據湖能解決的企業問題

在企業實際應用中,數據湖能解決的問題包括以下幾個方面:

  1. 數據分散,存儲散亂,形成數據孤島,無法聯合數據發現更多價值。
  2. 存儲成本問題。
  3. SQL無法滿足的分析需求。
  4. 存儲、計算擴展性不足。
  5. 業務模型不定,無法預先建模

3.湖倉一體

因為數倉和數據庫的出發點不同、架構不同,企業在實際使用過程中,“性價比”差異很大。

在這里插入圖片描述

湖倉一體是一種新型的開放式架構,打通了數據倉庫和數據湖,將數據倉庫的高性能及管理能力與數據湖的靈活性融合了起來,底層支持多種數據類型并存,能實現數據間的相互共享,上層可以通過統一封裝的接口進行訪問,可同時支持實時查詢和分析,為企業進行數據治理帶來了更多的便利性。

“湖倉一體”架構最重要的一點,是實現“湖里”和“倉里”的數據/元數據能夠無縫打通,并且“自由”流動。湖里的“新鮮”數據可以流到倉里,甚至可以直接被數據倉庫使用,而倉里的“不新鮮”數據,也可以流到湖里,低成本長久保存,供未來的數據挖掘使用。

“湖倉一體”架構具有以下特性:

特性描述
事務支持為業務系統提供并發的讀取和寫入,對事務的 ACID 支持,確保數據并發訪問的一致性、正確性(在 SQL 訪問模式下)
數據治理支持各類數據模型的實現和轉變,如星型模型、雪花模型等,保證數據完整性,具備健全的治理和審計機制
BI 支持支持直接在源數據上使用 BI 工具,加快分析效率,降低數據延時,相比在數據湖和數據倉庫分別操作兩個副本更具成本優勢
存算分離使系統能夠擴展到更大規模的并發能力和數據容量
開放性采用開放、標準化的存儲格式(如 Parquet 等),提供豐富的 API 支持,可讓各種工具和引擎(包括機器學習和 Python、R 等)高效地直接訪問數據

4.Hive概述

4.1 傳統數據倉庫面臨的挑戰

隨著大數據時代的全面到來,傳統數據倉庫面臨著巨大的挑戰,主要包括以下幾個方面。

  1. **無法滿足快速增長的海量數據存儲需求。**目前企業數據增長速度非常快,動輒幾十TB的數據,已經大大超出了Oracle/DB2等傳統數據倉庫的處理能力。這是因為傳統數據倉庫大都基于關系數據庫,關系數據庫橫向擴展性較差,縱向擴展性有限。

  2. **無法有效處理不同類型的數據。**傳統數據倉庫通常只能存儲和處理結構化數據,但是,隨著企業業務的發展,企業中部署的系統越來越多,數據源的數據格式越來越豐富,很顯然,傳統數據倉庫無法處理如此眾多的數據類型。

  3. **計算和處理能力不足。**由于傳統數據倉庫建立在關系數據庫基礎之上,因此,會存在一個很大的痛點,即計算和處理能力不足,當數據量達到TB量級后,傳統數據倉庫基本無法獲得好的性能。

4.2 Hive簡介

Hive是一個構建于Hadoop頂層的數據倉庫工具

  • 某種程度上可以看作是用戶編程接口,本身不存儲和處理數據

  • 依賴分布式文件系統HDFS存儲數據

  • 依賴分布式并行計算模型MapReduce處理數據

  • 定義了簡單的類SQL 查詢語言——HiveQL

  • 用戶可以通過編寫的HiveQL語句運行MapReduce任務

  • 是一個可以提供有效、合理、直觀組織和使用數據的模型

Hive具有的特點非常適用于數據倉庫:

特點功能
采用批處理方式處理海量數據Hive需要把HiveQL語句轉換成MapReduce任務進行運行;數據倉庫存儲的是靜態數據,對靜態數據的分析適合采用批處理方式,不需要快速響應給出結果,而且數據本身也不會頻繁變化。
提供適合數據倉庫操作的工具Hive本身提供了一系列對數據進行提取轉化加載的工具,可以存儲、查詢和分析存儲在Hadoop中的大規模數據;非常適合數據倉庫應用程序維護海量數據、對數據進行挖掘、形成意見和報告等。

4.3 Hive與Hadoop生態系統中其他組件的關系

在這里插入圖片描述

工具依賴關系或特點具體描述
Hive依賴于 HDFS 存儲數據HDFS 是高可靠性的底層存儲,用于存儲海量數據
Hive依賴于 MapReduce 處理數據MapReduce 對海量數據進行處理,實現高性能計算,HiveQL 語句編寫的處理邏輯會轉化為 MapReduce 任務運行
Pig作為 Hive 的替代工具是一種數據流語言和運行環境,適合在 Hadoop 和 MapReduce 平臺上查詢半結構化數據集,常用于 ETL 過程,將外部數據裝載到 Hadoop 集群并轉換為期望的數據格式
HBase提供數據的實時訪問一個面向列的、分布式的、可伸縮的數據庫,功能與 Hive 互補,Hive 主要處理靜態數據(如 BI 報表數據)

4.4 Hive與傳統數據庫的對比分析

Hive在很多方面和傳統的關系數據庫類似,但是它的底層依賴的是HDFS和MapReduce,所以在很多方面又有別于傳統數據庫。

對比項目Hive傳統數據庫
數據插入支持批量導入支持單條和批量導入
數據更新不支持支持
索引支持支持
分區支持支持
執行延遲
擴展性有限

5.Hive系統架構

Hive主要由以下3個模塊組成,用戶接口模塊、驅動模塊以及元數據存儲模塊:

在這里插入圖片描述

模塊詳情
用戶接口模塊包括 CLI、Hive 網頁接口(Hive Web Interface,HWI)、JDBC、ODBC、Thrift Server 等,用于實現外部應用對 Hive 的訪問。 CLI 是 Hive 自帶命令行客戶端工具,Hive 3.0 以上版本中 Beeline 取代了 CLI。 HWI 是 Hive 的簡單網頁。 JDBC、ODBC 和 Thrift Server 提供編程訪問接口,Thrift Server 基于 Thrift 軟件框架開發,提供 Hive 的 RPC 通信接口。
驅動模塊(Driver)包括編譯器、優化器、執行器等,執行引擎可以是 MapReduce、Tez 或 Spark 等。 當采用 MapReduce 作為執行引擎時,負責把 HiveQL 語句轉換成一系列 MapReduce 作業,對輸入進行解析編譯、優化計算過程并按步驟執行。
元數據存儲模塊(Metastore)是一個獨立的關系數據庫,通常與 MySQL 數據庫連接創建 MySQL 實例,也可是 Hive 自帶的 derby 數據庫實例。 主要保存表模式和其他系統元數據,如表的名稱、表的列及其屬性、表的分區及其屬性、表的屬性、表中數據所在位置信息等。

6.Hive工作原理

6.1 SQL語句轉換成MapReduce作業的基本原理

1.用MapReduce實現連接操作

在這里插入圖片描述

? Map階段

在Map階段,表 user 中記錄 (uid, name) 映射為鍵值對 (uid, <1, name>),表 order 中記錄 (uid, orderid) 映射為鍵值對 (uid, <2, orderid >),其中 1,2 是表 userorder 的標記位。

例如:

  • (1, Lily) 映射為 (1, <1, Lily>)
  • (1, 101) 映射為 (1, <2, 101>)

? Shuffle、Sort階段

在Shuffle、Sort階段,(uid, <1, name>)(uid, <2, orderid >) 按鍵 uid 的值進行哈希,然后傳送給對應的Reduce機器執行,并在該機器上按表的標記位對這些鍵值對進行排序。

例如:

  • (1, <1, Lily>)(1, <2, 101>)(1, <2, 102>) 傳送到同一臺Reduce機器上,并按該順序排序
  • (2, <1, Tom>)(2, <2, 103>) 傳送到同一臺Reduce機器上,并按該順序排序

? Reduce階段

在Reduce階段,對同一臺Reduce機器上的鍵值對,根據表標記位對來自不同表的數據進行笛卡爾積連接操作,以生成最終的連接結果。

例如:

  • (1, <1, Lily>)(1, <2, 101>) 得到 (Lily, 101)
  • (1, <1, Lily>)(1, <2, 102>) 得到 (Lily, 102)
  • (2, <1, Tom>)(2, <2, 103>) 得到 (Tom, 103)

2.用MapReduce實現分組操作

在這里插入圖片描述

? Map階段

在Map階段,表 score 中記錄 (rank, level) 映射為鍵值對 (<rank, level>, count(rank, level))

  • 對于 score 表的第一片段,有兩條記錄 (A, 1),映射后為 (<A, 1>, 2)

  • 對于 score 表的第二片段,有一條記錄 (A, 1),映射后為 (<A, 1>, 1)

? Shuffle、Sort階段

在Shuffle、Sort階段,鍵值對 (<rank, level>, count(rank, level)) 按鍵 (<rank, level>) 的值進行哈希,然后傳送給對應的Reduce機器執行,并在該機器上按 (<rank, level>) 的值對這些鍵值對進行排序。

  • (<A, 1>, 2)(<A, 1>, 1) 傳送到同一臺Reduce機器上,按到達順序排序。
  • (<B, 2>, 1) 傳送到另一臺Reduce機器上。

? Reduce階段

在Reduce階段,對Reduce機器上的這些鍵值對,把具有相同 (<rank, level>) 鍵的所有 count(rank, level) 值進行累加,生成最終結果。

  • (<A, 1>, 2)(<A, 1>, 1) 累加后得到 (A, 1, 3)
  • (<B, 2>, 1) 最終結果為 (B, 2, 1)

9.6.2 SQL查詢轉換成MapReduce作業的過程

當用戶向Hive輸入一段命令或查詢時,Hive需要與Hadoop交互工作來完成該操作。

? 首先,驅動模塊接收該命令或查詢編譯器。

? 接著,對該命令或查詢進行解析編譯。

? 然后,由優化器對該命令或查詢進行優化計算。最后該命令或查詢通過執行器進行執行。

執行器通常的任務是啟動一個或多個MapReduce任務,有時也不需要啟動MapReduce任務,像執行包含*的操作(如select * from 表)時。

在這里插入圖片描述

7.Hive HA工作原理

在Hive HA中,在Hadoop集群上構建的數據倉庫是由多個Hive實例進行管理的,這些Hive實例被納入一個資源池中,并由HAProxy提供一個統一的對外接口。客戶端的查詢請求首先訪問HAProxy,由HAProxy對訪問請求進行轉發。HAProxy收到請求后,會輪詢資源池里可用的Hive實例,執行邏輯可用性測試。

在這里插入圖片描述

8.Impala

8.1 Impala簡介

Impala是由Cloudera公司開發的新型查詢系統,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase上的PB級大數據。Impala最開始是參照 Dremel系統進行設計的,Impala的目的不在于替換現有的MapReduce工具,而是提供一個統一的平臺用于實時查詢。

Impala與其他組件的關系:

在這里插入圖片描述

比較項HiveImpala
數據交互可與 HDFS 和 HBase 交互可與 HDFS 和 HBase 交互
執行引擎與任務類型采用 MapReduce 作為執行引擎,主要用于處理長時間運行的批處理任務,如批量提取、轉化、加載類型的任務通過類似商用并行關系數據庫的分布式查詢引擎,大大降低延遲,主要用于實時查詢
SQL 語法等和 Impala 采用相同的 SQL 語法、ODBC 驅動程序和用戶接口和 Hive 采用相同的 SQL 語法、ODBC 驅動程序和用戶接口

8.2 Impala系統架構

組成部分描述具體模塊及特點
Impalad是 Impala 的進程,負責協調客戶端提交查詢的執行、給其他 Impalad 分配任務、匯總其他 Impalad 的執行結果,還能執行其他 Impalad 分配的任務,對本地 HDFS 和 HBase 里的部分數據進行操作包含 Query Planner、Query Coordinator 和 Query Exec Engine 3 個模塊;與 HDFS 的數據節點(HDFS DN)運行在同一節點上,基于 MPP 架構完全分布式運行
State Store負責收集集群中各個 Impalad 進程的資源信息用于查詢調度,跟蹤 Impalad 的健康狀態及位置信息創建 statestored 進程,通過多個線程處理 Impalad 的注冊訂閱并保持心跳連接;各 Impalad 緩存 State Store 信息,State Store 離線時 Impalad 進入恢復模式并反復注冊,State Store 重新加入集群后自動恢復正常并更新緩存數據
CLI給用戶提供執行查詢的命令行工具同時提供 Hue、JDBC 及 ODBC 使用接口

在這里插入圖片描述

8.3 Impala查詢執行過程

步驟具體內容詳細描述
第 1 步:注冊和訂閱Impalad 進程向 State Store 提交注冊訂閱信息,State Store 的 statestored 進程處理注冊訂閱當用戶提交查詢前,創建 Impalad 進程負責協調客戶端查詢;State Store 創建 statestored 進程,通過多個線程處理 Impalad 的注冊訂閱信息
第 2 步:提交查詢Impalad 的 Query Planner 解析 SQL 語句生成解析樹,再變成 PlanFragment 發送到 Query Coordinator用戶通過 CLI 客戶端提交查詢到 Impalad 進程;Query Planner 進行解析工作,PlanFragment 由 PlanNode 組成,可分發到單獨節點執行,每個 PlanNode 表示一個關系操作及執行優化所需信息
第 3 步:獲取元數據與數據地址Query Coordinator 從 MySQL 元數據庫獲取元數據,從 HDFS 名稱節點獲取數據地址,得到相關數據所在的數據節點Query Coordinator 分別從不同位置獲取元數據和數據地址信息,確定存儲查詢相關數據的所有數據節點
第 4 步:分發查詢任務Query Coordinator 初始化相應 Impalad 上的任務,將查詢任務分配給存儲查詢相關數據的數據節點Query Coordinator 針對存儲有查詢相關數據的各個數據節點,在對應的 Impalad 上初始化并分配查詢任務
第 5 步:匯聚結果Query Executor 通過流式交換中間輸出,Query Coordinator 匯聚來自各個 Impalad 的結果Query Executor 以流式方式處理中間輸出數據,Query Coordinator 將各個 Impalad 產生的結果進行匯總
第 6 步:返回結果Query Coordinator 把匯總后的結果返回給 CLI 客戶端Query Coordinator 將最終匯總的結果反饋給最初提交查詢的 CLI 客戶端

在這里插入圖片描述

8.4 Impala與Hive的比較

1.Hive 與 Impala 的不同點

比較維度HiveImpala
查詢特點架構基于 Hadoop,采用批處理方式,作業提交和調度開銷大,不適合大規模數據集的低延遲快速查詢,適合長時間批處理查詢分析適合實時交互式 SQL 查詢
執行模式以 MapReduce 為執行引擎,依賴 MapReduce 計算框架,執行計劃是管道型的 MapReduce 任務模式執行計劃呈現為完整的執行計劃樹,能自然地將執行計劃分發到各個 Impalad 執行查詢
數據處理能力執行時若內存無法容納所有數據,會借助外存確保查詢按順序執行完成內存無法容納數據時不使用外存,更適合處理輸出數據量較小的查詢請求,對于大數據量的批量處理,Hive 更具優勢

2.Hive 與 Impala 的相同點

比較維度詳情
數據存儲使用相同的存儲數據池,均支持將數據存儲于 HDFS(支持 TEXT、RCFILE、PARQUET、AVRO、ETC 等格式的數據)和 HBase(存儲表中記錄)
元數據使用相同的元數據
SQL 處理對 SQL 的解釋處理方式相似,都通過詞法分析生成執行計劃

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/83062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83062.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/83062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dify 連接不上ollama An error occurred during credentials validation:

三大報錯 An error occurred during credentials validation: HTTPConnectionPool(hosthost.docker.internal, port11434): Max retries exceeded with url: /api/chat (Caused by NameResolutionError("<urllib3.connection.HTTPConnection object at 0x7f26fc3c00b0&…

uniapp 生成海報二維碼 (微信小程序)

先下載qrcodenpm install qrcode 調用 community_poster.vue <template><view class"poster-page"><uv-navbar title"物業推廣碼" placeholder autoBack></uv-navbar><view class"community-info"><text clas…

如何理解編程中的遞歸、迭代與回歸?

作為編程初學者&#xff0c;遞歸、迭代和回歸這三個概念常常讓人感到困惑。本文將通過生活化的比喻、Python代碼示例和直觀的對比&#xff0c;幫助你徹底理解這三個重要概念及其應用場景。 一、從生活比喻理解核心概念 1. 遞歸&#xff08;Recursion&#xff09;—— 俄羅斯套…

Android Studio 模擬器配置方案

Android Studio 模擬器配置方案 1.引言2.使用Android Studio中的模擬器3.使用國產模擬器1.引言 前面介紹【React Native基礎環境配置】的時候需要配置模擬器,當時直接使用了USB調試方案,但是有些時候可能不太方便連接手機調試,比如沒有iPhone調不了ios。接下來說明另外兩種可…

uniapp(vue3)動態計算swiper高度封裝自定義hook

// useCalculateSwiperHeight.ts import { ref, onMounted } from vue;export function useCalculateSwiperHeight(headerSelector: string .header-search, tabsWrapperSelector: string .u-tabs .u-tabs__wrapper) {const swiperHeight ref<number>(0);// 封裝uni.g…

從代碼學習深度學習 - 轉置卷積 PyTorch版

文章目錄 前言基本操作填充、步幅和多通道填充 (Padding)步幅 (Stride)多通道總結前言 在卷積神經網絡(CNN)的大家族中,我們熟悉的卷積層和匯聚(池化)層通常會降低輸入特征圖的空間維度(高度和寬度)。然而,在許多應用場景中,例如圖像的語義分割(需要對每個像素進行分…

c語言第一個小游戲:貪吃蛇小游戲06

實現貪吃蛇四方向的風騷走位 實現代碼 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; int key; int dir; //全局變量 #define UP 1 //這個是宏定義&a…

django的權限角色管理(RBAC)

在 Django 中&#xff0c;User、Group 和 Permission 是權限系統的核心組件。下面通過代碼示例演示它們的 CRUD&#xff08;創建、讀取、更新、刪除&#xff09; 操作&#xff1a; 一、User 模型 CRUD from django.contrib.auth.models import User# 創建用戶 user User.obje…

解決docker alpine缺少字體的問題 Could not initialize class sun.awt.X11FontManager

制作的springboot項目鏡像&#xff0c;缺少字體報錯Could not initialize class sun.awt.X11FontManager 原因鏡像中缺少字體 解決&#xff1a; 制作鏡像時&#xff0c;添加字體庫&#xff0c;Dockerfile文件 中添加如下內容 注意&#xff1a; jdk版本一定要使用&#xff0…

MQTT 在Spring Boot 中的使用

在 Spring Boot 中使用 MQTT 通常會借助 Spring Integration 項目提供的 MQTT 支持。這使得 MQTT 的集成可以很好地融入 Spring 的消息驅動和企業集成模式。 以下是如何在 Spring Boot 中集成和使用 MQTT 的詳細步驟&#xff1a; 前提條件&#xff1a; MQTT Broker&#xff…

養生:為健康生活注入活力

在快節奏的現代生活中&#xff0c;養生不再是老年人的專屬&#xff0c;而是每個人維持身心健康的必修課。從飲食到運動&#xff0c;從睡眠到心態&#xff0c;全方位的養生方式能幫助我們抵御壓力&#xff0c;擁抱充滿活力的生活。 飲食養生&#xff1a;合理搭配&#xff0c;滋…

Axure設計之內聯框架切換頁面、子頁面間跳轉問題

在Axure中&#xff0c;你可以通過以下步驟實現主頁面中的內聯框架在點擊按鈕時切換頁面內容&#xff0c;從A頁面切換到B頁面。&#xff08;誤區&#xff1a;子頁面之間切換不要設置“框架中打開鏈接”然后選“父級框架”這個交互&#xff09; 主框架頁面&#xff08;左側導航展…

[思維模式-38]:看透事物的關系:什么是事物的關系?事物之間的關系的種類?什么是因果關系?如何通過數學的方式表達因果關系?

一、什么是事物的關系&#xff1f; 事物的關系是指不同事物之間存在的各種聯系和相互作用&#xff0c;它反映了事物之間的相互依存、相互影響、相互制約等特性。以下從不同維度為你詳細闡述&#xff1a; 1、關系的類型 因果關系 定義&#xff1a;一個事件&#xff08;原因&a…

OJ判題系統第6期之判題邏輯開發——設計思路、實現步驟、代碼實現(策略模式)

在看這期之前&#xff0c;建議先看前五期&#xff1a; Java 原生實現代碼沙箱&#xff08;OJ判題系統第1期&#xff09;——設計思路、實現步驟、代碼實現-CSDN博客 Java 原生實現代碼沙箱之Java 程序安全控制&#xff08;OJ判題系統第2期&#xff09;——設計思路、實現步驟…

行業趨勢與技術創新:駕馭工業元宇宙與綠色智能制造

引言 制造業發展的新格局&#xff1a;創新勢在必行 當今制造業正經歷深刻變革&#xff0c;面臨著供應鏈波動、個性化需求增長、可持續發展壓力以及技能人才短缺等多重挑戰。在這樣的背景下&#xff0c;技術創新不再是可有可無的選項&#xff0c;而是企業保持競爭力、實現可持…

高效Python開發:uv包管理器全面解析

目錄 uv簡介亮點與 pip、pip-tools、pipx、poetry、pyenv、virtualenv 對比 安裝uv快速開始uv安裝pythonuv運行腳本運行無依賴的腳本運行有依賴的腳本創建帶元數據的 Python 腳本使用 shebang 創建可執行文件使用其他package indexes鎖定依賴提高可復現性指定不同的 Python 版本…

鴻蒙OSUniApp開發富文本編輯器組件#三方框架 #Uniapp

使用UniApp開發富文本編輯器組件 富文本編輯在各類應用中非常常見&#xff0c;無論是內容創作平臺還是社交軟件&#xff0c;都需要提供良好的富文本編輯體驗。本文記錄了我使用UniApp開發一個跨平臺富文本編輯器組件的過程&#xff0c;希望對有類似需求的開發者有所啟發。 背景…

字符串檢索算法:KMP和Trie樹

目錄 1.引言 2.KMP算法 3.Trie樹 3.1.簡介 3.2.Trie樹的應用場景 3.3.復雜度分析 3.4.Trie 樹的優缺點 3.5.示例 1.引言 字符串匹配&#xff0c;給定一個主串 S 和一個模式串 P&#xff0c;判斷 P 是否是 S 的子串&#xff0c;即找到 P 在 S 中第一次出現的位置。暴力匹…

計算機組成原理:I/O

計算機組成:I/O I/O概述I/O系統構成I/O接口I/O端口兩種編址區分I/O數據傳送控制方式程序查詢方式獨占查詢中斷控制方式硬件判優法(向量中斷法)多重中斷嵌套DMA控制方式三種DMA方式DMA操作步驟內部異常和中斷異常和中斷的關系I/O概述 I/O系統構成 一個最基礎I/O系統的構成:CPU…

ssti模板注入學習

ssti模板注入原理 ssti模板注入是一種基于服務器的模板引擎的特性和漏洞產生的一種漏洞&#xff0c;通過將而已代碼注入模板中實現的服務器的攻擊 模板引擎 為什么要有模板引擎 在web開發中&#xff0c;為了使用戶界面與業務數據&#xff08;內容&#xff09;分離而產生的&…