<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SQL Server 2025 AI相關能力初探

      SQL Server 在2024年11月開始進行社區私有預覽(鏈接),由于涉及AI能力,我也是第一時間申請了內側資格,悲劇的是,直到2025年2月,才拿到預覽版的測試資格-.-,此時已經是CTP1.3了,也就是內側的第四個版本了。

      但whatever,late better than never。下面根據我的初步測試,做一些分享。

      當前的測試的版本為:

       

      原生向量支持與DiskANN向量索引

      SQL Server作為一個典型的商業數據庫,一直喜歡搞大而全,各種全家桶全塞進來,現在流行的說法叫“一站式”。基本邏輯是每個sql server版本都會結合當時流行的趨勢和技術,將該技術集成進SQL Server,下面是一個簡單的回顧

       

      歷代SQL Server結合當時背景的新增功能分析

      SQL Server 2008 - 層級結構 (HierarchyID) 和地理信息 (Spatial Data):

       Web 2.0 興起,層級數據和位置服務應用普及。HierarchyID 高效管理組織結構等層級數據,Spatial Data 支持位置服務,滿足 Web 2.0 時代對復雜數據管理和地理位置應用的需求。

       

      SQL Server 2012 - 內存數據庫 (In-Memory OLTP):

      電商等高并發 OLTP 應用爆發,磁盤 I/O 成性能瓶頸。另外這個時代SSD還是貴的沒邊,穩定性還沒這么靠譜的存儲。內存優化表 減少磁盤 I/O,大幅提升高并發 OLTP 性能,應對電商、金融等對極致性能的迫切需求。

      但目前來看,這個功能使用率并不是很高,該功能通常通過外掛的緩存系統實現,比如Redis。

       

      SQL Server 2014 - 列存儲 (Columnstore):

      大數據分析興起,傳統行式存儲分析查詢效率低下。列式索引優化分析查詢,大幅提升大數據倉庫性能,順應大數據分析流行趨勢,滿足企業數據洞察需求。

       

      SQL Server 2016 - JSON 支持 (JSON Support):

      Web 服務和 NoSQL 流行,JSON 成 Web 數據交換主流格式。JSON 支持 允許存儲和查詢 JSON 數據,靈活適應 Web 服務和半結構化數據,擁抱 NoSQL 趨勢,拓展應用場景。

       

      SQL Server 2017 - 圖數據庫 (Graph Database):

      社交網絡、推薦系統等關系復雜應用興起,傳統關系數據庫效率不高。圖數據庫 支持建模復雜關系,高效處理社交網絡、推薦系統等應用。

       

      SQL Server 2019 - HTAP (Hybrid Transactional/Analytical Processing):

      實時數據分析需求強烈,傳統數據倉庫延遲高。HTAP 能力 支持實時分析,提升決策效率,符合實時業務監控和快速決策需求,順應混合處理趨勢。

       

      SQL Server 2022 - 賬本 (Ledger Tables):

      數據安全和合規性日益重要,區塊鏈技術火的一塌糊涂(比特幣價格起飛),需要防篡改數據記錄。賬本表 提供防篡改數據記錄,增強數據完整性和可信度,滿足審計、合規等對數據可信有高要求的場景,擁抱區塊鏈技術,提升數據安全水平。

       

      SQL Server 2025 - 向量數據庫 (Vector Database):

      當下AI的爆發年代來看,需要向量數據庫的背景無需多說,向量數據庫在應用層面主要用于RAG、語義理解、大規模向量數據處理和多模態融合,并能顯著降低向量檢索計算成本。是AI應用中最重要的基礎設施之一。

       

      原生向量類型支持

      SQL Server增加內置的Vector字段,最高支持1998維度(猜想是因為每個向量都是32精度的float,1998維度正好不超過SQL Server每頁的8K存儲,從而不溢出),通過測試可以發現,內部存儲使用varbinary數據作為底層數據,做了一個簡單的測試,通過新增變量類型為Vector,或表列定義為Vector列實現,如圖所示:

       

      基于DiskANN的向量相似度檢索

      DiskANN介紹

      DiskANN基于微軟2019年發表的論文《DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node》。在此之前,向量搜索領域中一個流行的主要算法是HNSW(分層可導航小世界圖),這是一種利用多層圖結構進行搜索的算法。HNSW的核心特點是涉及大量的隨機內存訪問,因此該算法需要消耗大量內存資源,要求原始向量和圖數據都必須常駐內存中。

      圖.HNSW圖查找示例

       

      我們以阿里云的Millivs托管服務為例,如果涉及1千萬的512維向量數據為例,推薦資源如下:

      圖. Millivs對于千萬級512維向量的推薦資源

       

      這種資源要求所帶來的成本較高,會比較多限制AI的落地。針對于此,DisnANN的核心目標是,用有限的內存(幾十GB)+大容量的SSD盤,支撐單節點存儲和搜索十億級別的數據集,同時保持高性能(低延遲、高召回率)。

      DiskANN的核心算法是Vamana圖,本質上是一種構建近似最近鄰圖的方法,它為每個節點構建一個有限數量的出邊,這些出邊連接到該節點的近似最近鄰。與HNSW的多層結構不同,Vamana構建單層圖,但通過精心設計的圖構建過程確保搜索效率。舉個例子理解是Vamana圖就像一張城市地圖,每個數據點是地圖上的一個地點,邊代表地點之間的鄰近關系。DiskANN 的搜索過程就像在地圖上導航,從某個起始點出發,沿著邊不斷“走”到離目標地點最近的位置。

      同時DiskANN還做了一些優化,來適應磁盤換內存的場景,例如:

      • k-means聚類(分而治之),降低建圖的內存需求。
      • PQ量化(數據壓縮),減少內存和計算量。
      • SSD定長數據(高效存儲),加速讀取。
      • 入口節點和鄰居放內存(緩存熱點),減少SSD訪問。
      • beam-search(并行搜索),提升搜索效率。

       下面是根據論文,做了一個DiskANN的簡單數據:

       

      SQL Server中相似度搜索使用方式

      當前在SQL Server的CTP1.3版本中,向量搜索的核心函數主要是VECTOR_DISTENCE,可以結合在傳統的T-SQL中使用,目前該函數還比較初級,當前僅支持余弦相似度、歐式距離和點積。一個簡單的示例如下:

      -- 創建一個包含向量字段的表
      CREATE TABLE VectorTable (
          ID INT PRIMARY KEY IDENTITY(1,1),
          Description NVARCHAR(100),
          EmbeddingVector VECTOR(10) -- 創建10維向量字段
      );
      
      INSERT INTO VectorTable (Description, EmbeddingVector)
      VALUES 
          ('示例項目1', '[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]'),
          ('示例項目2', '[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]'),
          ('示例項目3', '[0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0]');
      
      
      DECLARE @queryVector VECTOR(10) = '[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.1]';
      
      
      
      -- 使用余弦相似度查找最相似的向量
      SELECT 
          ID, 
          Description,
          vector_distance('cosine' , @queryVector, EmbeddingVector)
      FROM VectorTable

      余弦相似度的結果如下:

      圖. 計算余弦相似度

       

      同時SQL Server也支持使用和傳統的關系數據共同作用,進行相似度查詢,例如該例子,結合where條件,幫助用戶通過where做過濾,同時選出top 5相似度的產品:

        -- 假設我們有一個查詢向量(可能來自用戶當前正在查看的產品)
      DECLARE @query_vector VECTOR(512) = CAST(CONCAT('[', REPLICATE('0.15,', 511), '0.15]') AS VECTOR(512));
      
      -- 查找與當前產品最相似的5個產品(使用余弦相似度)
      SELECT top 5
          id,
          category,
          description,
          vector_distance('cosine' , @query_vector, vector) AS similarity_score
      FROM 
          VectorDemo
      where category = 'Clothing'
      ORDER BY 
          similarity_score

      結果如下:

      圖.余弦相似度計算結果

       

      相似度搜索的性能

      由于當前我拿到的是私有預覽版的sql server,并沒有合適的幫助文檔,因此不確定我的使用方式是否正確,按我的理解,可能需要針對向量列單獨加索引,但目前沒看到加索引的方式,下面的測試是基于沒有加索引的測試。測試的數據量如下:

      當前我們的測試表大約是200W+的數據,每列包含512維的向量,大約數據占用是6G左右,當我做一個簡單的相似度搜索時,可以看到

       

      雖然查詢完成時間在334毫秒,從邏輯讀(80萬的邏輯讀*8K每次讀取,基本等于數據量大小)來看,基本走了全表掃描,而CPU使用也是非常高,基本需要1個CPU 100%,2.3S時間。

      當前查詢完成快是數據已經常駐內存,那么如果我將sql server使用內存調低,涉及到IO讀寫呢?比如當前數據量維6.9G,我將內存使用上限調整為6G會發生什么:

       

      由于開始涉及物理讀寫,我們看到整個查詢時間來到不可接受的節奏。大量的預讀和IO操作使得CPU時間翻倍,同時整體時間增長50倍倍。

      那么我們使用選擇性很高的索引呢?

       

      可以看到,category='test'的選擇性非常高,導致向量相似度搜索成本直接通過IndexSeek+向量搜索完成。

      后續等待更多文檔出來再進一步觀察,當前的觀察是,如果沒有對向量增加索引,則搜索基本需要全量比對+排序。如果用于實際生產,基本難以接受。

       

      其他AI相關函數支持

      VECTOR_NORM(向量標準化)

      本例中VECTOR_NORM(image_embedding, ‘norm2’) > 3 主要作用:

      • 去除純色背景(因向量范數接近零)
      • 去除模糊圖像(因特征信息少,范數較小)
      • 去除異常數據(因數據錄入錯誤,導致范數極小或無效)

       

       VECTOR_NORMALIZE(向量歸一化)

      該函數解釋也比較簡單,就是將向量的上限變為1,比如當前最大值是5,則對應的4變為0.8。一個簡單的例子:

       

       

       

      AI服務集成與T-SQL擴展

      sp_invoke_external_rest_endpoint

      直接通過 T-SQL 調用外部的 HTTPS REST 或 GraphQL 接口。簡單來說,它讓 SQL Server 數據庫可以像客戶端一樣,直接和外部服務(比如 Azure Functions、Power BI、OpenAI API 、DeepSeek API等)交互。

      想象你在 SQL Server 里寫了個腳本,但需要外部服務(比如翻譯文本、計算匯率、調用大模型等)。以前你得寫個外部程序(比如用 Python 或 C#)去調用服務,再把結果寫回數據庫。現在,sp_invoke_external_rest_endpoint 可以做到數據不出數據庫即可完成服務。

      其實外部調用的優勢和劣勢我也簡單做了一個總結,

      優勢:

      • 數據就地處理,減少數據搬運(同時減少安全面)
      • 統一的事務與安全機制(ACID支持,數據庫權限、證書支持)
      • 簡化架構與減少依賴(集中化帶來開發便利)
      • 方便運維(集中化帶來運維便利)
      • 快速原型驗證(驗證后遷移服務層)

        劣勢:

      • 數據庫負載與性能沖突
      • 數據庫難以Scale-out
      • 難以調試(T-SQL相比編程語言難以調試)
      • 語言/生態局限(支持的Python包有限)
      • 安全問題(需要數據庫能夠訪問外部服務,需要額外啟用防火墻)
      • 數據庫中生態極差(主流語言支持豐富的AI/ML庫)

       

      下面是一個簡單的例子,我將SQL Server數據庫的日志發送給大模型,尋求性能優化建議:

       

      DECLARE 
          @endpoint_url NVARCHAR(200) = N'https://',
          @api_key NVARCHAR(100) = N'sk-or-v1',
          @logs_context NVARCHAR(MAX),
          @payload NVARCHAR(MAX),
          @response_status_code INT,
          @response_message NVARCHAR(MAX);
      
      -- 步驟1:獲取最新的 SQL Server 日志信息作為上下文
      SET @logs_context = N'2025-02-26 14:35:15.45 spid51 Query execution time exceeded 1s for SELECT * FROM Sales.Orders JOIN Sales.OrderDetails ON Orders.OrderID = OrderDetails.OrderID WHERE OrderDate > ''2025-01-01''. Table scan detected on Sales.OrderDetails due to missing index on OrderID. + 2025-02-26 14:35:18.19 spid47 CPU usage reached 92% for 30 seconds. High lock contention detected on table Sales.Orders. + 2025-02-26 14:35:19.19 spid47 Buffer pool hit ratio dropped to 7%. Memory pressure detected, available memory: 512 MB.';
      
      -- 步驟2:構造請求體
      SET @payload = N'{
          "model": "google/gemini-2.0-flash-001",
          "messages": [
              {"role": "system", "content": "You are a SQL Server expert."},
              {"role": "user", "content": "以下是我的SQL服務器日志信息:' 
               + @logs_context 
               + N'。請給出可能的性能優化或故障排查建議。"}
          ]
      }';
      
      -- 步驟3:構造請求頭
      DECLARE @headers NVARCHAR(MAX);
      SET @headers = CONCAT(N'{"Content-Type": "application/json", "Authorization": "Bearer ', @api_key, '"}');
      
      -- 步驟3:調用 sp_invoke_external_rest_endpoint 發送 POST 請求
      EXEC sp_invoke_external_rest_endpoint
           @url = @endpoint_url,
           @payload = @payload,
           @method = 'POST',
           @headers = @headers,
           @response = @response_message OUTPUT,
           @timeout = 60; 
      
      -- 步驟5:查看返回結果
      SELECT @response_message AS [OpenRouter Response];

      看到結果:

      圖. 調用外部模型返回的結果

      返回的部分JSON截圖:

      圖. 部分返回結果JSON化

      sp_execute_external_script

      在使用庫數據庫層直接完成推理或特征提取,sp_execute_external_script是 SQL Server 提供的一個系統存儲過程,允許在 SQL Server 中直接執行外部腳本語言(如 R、Python 或 Java)的代碼,并且可以與數據庫中的數據無縫交互。它是 SQL Server 集成機器學習和高級分析能力的核心組件之一。

       

      一個簡單的例子:調用 Python + Hugging Face Transformer 做情感分析

      圖. 使用T-SQL調用外部Python包

       

      結果:

      圖. 情感分析場景結果

      支持 LangChain、Semantic Kernel、EF 等流行 AI 框架

      這部分是在SQL Server之外完成的,本質上就是在這些流行的框架中,增加了對SQL Server的驅動支持,其實沒什么好說的,例如:

       

      在langchain中,直接支持SQL Server作為數據存儲。

      圖. 將SQL Server作為向量數據源

       

      直接在langchain中進行相似度搜索

      圖. SDK直接進行相似度搜索

      圖. 在C#的ORM直接支持相似度搜索

       

      小結

      ??本文基于SQL Server 2024年11月社區私有預覽(CTP1.3版本)的初步測試,分享了新功能的體驗。SQL Server 2025新增了原生向量支持和DiskANN向量索引,適應當前AI應用需求,可用于RAG、語義理解等場景,支持最高1998維向量存儲及余弦、歐氏距離等相似度檢索。測試中發現,向量搜索性能可能因缺乏索引或數據未駐留內存而下降,特別是在IO密集場景下表現不理想,但這可能與測試時缺乏官方文檔、使用方法不當有關,待后續資料完善后再進一步驗證。此外,新功能還包括向量標準化

         通過sp_invoke_external_rest_endpoint和sp_execute_external_script實現外部服務調用和腳本執行,擴展了應用場景,但也帶來了一些性能和調試上的挑戰。同時,SQL Server對LangChain、Semantic Kernel等框架的支持也增強了其生態兼容性。總的來說,SQL Server 2025在功能整合上邁出了重要一步,但實際效果還有待更多文檔支持和優化驗證。

      posted @ 2025-03-05 18:55  CareySon  閱讀(2506)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 曲周县| 国产一区二区三区禁18| 久热伊人精品国产中文| 在线日韩日本国产亚洲| 亚洲欧洲日产国码久在线| 欧美高清狂热视频60一70| 66亚洲一卡2卡新区成片发布| 久久久久久av无码免费网站| 丰满无码人妻热妇无码区| 爽爽精品dvd蜜桃成熟时电影院| 成年午夜免费韩国做受视频| 亚洲综合高清一区二区三区| 五月天天天综合精品无码| 亚洲精品韩国一区二区| 亚洲の无码国产の无码步美| 欧美一区二区三区欧美日韩亚洲| 久久精品免视看国产成人| 国产精品国产亚洲看不卡| 国产亚洲精品久久久久久大师| 亚洲欧洲日韩国内精品| 国产自在自线午夜精品| 中国帅小伙gaysextubevideo| 影音先锋啪啪av资源网站| 久热视频这里只有精品6| 99精品高清在线播放| 国产对白老熟女正在播放| 国产乱码精品一区二区三上| 怡春院久久国语视频免费| 欧美人与动牲交A免费观看| 九九热热久久这里只有精品| 国产精品午夜无码AV天美传媒| 人人做人人妻人人精| 在线播放亚洲成人av| 爆乳日韩尤物无码一区| 欧美熟妇xxxxx欧美老妇不卡| 精品一区二区不卡免费| 人体内射精一区二区三区| 国产高在线精品亚洲三区| 东京一本一道一二三区| 亚洲精品欧美综合二区| 东京热无码国产精品|