
阿里妹導讀
背景
韋伯總結了現代社會的四個本質特徵,其中很重要的一點,現代社會是一個祛魅社會,其本質就是科學性。科學性在於可證偽性,不可證偽的不能稱為科學理論,從而用科學理論驅散了世界的神秘主義。類比於此,現代資料技術最大的特徵也可以說是祛魅,透過資料正規化解除了資料的桎梏,使得應用程式達到了“心無桎梏,身無藩籬”的自在境界。

本文將會介紹現代資料技術如何對資料祛魅,重點不會側重於資料庫技術的演進,而是側重於從應用視角來審視資料庫功能和資料架構的演進。借用時髦的觀點,現代應用的資料正規化是一個從大資料到大模型的資料正規化。
現代應用的資料特徵及其挑戰
現代資料具有4V特性,規模性(Volume)、高速性(Velocity)、多樣性(Variety)、價值低(Value)。規模性表示資料量的爆炸性增長,使得單機資料庫達到效能瓶頸和容量瓶頸;高速性表示資料產生和處理的速度要快,本質是業務系統對資料即時性的訴求;多樣性表示資料型別的多種多樣,從結構化資料、到半結構化資料和非結構化資料,本質是業務系統對異構資料儲存的訴求;價值低表示資料的總體價值大,但價值密度低,本質是業務系統對資料成本和資料分析提出的訴求。

資料4V特性對企業資料基礎設施帶來了很大的挑戰,傳統資料架構很難應對這些挑戰。企業必須升級其資料基礎設施以能夠很好的儲存、檢索和分析現代資料,從而釋放資料的商業價值。
現代應用對資料技術提出瞭如下挑戰:
-
資料儲存:需要能夠應對資料海量、資料多樣性的儲存挑戰; -
資料檢索:需要能夠應對異構資料的檢索挑戰; -
資料分析:需要能夠應對資料量大及價值密度低的分析挑戰;
下面章節將嘗試回答現代資料架構如何解決以上挑戰,如果本次沒講清楚,且聽下回補充。
資料儲存的挑戰 —— 從資訊化時代到大資料時代
傳統關係型資料庫
資料庫作為應用程式儲存和檢索資料的核心工具,在資訊化時代得到了蓬勃發展。關係模型由於其易理解性和完備的數學理論基礎從層次模型和網狀模型中脫穎而出,成為傳統資料庫的主流資料模型。關係模型將現實世界中的實體抽象為一張張表格,透過表格之間的關聯關係來描繪實體間的聯絡。在 Codd 發表了《A Relational Model of Data for Large Shared Data Banks》論文後,誕生了一系列偉大的關係型資料庫產品,例如 Oracle、MySQL、SQLServer 等。關係型資料庫的最大價值在於將應用程式碼和資料庫物理儲存結構解耦,這種耦合在論文中被稱為“Data Dependencies”。
關係型資料庫是一項非常成功的資料管理技術,以行和列的方式組織資料,ACID 和 SQL 是其最顯著的特性。ACID 提供了資料持久化、資料完整性、事務等特性。SQL 是基於關係代數的查詢語言,具有複雜語義的表達能力,能夠提供複雜的查詢能力(例如 join、聚合、排序等),併為業界廣泛接受和運用。
NoSQL 的興起
隨著應用資料量的爆炸式增長和應用模型的複雜化,傳統關係型資料庫遇到了諸多侷限和限制:應用開發者需要為海量資料量進行架構升級,需要處理業務資料與資料庫關係模型日益不匹配的問題。這些侷限與限制引入了極大的架構升級成本和業務邏輯複雜度,應用開發者將大量精力消耗在業務邏輯以外的地方,這些額外消耗使得應用架構和資料庫產品發生了轉變。應用架構方面,由資料作為整合點,轉變為將資料封裝到應用程式中並以服務作為整合點,也就是從資料整合到服務整合的轉變。資料庫產品方面,促進了資料模型的轉變,併產生了諸多不同於傳統關係型資料庫的 NoSQL 產品。
2010 年興起的的 NoSQL 運動就是資料模型轉變的過程,起源於兩篇論文,分別是 Amazon's Dynamo 和 Google's BigTable。前者由 Amazon 建立,用於其內部的收藏夾場景,在資料中心故障情況下依然能夠提供寫入和讀取服務,是一個分散式、內建容錯能力的 KV 儲存,適用於 OLTP 場景。後者由 Google 建立,用於網路爬蟲場景,寫入抓取到的海量網頁資料,然後再由 MapReduce 建立索引,BigTable 提供了高效的 scan 能力,原生支援 MapReduce 計算框架,適用於大資料的即時查詢和分析場景。
Dynamo 是一個內建容錯能力的分散式KV儲存系統,面向只需主鍵訪問的業務場景,使用一致性 hash 將資料按主鍵分佈和複製到多個節點上。透過資料版本和應用輔助的方式控制資料訪問的一致性,從而提供了鬆散的一致性語義 — 最終一致性。綜上,Dynamo 透過在某些容災場景下(網路分割槽或伺服器故障)犧牲資料一致性的方式提供了 “always writeable” 的服務可靠性,這就是 Dynamo 要解決的 Amazon 電商業務遇到的大規模叢集的可靠性挑戰,從而可以服務於 mission-critical 的核心業務場景。
BigTable 是一個管理結構化資料的分散式儲存系統,它維護了稀疏的、分散式的、持久化的、多維的、有序健值對,並提供了多種資料訪問的模式(相比而言,Dynamo 只提供了主鍵訪問的模式)。BigTable 支援單行事務,從而允許對單行資料執行原子的“讀-修改-寫”的序列操作和單行多列操作。BigTable 將各列資料排序儲存,並按範圍分佈到多個節點上,透過 lsm-tree 提供極高的寫入吞吐量,透過 COW 技術提高讀寫效能,透過自動分割槽分裂實現容量的水平伸縮性。綜上,這就是 BigTable 要解決的大規模資料量場景下儲存系統的擴充套件性挑戰,從而可以可靠的在數千臺機器上處理 PB 級的資料。
Dynamo 和 BigTable 都是為了解決各自業務場景所遇到的資料挑戰而提出的,兩者都有著豐富的設計思路和技術實現。這些設計和實現為後續的很多 NoSQL 產品所借鑑,並經常搭配使用,從而解決業務場景的各種挑戰。例如 HBase 借鑑了 BigTable 的資料模型、Cassandra 借鑑了 BigTable 的資料模型和 Dynamo 的分散式設計。

主要的非關係模型有KV模型、寬表模型、文件模型、圖模型、時序模型等:
-
KV模型:主要特徵是將每個資料值與唯一的鍵關聯起來,適用於OLTP場景,例如 Amazon's DynamoDB; -
寬表模型:主要特徵在於動態列、多版本、TTL,其自動分裂的特性和基於lsm-tree的儲存引擎提供了強大的水平伸縮性和寫入吞吐量,特別適用於稀疏資料集的海量寫入和查詢場景。業界主流產品是 BigTable 和 HBase,HBase 是 BigTable 的開源實現; -
文件模型:主要特徵在於提供了最接近於真實的業務物件模型的 JSON/BSON 儲存格式,是一種對開發非常友好的儲存模型。業界主流產品是 MongoDB,其與 Express、Angular、Node.js 等開源技術棧一起構成了 MEAN Stack; -
圖模型:主要特徵在於提供了點和邊的儲存語義,可以高效執行跨節點和邊的網路查詢,易於描述實體間的關係。業界主流產品是 Neo4J; -
時序模型:主要特徵在於提供了時間序列資料的建模能力,將時序資料抽象為指標、標籤、時間戳三個維度。業界主流產品是 InfluxDB、Prometheus、OpenTSDB 等,InfluxDB 與 Telegraf、Chronograf、Kapacitor 等元件一起組合為 TICK Stack;
NoSQL 本質上舍棄了傳統關係型資料庫的一些功能,從而可以實現更加靈活的特性。這些豐富的靈活的特性簡化了應用程式的資料操作,極大簡化了業務邏輯。NoSQL 並不是某種特定的資料庫產品,甚至沒有一個明確的定義,而是一種區別於傳統關係型資料庫的資料模型和資料管理模式,社群賦予了其更包容和多樣化的含義。借用《NoSQL Distilled》中總結的 NoSQL 的共同特徵:
-
Not using the relational model -
Running well on clusters -
Open-source -
Built for the 21st century web estates -
Schemaless
在以 Spanner、OceanBase 為代表的 NewSQL 出現後,關係型資料庫也能提供非常好的水平擴充套件性,關係型資料庫與 NoSQL 之間的水平擴充套件性差異大幅縮小。但靈活的資料模型依然是 NoSQL 的獨特價值。
從應用程式視角,NoSQL 等同於 “Non Relational” 或者 “Non Transactional”,意味著靈活的資料模型和訪問介面、可定義的放鬆的資料一致性,從而提供了關係型資料庫以外的另一種選擇。且其運行於分散式叢集之上,天然具備極好的水平擴充套件性,能夠更好的適用於大資料場景。資料庫產品面向 OLTP 業務需要提供的特性可以總結為三類:ACID、水平擴充套件性、資料模型靈活性,NoSQL 和 關係型資料庫各有擅長:

因此,關係型資料庫與 NoSQL 具備非常好的特性互補,應用程式往往搭配使用並形成了標準的資料架構。關係型資料庫提供 ACID 能力,保證資料永續性和資料完整性,用於 mission-critical 的關鍵業務場景。NoSQL 提供水平擴充套件性和靈活資料模型,用於創新場景和大資料場景。兩者間的資料劃分,可以由應用程式分別寫入,也可以透過 event stream/change stream 的方式從關係型資料庫流向 NoSQL。
NoSQL 對於應用程式的主要價值:
-
更靈活的資料模型以提升研發效率:應用開發者的很大一部分精力在於將業務資料的記憶體結構對映為傳統資料庫的關係模型,而 NoSQL 提供了諸多可以直接表徵業務資料的資料模型,極大簡化了業務邏輯;
-
更優的資料處理規模和效能以簡化應用架構:隨著業務的發展,應用程式需要處理更多的資料,需要更快的處理資料,從而讓資料更有價值。在傳統資料庫上處理,會帶來更多的應用開發成本和硬體成本,甚至很難搞定,而 NoSQL 被設計為在大規模叢集上執行,從而可以很好的應對此類挑戰;
NoSQL 的資料正規化
NoSQL 的興起使得業務資料的建模能力得到了加強,使得業務資料不再被其儲存形式束縛。NoSQL 與關係資料庫一起構建了更立體的資料架構,使得現代應用解除了傳統關係模型的侷限性,更好的專注於業務邏輯。
Polyglot Persistence
關係型資料庫對應用程式提供了非常關鍵的 ACID 能力,使得資料可以安全的完整的持久化,可以安全的併發訪問。但關係型資料庫並不能適用於所有的企業資料和場景,因此應用程式往往同時使用 NoSQL 應對不同的資料儲存需求。兩者共同構建了企業線上業務的資料架構 —— Polyglot Persistence,應用程式使用多種資料庫產品處理不同型別資料,從而在面臨具體資料時可以選擇最合適的產品。Polyglot Persistence 非常適合於複雜應用,從而為各種業務資料選擇最合適的資料模型。Polyglot Persistence 在提供便利性的同時也引入了架構複雜度,需要在收益和複雜度之間做好權衡。
以網際網路業務為例,不同型別的業務資料有著各自最合適的資料庫產品。交易域業務的資料,模式基本固定,且資料一致性要求很高,非常適合由關係型資料庫提供服務,我們會選擇 OceanBase;客戶域業務的資料,一般跟使用者ID直接關聯,且是一個典型的讀多寫少的場景,非常適合由 KV資料庫提供服務,我們往往選擇 TBase;風控域業務的資料,模式靈活、請求量大、且對資料即時性和查詢效能要求很高,非常適合由寬表資料庫提供服務,我們往往選擇 HBase。

CQRS
Polyglot Persistence 是一種資料職責分離的正規化,為不同的資料型別選擇最合適的資料庫產品。另一種資料職責分離的正規化是 CQRS(Command Query Responsibility Segregation),將寫入操作和讀取操作分開。寫入操作(Command)透過規範化的關係模型來提供,從而保證資料完整性和資料一致性。讀取操作(Query)透過非規範化的資料模型來提供,從而可以獲得靈活性和極致效能。兩者之間的資料透過非同步機制保持最終一致性,可以透過應用程式的非同步訊息,也可以透過資料庫系統的 CDC(Change Data Capture)機制。

以某線上業務為例,該業務透過 MsgQueue 訂閱上游業務的事件訊息,並把事件資料寫到關係型資料庫保證資料持久化。然後再透過訂閱關係型資料庫的 change stream,構建為圖模型的關係資料後寫入圖資料庫,圖資料庫提供關係資料的查詢服務。

大資料分析與服務
現代應用有著資料即時性的需求,需要即時對海量資料進行分析,從而提供更有價值的資料檢視,幫助快速決策。現代資料的4V特性促進了即時資料分析架構的演進,典型的分析技術有 Lambda 架構、HTAP、HSAP 等,代表著若干著不同的設計理念和適用場景。Lambda 架構是一種大資料分析與服務正規化,將歷史資料的分析和近期資料的分析分別交由不同的系統實現。歷史資料的分析由專門的離線環境承擔 —— 資料倉庫或者大資料系統,離線環境的資料由線上系統的資料匯入,分析產生的資料迴流線上系統供線上業務訪問,往往由擅長高吞吐高效能的點查負載的 NoSQL 承擔。由於資料匯入、資料計算、資料迴流都需要時間,離線環境的資料不是即時的,因此線上系統往往會搭配一套即時計算引擎做近期資料的即時分析,或者直接由線上資料庫承擔輕量 AP 負載。Lambda 架構使得應用程式能夠對海量資料進行即時分析,且提供面向線上業務的優異的訪問耗時。

以某線上業務為例,當用戶發生金融行為時,需要基於該使用者的歷史行為資料和本次行為資料進行即時分析並作出風險決策,其風險決策的資料分別來自於離線分析鏈路和即時分析鏈路,是個典型的 Lambda 架構。

資料檢索的挑戰 —— 從結構化時代到非結構化時代
傳統檢索技術
傳統資料庫儲存的是標量資料,標量原來是物理上的概念,指只有大小而沒有方向的物理量,在資料庫這裡用標量來表示一類資料型別,例如數字型、字元型、日期型、布林型,針對該類資料型別可以使用精確匹配的方式進行查詢,例如傳統關係資料庫的 SQL,該檢索方式稱為標量查詢。
全文檢索是指在非結構化的文字資料中基於特定單詞或者文字在全文範圍內進行檢索。常見的搜尋引擎就是對全文檢索技術的實現,例如 Lucene、Solr、ElasticSearch 等。我們在網路上使用搜索引擎檢索特定內容的資料也是用到了全文檢索技術。全文檢索是一種非常重要的資訊檢索技術,可以幫助我們對文字資料進行檢索。
標量查詢和全文檢索本質上是關於標量資料或關鍵字的精確匹配,其查詢結果與輸入目標之間是完全相同的關係。這與我們下文即將介紹的面向非結構化資料的向量檢索的近似匹配有著截然不同的區別。
資料庫索引是一種用於加速資料查詢的資料結構。計算機科學有著豐富的資料結構幫助快速查詢,例如紅黑樹、跳錶、點陣圖、布隆過濾器等。對於標量查詢和全文檢索,常見的索引型別有 B+樹/B樹、hash樹、倒排索引:
-
B+樹:是一種 N 叉排序樹,每個節點通常由多個子節點,葉節點儲存資料,相鄰葉節點透過指標相連,葉節點的資料按序儲存。B+樹支援兩種查詢方式:從根節點開始一直到葉節點、透過葉節點的指標順序查詢。B+樹與B樹的最大區別是B樹的每個節點都可以儲存資料,而B+樹只有葉節點儲存資料,因此B+樹的範圍查詢效率更高。B+樹適用於點查和範圍查詢的場景,例如資料庫的資料索引和檔案系統的元資料索引。MySQL 和 NTFS 採用了B+樹,MongoDB 和 ETCD 採用了B樹。
-
Hash樹:是一種儲存了索引鍵到儲存位置的對映的資料結構,透過雜湊函式直接定位到資料儲存位置,理想情況下僅需要一次比較就能定位到資料,避免了類似於 B+樹結構的多次比較,從而提高查詢效率。Hash樹適用於需要極致點查效能的場景,不支援範圍查詢,存在雜湊衝突和記憶體消耗的侷限性。
-
倒排索引:是一種儲存了單詞到文件的對映的資料結構,可以根據單詞快速獲取到包含該單詞的文件列表。倒排索引適用於全文檢索的場景,能夠實現複雜的全文查詢功能和文件相關性計算。

非結構化資料的機遇和挑戰
全球資料量急劇增長,其中超過80%的資料都會是處理難度較大的非結構化資料,如文件、文字、圖形、影像、音訊、影片等,非結構化資料在大資料時代的重要地位已成為共識。
傳統資料庫的標量查詢解決了結構化資料的檢索問題,但非結構化資料不遵循傳統資料庫的資料模型,因此傳統資料庫的檢索方式無法處理該類資料,使得企業難以分析非結構化資料。根據調查顯示,極少數公司能夠有效利用非結構化資料,而非結構化資料往往能夠提供更為全景化的檢視和整體化的理解,因此挖掘非結構化資料中的資訊對於企業發展至關重要,能夠帶來更大的機遇。
非結構化資料的語義表徵
由於資料圈中的資料大部分都是非結構化資料,有效分析非結構化資料將會給企業帶來巨大的機遇。我們雖然能夠高效儲存非結構化資料,例如檔案儲存、物件儲存等,但計算機尚不能按照人的方式來理解圖片或者文字中的語義資訊。因此將非結構化資料中的語義資訊轉換為計算機可理解的方式是有效分析的第一步。
現代 AI/ML 技術的發展提供了一種從非結構資料中提取語義資訊的方式 —— embedding。區別於前面提到的標量型別,embedding 是一種向量型別 —— 由多個數值組成的陣列,因此 embedding 又被稱為向量或者向量。embedding 是非結構化資料的數值表示,能夠將非結構化資料對映到其“含義”空間,使得計算機能夠理解非結構化資料的語義資訊。

embedding 是區別於傳統資料庫(包括關係型和 NoSQL)的嶄新領域,透過 embedding model 將非結構化資料轉換為 embedding。embedding model 本質上是一種資料壓縮技術,透過 AI/ML 技術對原始資料進行編碼,使用比原始資料更少的位元位來表示資料。壓縮後的資料就是原始資料的“隱空間表示”,壓縮過程中,外部特徵和非重要特性被去除,最重要的特徵被儲存下來,隨著資料維度的降低,本質上越相似的原始資料,其隱空間表示也越相近。因此,隱空間是一個抽象的多維空間,外部物件被編碼為該空間的內部表示,被編碼物件在外部世界越相似,在隱空間中就越靠近彼此。基於以上理論基礎,我們可以透過 embedding 之間的距離來衡量其相似程度。
資料的隱空間表示包含了原始資料的所有重要特徵,學習原始資料的特徵並簡化表示的過程,稱為表徵學習(Representation Learning)。表徵學習將原始輸入資料對映到隱空間表示,以便更有效的分析和處理,並可以發現原始資料中的隱藏模式和結構。表徵學習包括從原始資料中發現特徵並表示的一組技術,現代技術主要是深度學習。針對不同的非結構化資料,業界有著豐富的深度學習模型,例如用於文字處理的 Word2Vec、Universal Sentence Encoder、GLoVE,用於圖片處理的 ResNet50、MobileNet、CLIP,用於影片處理的 OpenCV,用於音訊處理的 PANNs 等。

因此,embedding 是非結構化資料的統一語義表徵,是現代 AI/ML 的通用語言。有了非結構資料的語義資訊的數值表示,接下來我們將直面第二個挑戰:如何構建高效的 embedding 檢索服務 —— 向量檢索服務。
非結構化資料的檢索
向量檢索服務是專門儲存、索引和查詢由機器學習模型生成的非結構化資料的向量表徵的服務。本節我們將介紹向量檢索服務的核心技術和產品形態。
區別於標量資料的精確匹配,向量檢索是一種基於距離函式的相似度檢索,由於向量間的距離反映了向量的相似度,因此透過距離排序可以查詢最相似的若干個向量。向量檢索演算法有 kNN 和 ANN 兩種。
-
kNN(k-Nearest Neighbors)是一種蠻力檢索方式,當給定目標向量時,計算該向量與候選向量集中所有向量的相似度,並返回最相似的 K 條。當向量庫中資料量很大時 kNN 會消耗很多計算資源,耗時也不理想。
-
ANN ( Approximate Nearest Neighbor)是一種更為高效的檢索方式,其基本思想是預先計算向量間的距離,並將距離相近的向量儲存在一起,從而在檢索時可以更高效。預先計算就是構建向量索引的過程,向量索引是一種將向量資料組織為能夠高效檢索的結構。向量索引大幅提升了檢索速度,但返回的是近似結果,因此 ANN 檢索會有少量的精度犧牲。

向量的相似性度量基於距離函式,常見的距離函式有歐式距離、餘弦距離、點積距離,實際應用中選擇何種距離函式取決於具體的應用場景。
-
歐式距離衡量兩個向量在空間中的直線距離。歐式距離存在尺度敏感性的侷限性,透過歸一化等技術可以有效降低尺度敏感性對相似度的干擾。歐式距離適用於低維向量,在高維空間下會逐漸失效。
-
餘弦距離衡量兩個向量之間夾角的餘弦值。餘弦距離存在數值敏感性的侷限性,因為其只考慮了向量的方向,而沒有考慮向量的長度。餘弦距離適用於高維向量或者稀疏向量。
-
點積距離透過將兩個向量的對應分量相乘後再全部求和而進行相似度衡量,點積距離同時考慮了向量的長度和方向。點積距離存在尺度敏感性和零向量的侷限性。
對於向量檢索,常見的 ANN 索引型別有 IVF、HNSW、PQ、IVFPQ
-
IVF(lnverted File):將候選向量集基於 k-Means 進行聚類,類簇數在建立索引時透過 nlist 引數指定。檢索時遍歷與目標向量距離最近的若干個類簇下的所有候選向量並計算目標向量與候選向量之間的距離。遍歷的類簇數透過引數 nprobe 指定,擴大 nprobe 可以提高檢索精度,但會增加耗時。
-
HNSW(Hierarchical Navigable Small World):一種類似於跳錶的資料結構,最底層包含候選向量集中所有的向量,層次向上節點數逐漸減少,遵循指數衰減的機率分佈,節點加入時依據機率函式得出最高投影到第幾層,該層往下每層都包含該節點。檢索時從最高層的進入點出發,搜尋距離目標向量最近的點,收斂後進入下一層繼續搜尋,直至到達最底層。
-
PQ:一種量化技術,將高維向量切分為若干段維數相等的子向量(由引數 M 指定),然後對所有候選向量(假設總數為 N )的相同段的子向量進行聚類,最後把每個候選向量用其每段子向量的簇心來表示,從而將高維向量對映為 M 個簇心的 ID,透過該方式能夠大幅最佳化記憶體。查詢時將目標向量同樣切分為 M 個子向量,並計算每個子向量與對應段所有簇心的距離,距離值用於後續計算相似度。衡量目標向量與某個候選向量的相似度時,查詢目標向量每個子向量與候選向量對應段對映到的簇心的距離並求和,總和即為兩個向量間的距離。PQ 對向量查詢進行了最佳化,將一個 N 次高維向量計算最佳化為 M 次低維向量計算及 M*N 次查表操作,從而大幅最佳化查詢耗時和記憶體消耗。
-
IVFPQ:PQ 對衡量相似度的計算過程進行了最佳化,如果候選向量集很大,查詢效率依然不夠。因此可以將 IVF 與 PQ 技術相結合,首先透過 IVF 技術最佳化為僅需選取候選向量集的一部分進行比對,再透過 PQ 技術最佳化衡量目標向量與候選向量之間相似度的過程。IVFPQ 使得查詢時需要比對的候選向量個數大幅減少,也使得每次比對的計算消耗和記憶體消耗大幅最佳化,從而獲得查詢效率的提升。

基於業界的相關論文及工程經驗產出的最佳實踐:
-
kNN 是蠻力檢索方案,適用於對檢索精度較高的業務場景,例如生命科學、金融等,kNN 也可以用來衡量 ANN 演算法的召回率;ANN 是近似檢索方案,犧牲一定的檢索精度以加速檢索,適用於對即時性要求較高的業務場景,例如流計算、即時推薦等,ANN 演算法有 IVF、HNSW、IVFPQ 等。
-
IVF 和 HNSW 是兩種常用的 ANN 索引演算法,前者基於聚類演算法,後者基於圖演算法。在 topK 比較小的情況下(數百級別),HNSW 的召回率較高。在 topK 比較大的情況下(數千級別),IVF 的召回率較高。因此需要基於場景選擇合適的索引演算法,例如推薦場景選擇 HNSW 比較合適,廣告場景選擇 IVF 比較合適。
-
PQ 和 IVFPQ 是基於壓縮的索引演算法,使用 PQ 技術對向量進行有失真壓縮,以節省記憶體。PQ 是基於壓縮的蠻力檢索演算法,IVFPQ 是基於壓縮的近似檢索演算法。
以上我們介紹了向量檢索服務的核心技術,包括檢索演算法、相似度度量演算法、索引構建演算法。應用程式在實際運用中並不需要從頭構建,業界有著豐富的支援向量檢索的產品,主要由三種產品形態,分別是向量檢索庫、專用向量資料庫、支援向量檢索的普通資料庫。
最後來個總結,向量檢索服務基於 AI/ML 技術計算目標向量與候選向量集中向量的相似度,並返回最相似的若干條向量。ANN 演算法提升了查詢速度,使得查詢耗時對應用程式更友好。ANN 演算法在大幅提升查詢速度的同時,有少量的查詢精度犧牲,如果對查詢精度要求更高,可以選擇 kNN 演算法查詢。上節介紹的 embedding 解決了非結構化資料的“語義”難題,本節介紹的向量檢索服務解決了 embedding 的“檢索”難題,兩者一起提供了區別於傳統資料庫的面向非結構化資料的檢索方案。
非結構化資料檢索的資料正規化
現代 AI 技術的發展使得非結構化資料的檢索能力得到了空前加強,進而使得現代應用解除了非結構化資料的桎梏,應用程式有了更多基於非結構化資料的資料正規化。
混合檢索
傳統檢索技術和麵向非結構化資料的向量檢索技術是兩種完全不同的檢索技術:
-
傳統檢索技術:包括傳統資料庫的標量查詢和全文檢索。標量查詢提供了面向標量欄位的過濾功能,是一種精確查詢。全文檢索提供了面向文字資料全文的基於單詞或者文字的精確匹配功能,相對於標量查詢,全文檢索能夠容忍拼寫錯誤、同義詞、字首查詢、模糊查詢等問題,從而允許使用不完整的資訊進行檢索。全文檢索雖增加了查詢的模糊性,但本質上依然是精確查詢,因此傳統檢索技術最本質的特徵在於“精確性”。
-
向量檢索技術:向量檢索是一種 AI 驅動的檢索方式,提供了面向非結構化資料的語義檢索能力,能夠用人腦理解知識的方式去檢索資料,其最本質的特徵在於“語義性”,是一種“相似性”檢索。
傳統檢索技術善於精確查詢,但缺乏語義理解。而向量檢索技術能夠很好的識別使用者意圖,但在精確檢索方面召回率大機率不如傳統檢索技術,兩種技術都不完美。對於特定的檢索場景,兩者結合能夠提供更準確的檢索結果。

混合檢索正是將傳統檢索技術與向量檢索技術相結合的藝術,從而可以博採眾長,相輔相成。它將傳統檢索技術的按關鍵字檢索與向量檢索技術的按語義檢索的能力相結合,提升了最終結果的準確性與全面性,更適合面向現代多元化資料的檢索場景。
混合檢索有效的結合了多種檢索技術,以提升檢索召回率,但提出了對多個結果集重新排序的難題。全文檢索返回的結果集基於TF-IDF、BM25等文件相關性評分排序,向量檢索返回的結果集基於距離函式的相似性評分排序,應用程式需要對兩者的結果進行重新排序(Re-ranking)。重新排序指將來自多種檢索技術的有序結果集進行規範化合併,形成同一標準的單一有序結果集。單一有序結果集能夠更好的供下游系統處理和分析。常見的重新排序演算法有 RRF、RankNet、LambdaRank、LambdaMART 等。

檢索技術是現代計算機科學解決的主要課題之一,傳統的檢索技術主要基於倒排索引技術,應用程式可以基於此技術構建全文檢索的功能。現代 AI 技術的發展使得檢索技術的能力得到了空前加強,能夠對更多的非結構化資料進行更強大的語義檢索,檢索技術徹底解除了非結構化資料的桎梏。應用程式在檢索技術紅利的加持下得到了功能加強,或者從零到一破土而生,例如搜尋引擎、推薦系統、問答系統等,能夠處理更加多樣化的非結構化資料。
RAG
RAG (Retrieval-Augmented Generation)是檢索技術與大模型技術相結合的資料正規化 —— 在知識庫中檢索與使用者查詢最相關的內容,然後將其提供給大模型用於知識生成,使得大模型能夠利用最新資料和私域資料。如果沒有 RAG,那麼大模型的知識生成就只能完全基於預訓練的資料,會面臨“幻覺”、缺乏特定領域知識或私域知識、大模型的資料新鮮度不夠等問題。Fine-tuning 也能部分解決這些問題,但召回率不夠,且代價高昂。RAG 非常完美的解決了這些問題,其本質上是一個私有搜尋引擎,使得大模型生成的知識更準確更新鮮,使得企業能夠基於私域資料建立大模型應用,使得能夠建立垂直行業的大模型應用。
RAG 經業界不斷探索,架構經過多輪調整,最完整的架構如下圖所示,其結合了關鍵詞檢索、圖檢索、語義檢索等多種檢索技術,及重新排序演算法,從而提供更準確的檢索結果和生成結果。應用程式在實際運用中並不需要完整搭建這個腳手架,社群有著豐富的框架直接使用,例如 LangChain、LlamaIndex 等。

https://github.com/langchain-ai/rag-from-scratch/blob/main/README.md
VectorDB 就像海馬體,負責資訊提取。LLM 就像大腦,負責新資訊的生成。兩者解決了如何基於已有知識生成新知識的問題,而 Agent 負責執行,從而對物理世界產生實際影響。LLM、VectorDB、Agnet 是 AI native 應用的智慧基礎設施,VectorDB 是其中最重要的組成部分。
總結:從大資料到大模型
本文的副標題是“從大資料到大模型”,最後再點下題。
資訊化時代定義了關係型資料庫的資料正規化。關係型資料庫的本質特徵在於 ACID,對應用程式提供了資料持久化、資料完整性、事務等應用語義,使得應用程式可以將資料管理的職責完全交給資料庫。更重要的是,相比於層次模型和網狀模型,關係模型的存取路徑對應用透明,從而使得應用程式碼從具體的資料格式中解耦出來,極大簡化了應用開發過程。關係型資料庫是資訊化時代的資料正規化,解除了資料儲存的桎梏,推動了資訊化時代的蓬勃發展。
谷歌的老三篇 GFS、Map Reduce、BigTable 開啟了大資料時代,大資料時代定義了 NoSQL 的資料正規化。傳統資料庫在大資料場景下面臨水平擴充套件性不夠、資料模型單一等侷限性,而 NoSQL 彌補了關係型資料庫的這些不足。NoSQL 首先提供了非常好的水平擴充套件性,能夠可靠的在數千臺機器上處理 PB 級的資料;其次提供了靈活的多樣化的資料模型,使得應用程式能夠所見即所得的將業務資料對映為資料庫的儲存模型。獲得擴充套件能力的同時,可能會犧牲一定的資料一致性,因此往往與關係型資料庫搭配使用。NoSQL 是大資料時代的資料正規化,解除了資料規模和業務資料複雜性的桎梏,推動了網際網路時代及移動網際網路時代的發展。
2022年底,OpenAI 的大模型 ChatGPT 正式釋出,開啟了生成式 AI 時代,生成式 AI 時代定義了 LLM + VectorDB 的資料正規化。傳統資料庫擅長處理結構化資料,面對非結構化資料時心有餘而力不足。LLM + VectorDB 提供了非結構化資料的語義理解和檢索能力,而資料圈超過80%的資料都是非結構化資料,從而使得這些資料中的資訊得以釋放變成實際的生產力。LLM + VectorDB 是生成式 AI 時代的資料正規化,解除了非結構化資料的桎梏,推動了 AI navive 應用的發展。
即時同步RDS與Redis構建快取一致性
透過DTS資料訂閱能力,使用者可以即時訂閱RDS日誌資料變更,並將其寫入Redis以實現快取資料的更新,可以實現MySQL與Redis之間的快取同步一致性。
點選閱讀原文檢視詳情。