數據庫管理-第285期 Oracle 23ai:深入淺出向量索引(20250117)

數據庫管理285期 20245-01-17

  • 數據庫管理-第285期 Oracle 23ai:深入淺出向量索引(20250117)
    • 1 HNSW
      • 事務支持
      • 解讀
    • 2 IVF
      • 分區支持
      • 解讀
    • 3 混合向量索引
      • 何時選擇混合向量索引
      • 為何選擇混合向量索引
    • 總結

數據庫管理-第285期 Oracle 23ai:深入淺出向量索引(20250117)

作者:胖頭魚的魚缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE Partner10年數據庫行業經驗
擁有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等認證
墨天輪MVP,ITPUB認證專家
圈內擁有“總監”稱號,非著名社恐(社交恐怖分子)公眾號:胖頭魚的魚缸
CSDN:胖頭魚的魚缸(尹海文)
墨天輪:胖頭魚的魚缸
ITPUB:yhw1809。
除授權轉載并標明出處外,均為“非法”抄襲

胖頭魚的魚缸_01.png
之前寫Oracle Vector DB和AI Vector Search相關文章的時候,似乎一直沒有針對向量近似相似性搜索的性能優化進行介紹,對于數據庫來說,加速數據查詢最便捷的方式就是增加索引,那么向量的索引和傳統標量數據的索引有什么異同呢,本期和總監一起學習。(本文大部分內容源自于Oracle官方文檔)

1 HNSW

HNS,Navigable Small World,可譯作可導航小世界,其理念是構建一個鄰近圖,其中圖中的每個向量根據下面3個特征連接到其他幾個向量:

  • 向量之間的距離
  • 插入期間搜索的每個步驟中考慮的最近向量候選的最大數量 (EFCONSTRUCTION)
  • 每個向量允許的最大連接數 (NEIGHBORS)

如果上述兩個閾值的組合過高,則最終可能會得到一個緊密連接的圖,這會減慢搜索過程。另一方面,如果這些閾值的組合過低,則圖可能會變得過于稀疏和/或斷開連接,這使得在搜索過程中很難找到某些向量之間的路徑。
用于向量搜索的可導航小世界 (NSW) 圖遍歷從圖中預定義的入口點開始,訪問一組密切相關的向量。搜索算法采用兩個關鍵列表:候選列表(遍歷圖時遇到的動態更新向量列表)和結果列表(包含迄今為止找到的與查詢向量最接近的向量)。隨著搜索的進行,算法會瀏覽整個圖,通過探索和評估可能比結果中的向量更近的向量來不斷優化候選列表。一旦候選列表中沒有比結果中最遠的向量更近的向量,則該過程結束,這表明已達到局部最小值并已確定與查詢向量最接近的向量。下圖對這一點進行了展示:
image.png
所述方法在將向量插入到圖中的一定規模時表現出穩健的性能。超過此閾值后,分層可導航小世界 (HNSW,Hierarchical Navigable Small World) 方法通過引入多層層次結構來增強 NSW 模型,類似于概率跳躍列表中觀察到的結構。此分層架構是通過將圖的連接分布在多個層上來實現的,并以每個后續層包含來自下一層鏈接子集的方式組織它們。這種分層確保頂層捕獲長距離鏈接,有效地充當圖中的快速路徑,而較低層則專注于較短的鏈接,從而促進細粒度的本地導航。因此,搜索從較高層開始,以快速近似目標向量的區域,逐漸移動到較低層以進行更精確的搜索,通過利用從頂層移動到底層時向量之間的較短鏈接(較小距離),顯著提高搜索效率和準確性。為了更好地理解 HNSW 的工作原理,讓我們看看此層次結構如何用于概率跳過列表結構:
image.png
概率跳躍表結構使用多層鏈接列表,其中上層跳過的數字比下層跳過的數字多。在此示例中,要搜索數字 17。從頂層開始,然后跳轉到下一個元素,直到找到 17、到達列表末尾或找到大于 17 的數字。當到達列表末尾或找到大于 17 的數字時,則從上一層中最新的小于 17 的數字開始。
HNSW 使用與 NSW 層相同的原理,即較高層中的向量之間的距離較大。以下 2D 空間中的圖表說明了這一點:
最頂層是最長的邊,最底層是最短的邊。
image.png
從頂層開始,一層中的搜索從入口向量開始。然后對于每個節點,如果有一個鄰居比當前節點更接近查詢向量,則跳轉到該鄰居。算法一直這樣做,直到找到查詢向量的局部最小值。當在一層中找到局部最小值時,搜索將使用新層中的相同向量轉到下一層,并在該層中繼續搜索。此過程重復進行,直到找到底層的局部最小值,其中包含所有向量。此時,搜索轉換為使用NSW算法圍繞最新找到的局部最小值進行近似相似性搜索,以提取與查詢向量最相似的前k個向量。雖然上層可以具有NEIGHBORS參數設置的每個向量的最大連接數,但第0層可以具有兩倍的連接數。下圖說明了此過程:
image.png
層是使用內存圖(而非 Oracle 內存圖)實現的。每個層都使用單獨的內存圖。如前所述,在創建HNSW索引時,可以使用 NEIGHBORS 參數微調上層中每個向量的最大連接數,以及使用EFCONSTRUCTION參數微調插入期間搜索的每個步驟中考慮的最近向量候選的最大數量,其中EF代表Enter Factor。
如前所述,在使用Oracle AI Vector Search使用HNSW索引運行近似搜索查詢時,可以指定應執行近似搜索的目標精度。
對于HNSW近似搜索,可以指定目標精度百分比值來影響探測搜索時考慮的候選數。這是由算法自動計算的。值為 100 往往會產生與精確搜索類似的結果,盡管系統可能仍會使用索引并且不會執行精確搜索。優化器可能會選擇繼續使用索引,因為考慮到查詢中的謂詞,這樣做可能會更快。可以指定EFSEARCH參數來規定在探測索引時要考慮的候選的最大數量,而不是指定目標準確度百分比值。該數字越高,準確度越高。

注意:
· 如果未在近似搜索查詢中指定任何目標精度,那么將繼承創建索引時設置的目標精度。將看到,在創建索引時,可以根據要創建的索引類型使用百分比值或參數值指定目標精度。
· 與索引創建時設置的目標精度相比,在索引搜索時可以指定不同的目標精度。對于HNSW索引,可以使用EFSEARCH參數(高于索引創建時指定的EFCONSTRUCTION值)查看更多鄰居以獲得更準確的結果。在索引創建期間提供的目標精度決定了索引創建參數,并且還充當向量索引搜索的默認精度值。

事務支持

HNSW索引圖是靜態的純內存結構。使用兩個主要結構對具有 HNSW 索引的表進行事務維護:私有日志(private journal)和共享日志(shared journal)。

  • 私有日志是每個事務的內存數據結構,用于跟蹤由事務添加或刪除的向量(更新實際上是刪除后插入)。這類似于用于維護內存列存儲數據的事務日志。這些內存結構來自向量內存池,用于讀取一致性目的。
  • 共享日志包含提交系統更改號(SCN)和相應的修改行。此結構是在創建向量索引時創建的磁盤結構。在提交時,記錄到私有日志中的更改將轉換為行并刷新到共享日志中。此結構還用于讀取一致性目的。
注意:
· 對于批量DML(使用 INSERT /*+ APPEND */ 直接加載),更改會直接在共享日志中跟蹤,以避免對向量內存池造成壓力。
· 在完全重新填充時(直到新的HNSW圖可用),如果查詢嘗試訪問不再存在的舊版本的HNSW圖,則會觸發讀取一致性錯誤ORA 51815 "INMEMORY NEIGHBOR GRAPH HNSW vector index snapshot is too old"。
例如,假設舊的HNSW圖存在于SCN 100。雖然完全重新填充會在SCN 200處構建新圖(這將創建新的ROWID到VID映射表),但到達SCN 150的查詢無法訪問 SCN 200 處的新圖。這是因為查詢的執行計劃是使用與SCN 100處的舊圖相對應的舊ROWID到VID映射表編譯的。

除了先前定義的主要用于事務一致性的結構之外,還可以維護完整的檢查點磁盤結構(如果啟用),以便在實例重啟后更快地重新加載HNSW索引。在創建索引并完全重新填充 HNSW 圖時,會自動創建完整的檢查點。默認情況下,HNSW 檢查點處于啟用狀態。
如何將先前定義的結構相互結合使用,以便在具有HNSW索引的表上實現事務維護和讀取一致性的整體更好性能:

  1. 按照DML,通過考慮內存中現有的HNSW圖以及查詢的私有日志和共享日志來確定事務一致的已刪除和插入向量集列表,從而實現讀取一致性。這包括從日志中識別已刪除向量的精確列表,通過增強過濾器以忽略已刪除向量,對當前版本的HNSW索引運行近似 top-K 搜索,對日志中新插入的向量運行精確top-k搜索,并合并兩次搜索的結果。
    image.png
  2. 隨著DML在共享日志中積累,在磁盤日志中精確搜索已刪除和插入的向量會導致其性能下降。為了最大限度地減少這種影響,會自動觸發索引的完整重新填充。在后臺重新填充HNSW索引的決定基于一個默認閾值,該閾值代表針對索引運行的DML數量的一定百分比。此外,每次創建或重新填充HNSW索引時,都會在磁盤上重新創建新創建的圖形的完整檢查點和新的ROWID到VID映射表。
    image.png
注意:
在完全重新填充期間,內存中需要兩個圖形副本。例如,如果我們有10%的新插入,那么重新填充圖形的向量內存需求將比內存中原始HNSW圖形大小大約多10%。因此,在重新填充期間的峰值向量內存需求下,內存需求將是2.1倍,而在重新填充完成后,內存需求將降至1.1倍。這樣做是為了確保在創建新圖形時仍可以使用先前版本的圖形實現讀取一致性。

解讀

從HNSW索引的概念來看,要支持DML的難度和開銷還是很大的。因此在很多數據庫(前提是支持向量DML操作)中,在存儲有向量數據的表上建立HNSW索引后,是不允許再進行DML操作的,DML操作也需要刪除后重建HNSW索引。而在Oracle 23.4和23.5中,對于在向量列上構建了HNSW索引的表,也是不允許使用DML。HNSW支持DML操作功能是在23.6實現的。

2 IVF

IVF,Inverted File Flat,可譯作倒排文件平面,IVF向量索引是一種通過使用鄰居分區或集群來縮小搜索區域以提高搜索效率的技術。下圖描述了使用二維空間表示進行近似搜索時如何創建分區或聚類。但這可以推廣到更高維的空間。
image.png
×表示此空間中的向量數據點。
添加新數據點(顯示為小圓圈)以識別k個分區質心,其中質心的數量(k)由數據集的大小(n)決定。通常,k設置為 n 的平方根,但可以在創建索引期間通過指定NEIGHBOR PARTITIONS參數進行調整。
每個質心代表相應分區的平均向量(重心)。
質心是通過對向量進行訓練計算得出的,其目標是最小化每個向量與最近質心的總距離。
質心最終將向量空間劃分為k個分區。這種劃分在概念上表現為從質心擴展的圓圈,當它們相遇時停止增長,形成不同的分區。

image.png
除了外圍的向量之外,每個向量都落在與質心相關的特定分區內。

image.png
對于查詢向量vq?,搜索算法會識別最近的i個質心,其中i默認為k的平方根,但可以通過設置NEIGHBOR PARTITION PROBES參數針對特定查詢進行調整。此調整允許在搜索速度和準確性之間進行權衡。
此參數的數字越大,準確性越高。在此示例中,i設置為2,兩個已識別的分區是分區編號1和3。

image.png
一旦確定了i個分區,就會對它們進行全面掃描,以識別出本例中前5個最近的向量。這個數字5可以與k不同,可以在查詢中指定這個數字。下圖突出顯示了在分區編號1和3中找到的離vq最近的五個向量。
此方法構成近似搜索,因為它將搜索限制在分區的子集內,從而加速了搜索過程,但可能會在未檢查的分區中丟失更接近的向量。此示例說明近似搜索可能無法產生離vq?最近的準確向量,這表明搜索效率和準確性之間存在固有的權衡。

image.png
但是,距離vq最近的5個向量并不是通過近似搜索找到的向量。可以看到分區號4中的一個向量比分區號3中檢索到的向量之一更接近vq。

image.png
現在可以看到為什么使用向量索引搜索并不總是精確搜索,而是近似搜索。在此示例中,近似搜索準確率僅為 80%,因為它僅檢索了5個精確搜索向量結果中的4個。

image.png
使用Oracle AI Vector Search運行使用向量索引的近似搜索查詢時,可以指定近似搜索應執行的目標精度。
對于IVF近似搜索,可以指定目標精度百分比值來影響用于探測搜索的分區數。該值由算法自動計算。值為100時,系統可能會強制執行精確搜索,但系統仍可能使用索引,不會執行精確搜索。優化器可能會選擇繼續使用索引,因為考慮到查詢中的謂詞,這樣做可能會更快。可以指定NEIGHBOR PARTITION PROBES參數來強制搜索要探測的分區的最大數量,而不是指定目標精度百分比值。該數字越高,精度越高。

注意:
· 如果未在近似搜索查詢中指定任何目標精度,那么將繼承創建索引時設置的目標精度。將看到,在創建索引時,可以根據要創建的索引類型使用百分比值或參數值指定目標精度。
· 與索引創建時設置的目標精度相比,可以在索引搜索時指定不同的目標精度。對于 IVF 索引,可以使用NEIGHBOR PARTITION PROBES參數探測更多質心分區以獲得更準確的結果。在索引創建期間提供的目標精度決定了索引創建參數,并且還充當向量索引搜索的默認精度值。

分區支持

IVF向量索引支持分區表上的全局和本地索引。默認情況下,IVF索引按質心全局分區。
全局IVF索引由兩個表組成:

  • 一個名為VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROIDS,包含已識別質心向量和相關ID的列表。
  • 第二個名為VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROID_PARTITIONS,它按質心 ID 進行列表分區。每個分區包含與該分區的相應質心ID緊密相關(集群)的基表向量。

image.png
此結構用于加速索引中的搜索,方法是首先識別最接近查詢向量的質心,然后使用相應的質心ID修剪不必要的分區。
但是,如果基表按某些關系數據進行分區,并且查詢按基表分區鍵進行過濾,則全局 IVF 索引不是最佳選擇,因為它們完全獨立于基表分區鍵。例如,如果搜索類似于向量化圖片的加利福尼亞州前 10 棟房屋,則圖片本身很可能與加利福尼亞州沒有任何關系。雖然查詢受益于基表按州分區的事實,因此只能搜索與加利福尼亞州相對應的分區,但查詢仍然必須查看可能不在加利福尼亞州的圖片。
為了進一步加速此類查詢,可以創建本地IVF索引。索引的術語“本地”是指基表分區或子分區與索引分區之間的一對一關系。
如下圖所示,基表有三個分區,創建的本地IVF索引仍然由兩個內部表組成:

  • 一個名為VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROIDS,它按基表分區 ID 進行列表分區,因此與基表等分區。每個分區包含相應標識的質心向量和相關 ID 的列表。
  • 第二個名為VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROID_PARTITIONS,它按基表分區ID進行列表分區,并按質心ID進行列表子分區。此表也與基表等分區,每個子分區包含與該子分區的相應質心ID緊密相關(集群)的基表向量。

image.png
回到我們最初的例子,搜索加利福尼亞州前10棟房屋,類似于向量化圖片;查詢受益于對基表和質心表(加利福尼亞州)的分區修剪,因為它們都是按州分區的。此外,一旦在該分區中確定了最近的質心,查詢只需掃描質心分區表中相應的質心群集子分區,而無需掃描其他質心子分區。
另一種可能性是基表進行復合分區。以下是與該情況相對應的圖形表示。質心表根據基表子分區進行列表分區。質心表中的每個分區包含在相應基表子分區中找到的所有質心向量。質心分區表按基表子分區 ID 進行列表分區,并進一步按質心ID進行子分區:
image.png

注意:
只能在分區基表上創建本地IVF索引。
本地IVF索引繼承常規本地索引使用的所有系統目錄表和視圖。vecsys.vector$index表中的標志 (idx_spare2)指示索引是本地還是全局向量索引。

使用本地 IVF 索引可帶來其他優勢:

  • 簡化分區管理操作 (PMOP,Partition Management Operations):
    例如,刪除表分區只需刪除相應的索引分區。
  • 靈活的索引方案:
    例如,將某些索引分區標記為UNUSABLE,以避免通過部分索引對某些表分區進行索引。

解讀

IVF索引性能低于HNSW索引,但其可以更便攜的管理并更好的支持DML操作。

3 混合向量索引

混合向量索引(Hybrid Vector Index)繼承了Oracle Text搜索索引的所有信息檢索功能,并利用了Oracle AI Vector Search向量索引的語義搜索功能。
混合向量索引允許使用全文搜索和語義向量搜索的組合來索引和查詢文檔。混合向量索引是一類專門的域索引,它將現有的Oracle Text索引數據結構和向量索引數據結構組合成一個統一的結構。單個索引包含文檔的文本和向量字段,使能夠同時執行關鍵字搜索和向量搜索的組合。
混合向量索引的目的是通過允許用戶使用開箱即用和自定義評分技術以各種組合方式搜索向量和關鍵字來增強Oracle Text索引的搜索相關性。通過將傳統的基于關鍵字的文本搜索與基于向量的相似性搜索相結合,可以改善整體搜索體驗并為用戶提供更準確的信息。

何時選擇混合向量索引

如果查詢需要語義相似但涉及特定焦點領域(即涉及特定組織、用戶名、產品代碼、技術術語、日期或時間)的信息,請考慮在混合搜索場景中使用混合向量索引。例如,典型的混合搜索查詢可以是查找“ABC 公司股票欺詐的十大實例”。
這樣的查詢涉及兩個獨立的部分:

  • 第一個是想要識別“股票欺詐”概念的地方
  • 第二個是想要縮小結果范圍以僅關注“ABC 公司”的地方

純關鍵字搜索可能會返回專門包含查詢詞(如“股票”、“欺詐”、“ABC”或“公司”)的結果,因為它側重于將精確的關鍵字或單詞或短語的表面表示與文本索引中的標記術語進行匹配。因此,單獨的關鍵字搜索可能不適合這里,因為它可能會忽略我們查詢中的單詞背后的語義含義,尤其是當內容中沒有精確的術語時。
純向量搜索側重于理解單詞或短語的含義和上下文,而不僅僅是匹配關鍵字。向量搜索考慮查詢詞之間的語義關系,因此它可能包含更多與上下文相關的結果,如“公司欺詐”、“股市操縱”、“股票不當行為”、“金融違規行為”或“金融部門的訴訟”。向量搜索也可能不適合這里,因為它可能包含有關涉及 ABC 或類似組織的股票欺詐這一更廣泛主題的結果,尤其是當內容中沒有精確的短語“ABC 公司股票欺詐”時。
混合搜索可以解決此類查詢的兩個組成部分,方法是對同一數據運行關鍵字搜索和向量搜索,然后將兩個搜索結果合并為一個結果集。這樣,可以利用文本索引和向量索引的優勢來檢索最相關的結果。

為何選擇混合向量索引

混合向量索引的優點:

  • 與純向量搜索或關鍵字搜索相比,召回率更高:
    如前所述,混合搜索可以結合Oracle AI Vector Search和Oracle Text搜索的強大功能,提供更準確和個性化的信息。關鍵字搜索或向量搜索本身可能與復雜的搜索場景無關,并且可能導致大量虛假結果。
  • 減輕分段的缺點:
    向量嵌入模型通常會對輸入文本的大小施加限制,這會迫使將大型文檔拆分為較小的數據塊以進行語義搜索(如了解數據轉換階段中所述)。由于截斷,數據塊可能會丟失原始文檔的更廣泛上下文,這可能會導致結果丟失。混合向量索引通過在文檔級別執行文本搜索來幫助恢復每個文檔的整個上下文。
  • 與維護獨立索引相比,部署和管理更簡單:
    混合向量索引是一個可以使用DML維護文本和向量的單域索引。關鍵字搜索和向量搜索都會對所有文檔執行,然后將兩個搜索結果合并并評分以返回統一的結果集。它提供了端到端索引管道,可自動轉換輸入數據以進行向量搜索和關鍵字搜索,從而提高索引性能。此索引公開了可選首選項以配置索引參數,但這不是必需的。
  • 統一查詢 API,按向量和關鍵字進行搜索:
    單個SEARCH API(可通過DBMS_HYBRID_VECTOR PL/SQL包獲得)允許在文檔文本索引上指定傳統的CONTAINS查詢,并在向量化塊索引上指定VECTOR_DISTANCE查詢。可以在僅關鍵字、僅向量和混合搜索模式之間切換,以檢索最佳文檔或塊。

總結

本期對Oracle 23ai的向量索引進行了較為深入的介紹。
老規矩,知道寫了些啥。

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

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

相關文章

行人識別檢測數據集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的標注都支持,準確識別率可達99.5%

作者簡介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing從事網格計算&#xff0c;淘米網&#xff0c;網易從事游戲服務器開發&#xff0c;擁有豐富的C&#xff0c;go等語言開發經驗&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等數據庫&#xff0c;設計模…

【Spring】原型 Bean 被固定

問題描述 在定義 Bean 時&#xff0c;有時候我們會使用原型 Bean&#xff0c;例如定義如下&#xff1a; Service Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class ServiceImpl { }然后我們按照下面的方式去使用它&#xff1a; RestController public class Hello…

2024年美賽C題評委文章及O獎論文解讀 | AI工具如何影響數學建模?從評委和O獎論文出發-O獎論文做對了什么?

模型假設僅僅是簡單陳述嗎&#xff1f;允許AI的使用是否降低了比賽難度&#xff1f;還在依賴機器學習的模型嗎&#xff1f;處理題目的方法有哪些&#xff1f;O獎論文的優點在哪里&#xff1f; 本文調研了當年賽題的評委文章和O獎論文&#xff0c;這些問題都會在文章中一一解答…

PyTorch框架——基于深度學習YOLOv8神經網絡學生課堂行為檢測識別系統

基于YOLOv8深度學習的學生課堂行為檢測識別系統&#xff0c;其能識別三種學生課堂行為&#xff1a;names: [舉手, 讀書, 寫字] 具體圖片見如下&#xff1a; 第一步&#xff1a;YOLOv8介紹 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 號開源的 YOLOv5 的下一個重大更新版本…

kafka學習筆記6 ACL權限 —— 筑夢之路

在Kafka中&#xff0c;ACL&#xff08;Access Control List&#xff09;是用來控制誰可以訪問Kafka資源&#xff08;如主題、消費者組等&#xff09;的權限機制。ACL配置基于Kafka的kafka-acls.sh工具&#xff0c;能夠管理對資源的讀取、寫入等操作權限。 ACL介紹 Kafka的ACL是…

探秘自然地理:從太陽到地球的奇妙之旅與災害預警

在浩瀚無垠的宇宙中&#xff0c;我們的地球與太陽緊密相連&#xff0c;它們的奧秘和變化&#xff0c;時刻影響著我們的生活。今天&#xff0c;就讓我們一同深入探索自然地理的基礎知識&#xff0c;揭開太陽與地球的神秘面紗&#xff0c;同時了解那些可能給我們帶來巨大影響的自…

領域算法 - 負載均衡算法

負載均衡算法 文章目錄 負載均衡算法一&#xff1a;常規負載均衡算法二&#xff1a;Nginx負載均衡算法 一&#xff1a;常規負載均衡算法 二&#xff1a;Nginx負載均衡算法 # 定義負載均衡設備的Ip及設備狀態 upstream bakend {ip_hash; server 127.0.0.1:9090 down; server…

Access數據庫教案(Excel+VBA+Access數據庫SQL Server編程)

文章目錄: 一:Access基礎知識 1.前言 1.1 基本流程 1.2 基本概念?? 2.使用步驟方法 2.1 表【設計】 2.1.1 表的理論基礎 2.1.2 Access建庫建表? 2.1.3 表的基本操作 2.2 SQL語句代碼【設計】 2.3 窗體【交互】? 2.3.1 多方式創建窗體 2.3.2 窗體常用的控件 …

圖片生成Prompt編寫技巧

1. 圖片情緒&#xff08;場景氛圍&#xff09; 一張圖片一般都會有一個情緒基調&#xff0c;因為作畫本質上也是在傳達一些情緒&#xff0c;一般都會借助圖片的氛圍去轉達。例如&#xff1a;比如家庭聚會一般是歡樂、喜樂融融。斷壁殘垣一般是悲涼。還有蕭瑟、孤寂等。 2.補充細…

算法題目總結-鏈表

文章目錄 1.環形鏈表1.答案2.思路 2.兩數相加1.答案2.結果 3.反轉鏈表1.答案2.思路 4.反轉鏈表 II1.答案2.思路 5.K 個一組翻轉鏈表1.答案2.思路 6.刪除鏈表的倒數第 N 個結點1.答案2.思路 7.刪除排序鏈表中的重復元素 II1.答案2.思路 8.旋轉鏈表1.答案2.思路 9.LRU 緩存1.答案…

【Unity3D】3D物體擺放、場景優化案例Demo

目錄 PlaceManager.cs(放置管理類) Ground.cs(地板類) 和 GroundData.cs(地板數據類) 額外知識點說明 1、MeshFilter和MeshRenderer的Bounds區別 2、Gizmos 繪制一個平行于斜面的立方體 通過網盤分享的文件&#xff1a;PlaceGameDemo2.unitypackage 鏈接: https://pan.baid…

OpenEuler學習感悟

在初次接觸 OpenEuler 時&#xff0c;我深感其學習難度較大。它與我之前熟悉的操作系統存在諸多差異&#xff0c;學習過程中&#xff0c;需要理解復雜的內核機制、掌握獨特的系統配置方法。但正是這種挑戰&#xff0c;激發了我深入探索的熱情。 從理論學習入手&#xff0c;我發…

C# OpenCvSharp 部署文檔矯正,包括文檔扭曲/模糊/陰影等情況

目錄 說明 效果 模型 項目 代碼 下載 參考 C# OpenCvSharp 部署文檔矯正&#xff0c;包括文檔扭曲/模糊/陰影等情況 說明 地址&#xff1a;https://github.com/RapidAI/RapidUnDistort 修正文檔扭曲/模糊/陰影等情況&#xff0c;使用onnx模型簡單輕量部署&#xff0c…

CSS 溢出問題及解決方案:實用案例與技巧

在網頁開發中&#xff0c;CSS 的布局和樣式起著至關重要的作用&#xff0c;但經常會遇到一個棘手的問題——溢出問題。溢出是指元素內的內容超出了其設定的容器大小&#xff0c;這不僅會影響頁面的美觀&#xff0c;還可能干擾用戶體驗。本文將詳細探討 CSS 溢出問題的案例&…

生成樹機制實驗

1 實驗內容 1、基于已有代碼,實現生成樹運行機制,對于給定拓撲(four_node_ring.py),計算輸出相應狀態下的生成樹拓撲 2、構造一個不少于7個節點,冗余鏈路不少于2條的拓撲,節點和端口的命名規則可參考four_node_ring.py,使用stp程序計算輸出生成樹拓撲 2 實驗原理 一、…

數據結構詳解——堆與二叉樹

? 目錄 樹的概念樹的表示方法二叉樹的概念特殊的二叉樹二叉樹的性質二叉樹的存儲結構順序存儲鏈式存儲 堆的概念與結構堆的性質堆的實現堆的初始化入堆堆的擴容向上調整算法出堆&#xff08;最頂端元素&#xff09;向下調整算法 二叉樹的實現二叉樹的創建二叉樹的銷毀二叉樹的…

【藍橋杯】43694.正則問題

題目描述 考慮一種簡單的正則表達式&#xff1a; 只由 x ( ) | 組成的正則表達式。 小明想求出這個正則表達式能接受的最長字符串的長度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最長字符串是&#xff1a; xxxxxx&#xff0c;長度是 6。 輸入描述 一個由 x()| 組成的正則表達式。…

mac m1下載maven安裝并配置環境變量

下載地址&#xff1a;Download Apache Maven – Maven 解壓到一個沒有中文和空格的文件夾 輸入pwd查看安裝路徑 輸入cd返回根目錄再輸入 code .zshrc 若顯示 command not found: code你可以通過以下步驟來安裝和配置 code 命令&#xff1a; 1. 確保你已經安裝了 Visual Studio…

【自己動手開發Webpack插件:開啟前端構建工具的個性化定制之旅】

在前端開發的世界里&#xff0c;Webpack無疑是構建工具中的“明星”。它強大的功能可以幫助我們高效地打包和管理前端資源。然而&#xff0c;有時候默認的Webpack功能可能無法完全滿足我們的特定需求&#xff0c;這時候就需要自定義Webpack插件來大展身手啦&#xff01;今天&am…

移遠通信多模衛星通信模組BG95-S5獲得Skylo網絡認證,進一步拓展全球衛星物聯網市場

近日&#xff0c;全球領先的物聯網整體解決方案供應商移遠通信正式宣布&#xff0c;其支持“衛星蜂窩”多模式的高集成度NTN衛星通信模組BG95-S5已成功獲得NTN網絡運營商Skylo的網絡認證。BG95-S5也成為了獲得該認證的最新款移遠衛星通信模組。 BG95-S5模組順利獲得Skylo認證&a…