Milvus 是一款高性能、高擴(kuò)展性的向量數(shù)據(jù)庫(kù),能夠在各種環(huán)境中高效運(yùn)行,從個(gè)人筆記本到大規(guī)模分布式系統(tǒng)均可輕松適配。它既提供開(kāi)源版本,也可作為云服務(wù)使用。
作為 LF AI & Data Foundation 下的開(kāi)源項(xiàng)目,Milvus 采用 Apache 2.0 許可發(fā)布。其背后的大多數(shù)貢獻(xiàn)者都是高性能計(jì)算(HPC)領(lǐng)域的專(zhuān)家,具備構(gòu)建大型系統(tǒng)和優(yōu)化硬件相關(guān)代碼的豐富經(jīng)驗(yàn)。核心貢獻(xiàn)者包括來(lái)自 Zilliz、ARM、NVIDIA、AMD、英特爾、Meta、IBM、Salesforce、阿里巴巴和微軟等知名企業(yè)的技術(shù)專(zhuān)家。
一、Milvus介紹
文本、圖像和音頻等非結(jié)構(gòu)化數(shù)據(jù)格式各異,并帶有豐富的底層語(yǔ)義,因此分析起來(lái)極具挑戰(zhàn)性。為了處理這種復(fù)雜性,Embeddings 被用來(lái)將非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換成能夠捕捉其基本特征的數(shù)字向量。然后將這些向量存儲(chǔ)在向量數(shù)據(jù)庫(kù)中,從而實(shí)現(xiàn)快速、可擴(kuò)展的搜索和分析。
Milvus 提供強(qiáng)大的數(shù)據(jù)建模功能,使您能夠?qū)⒎墙Y(jié)構(gòu)化或多模式數(shù)據(jù)組織成結(jié)構(gòu)化的 Collections。它支持多種數(shù)據(jù)類(lèi)型,適用于不同的屬性模型,包括常見(jiàn)的數(shù)字和字符類(lèi)型、各種向量類(lèi)型、數(shù)組、集合和 JSON,為您節(jié)省了維護(hù)多個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的精力。
Milvus 提供三種部署模式,涵蓋各種數(shù)據(jù)規(guī)模–從 Jupyter Notebooks 中的本地原型到管理數(shù)百億向量的大規(guī)模 Kubernetes 集群:
- Milvus Lite 是一個(gè) Python 庫(kù),可以輕松集成到您的應(yīng)用程序中。作為 Milvus 的輕量級(jí)版本,它非常適合在 Jupyter Notebooks 中進(jìn)行快速原型開(kāi)發(fā),或在資源有限的邊緣設(shè)備上運(yùn)行;
- Milvus Standalone 是單機(jī)服務(wù)器部署,所有組件都捆綁在一個(gè) Docker 鏡像中,方便部署;
- Milvus Distributed 可部署在 Kubernetes 集群上,采用云原生架構(gòu),專(zhuān)為十億規(guī)模甚至更大的場(chǎng)景而設(shè)計(jì)。該架構(gòu)可確保關(guān)鍵組件的冗余。
二、Milvus速度快嗎
Milvus 從設(shè)計(jì)之初就是一個(gè)高效的向量數(shù)據(jù)庫(kù)系統(tǒng)。在大多數(shù)情況下,Milvus 的性能是其他向量數(shù)據(jù)庫(kù)的 2-5 倍(參見(jiàn) VectorDBBench 結(jié)果)。這種高性能是幾個(gè)關(guān)鍵設(shè)計(jì)決策的結(jié)果:
1、硬件感知優(yōu)化
為了讓 Milvus 適應(yīng)各種硬件環(huán)境,我們專(zhuān)門(mén)針對(duì)多種硬件架構(gòu)和平臺(tái)優(yōu)化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。
2、高級(jí)搜索算法
Milvus 支持多種內(nèi)存和磁盤(pán)索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有這些算法都經(jīng)過(guò)了深度優(yōu)化。與 FAISS 和 HNSWLib 等流行實(shí)現(xiàn)相比,Milvus 的性能提高了 30%-70%。
3、C++ 搜索引擎向量數(shù)據(jù)庫(kù)性能的 80% 以上取決于其搜索引擎
由于 C++ 語(yǔ)言的高性能、底層優(yōu)化和高效資源管理,Milvus 使用 C++ 來(lái)處理這一關(guān)鍵組件。最重要的是,Milvus 集成了大量硬件感知代碼優(yōu)化,從匯編級(jí)向量到多線程并行化和調(diào)度,以充分利用硬件能力。
4、面向列
Milvus 是面向列的向量數(shù)據(jù)庫(kù)系統(tǒng)。其主要優(yōu)勢(shì)來(lái)自數(shù)據(jù)訪問(wèn)模式。在執(zhí)行查詢(xún)時(shí),面向列的數(shù)據(jù)庫(kù)只讀取查詢(xún)所涉及的特定字段,而不是整行,這大大減少了訪問(wèn)的數(shù)據(jù)量。此外,對(duì)基于列的數(shù)據(jù)的操作可以很容易地進(jìn)行向量化,從而可以一次性在整個(gè)列中應(yīng)用操作,進(jìn)一步提高性能。
三、Milvus高可擴(kuò)展性的原因
2022 年,Milvus 支持十億級(jí)向量,2023 年,它以持續(xù)穩(wěn)定的方式擴(kuò)展到數(shù)百億級(jí),為 300 多家大型企業(yè)的大規(guī)模場(chǎng)景提供支持,包括 Salesforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflection 等。
Milvus 的云原生和高度解耦的系統(tǒng)架構(gòu)確保了系統(tǒng)可以隨著數(shù)據(jù)的增長(zhǎng)而不斷擴(kuò)展:
Milvus 本身是完全無(wú)狀態(tài)的,因此可以借助 Kubernetes 或公共云輕松擴(kuò)展。此外,Milvus 的各個(gè)組件都有很好的解耦,其中最關(guān)鍵的三項(xiàng)任務(wù)–搜索、數(shù)據(jù)插入和索引/壓實(shí)–被設(shè)計(jì)為易于并行化的流程,復(fù)雜的邏輯被分離出來(lái)。這確保了相應(yīng)的查詢(xún)節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)和索引節(jié)點(diǎn)可以獨(dú)立地向上和向下擴(kuò)展,從而優(yōu)化了性能和成本效率。
Milvus 支持的搜索類(lèi)型:
- ANN 搜索:查找最接近查詢(xún)向量的前 K 個(gè)向量;
- 過(guò)濾搜索:在指定的過(guò)濾條件下執(zhí)行 ANN 搜索;
- 范圍搜索:查找查詢(xún)向量指定半徑范圍內(nèi)的向量;
- 混合搜索:基于多個(gè)向量場(chǎng)進(jìn)行 ANN 搜索;
- 全文搜索:基于 BM25 的全文搜索;
- Rerankers:根據(jù)附加標(biāo)準(zhǔn)或輔助算法調(diào)整搜索結(jié)果順序,完善初始 ANN 搜索結(jié)果;
- 獲?。焊鶕?jù)主鍵檢索數(shù)據(jù);
- 查詢(xún)使用特定表達(dá)式檢索數(shù)據(jù)。
四、Milvus綜合功能
除了上述主要搜索功能外,Milvus 還提供了一系列圍繞 ANN 搜索實(shí)現(xiàn)的功能,以便您能充分利用其功能。
1、應(yīng)用程序接口和 SDK
- RESTful API(官方)
- PyMilvus(Python SDK)(官方)
- Go SDK(官方)
- Java SDK(官方)
- Node.js(JavaScript)SDK(官方)
- C#(微軟提供)
2、高級(jí)數(shù)據(jù)類(lèi)型
除了原始數(shù)據(jù)類(lèi)型外,Milvus 還支持各種高級(jí)數(shù)據(jù)類(lèi)型及其各自適用的距離度量。
- 稀疏向量
- 二進(jìn)制向量
- 支持 JSON
- 數(shù)組支持
- 距離度量
3、加速
- 搜索算法 Milvus 支持一系列可調(diào)整的索引和搜索算法;
- 分區(qū)和分區(qū)鍵 分區(qū)是 Milvus Collection 的子分區(qū)。你可以選擇一個(gè)標(biāo)量字段作為分區(qū)鍵,以獲得更好的搜索性能;
- 可調(diào)一致性模型 一致性可確保每個(gè) Milvus 節(jié)點(diǎn)或副本在給定時(shí)間寫(xiě)入或讀取數(shù)據(jù)時(shí)擁有相同的數(shù)據(jù)視圖。在 Milvus 中進(jìn)行 ANN 搜索時(shí),可以輕松調(diào)整一致性級(jí)別;
- 高通量數(shù)據(jù)導(dǎo)入 要將大量數(shù)據(jù)導(dǎo)入 Milvus,而不是一個(gè)接一個(gè)地插入,可以考慮使用我們的高通量數(shù)據(jù)導(dǎo)入工具;
- 多租戶(hù)支持 Milvus 實(shí)現(xiàn)了許多面向多租戶(hù)場(chǎng)景的功能,包括 Partition Key、Clustering Key 等。
4、安全和授權(quán)
- 可調(diào)一致性模型 一致性可確保每個(gè) Milvus 節(jié)點(diǎn)或副本在給定時(shí)間寫(xiě)入或讀取數(shù)據(jù)時(shí)擁有相同的數(shù)據(jù)視圖。在 Milvus 中進(jìn)行 ANN 搜索時(shí)可以輕松調(diào)整一致性級(jí)別;
- 數(shù)據(jù)隔離和資源控制 對(duì)于多租戶(hù)場(chǎng)景,數(shù)據(jù)隔離是基本的安全要求。Milvus 實(shí)現(xiàn)了多種功能來(lái)解決您的安全問(wèn)題。
5、人工智能集成
- Embeddings 模型集成 Embedding 模型將非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為其在高維數(shù)據(jù)空間中的數(shù)字表示,以便您能將其存儲(chǔ)在 Milvus 中。目前,PyMilvus(Python SDK)集成了多個(gè)嵌入模型,以便您能快速將數(shù)據(jù)準(zhǔn)備成向量嵌入;
- Reranker 模型集成 在信息檢索和生成式人工智能領(lǐng)域,Reranker 是優(yōu)化初始搜索結(jié)果順序的重要工具。PyMilvus 也集成了幾種 Rerankers 模型,以?xún)?yōu)化初始搜索返回結(jié)果的順序;
- LangChain 和其他人工智能工具集成 在 GenAI 時(shí)代,LangChain 等工具受到了應(yīng)用程序開(kāi)發(fā)人員的廣泛關(guān)注。作為核心組件,Milvus 通常在此類(lèi)工具中充當(dāng)向量存儲(chǔ)。
6、工具和生態(tài)系統(tǒng)
- Attu Attu 是一個(gè)一體化的直觀圖形用戶(hù)界面,可幫助您管理 Milvus 及其存儲(chǔ)的數(shù)據(jù);
- Birdwatcher Birdwatcher 是 Milvus 的調(diào)試工具。使用它連接到 etcd,你可以檢查 Milvus 系統(tǒng)的狀態(tài),或動(dòng)態(tài)配置它;
- Promethus 和 Grafana 集成 Promethus 是 Kubernetes 的開(kāi)源系統(tǒng)監(jiān)控和警報(bào)工具包。Grafana 是一個(gè)開(kāi)源可視化堆棧,可以連接所有數(shù)據(jù)源。您可以使用 Promethus 和 Grafana 作為監(jiān)控服務(wù)提供商,對(duì) Milvus Distributed 的性能進(jìn)行可視化監(jiān)控;
- Milvus 備份 Milvus 備份是一個(gè)允許用戶(hù)備份和恢復(fù) Milvus 數(shù)據(jù)的工具。它同時(shí)提供 CLI 和 API,以適應(yīng)不同的應(yīng)用場(chǎng)景;
- Milvus Capture Data Change (CDC) Milvus-CDC 可以捕獲和同步 Milvus 實(shí)例中的增量數(shù)據(jù),并通過(guò)在源實(shí)例和目標(biāo)實(shí)例之間的無(wú)縫傳輸,確保業(yè)務(wù)數(shù)據(jù)的可靠性,從而輕松實(shí)現(xiàn)增量備份和災(zāi)難恢復(fù);
- Milvus 連接器 Milvus 為您規(guī)劃了一套連接器,以便將 Milvus 與 Apache Spark 等第三方工具無(wú)縫集成。目前,您可以使用我們的 Spark 連接器將 Milvus 數(shù)據(jù)饋送到 Apache Spark 進(jìn)行機(jī)器學(xué)習(xí)處理;
- 向量傳輸服務(wù)(VTS Milvus 提供了一套工具,供你在 Milvus 實(shí)例和一系列數(shù)據(jù)源(包括 Zilliz 集群、Elasticsearch、Postgres (PgVector) 和另一個(gè) Milvus 實(shí)例)之間傳輸數(shù)據(jù)。
更多使用指南可參考:《Milvus教程》
-
廣告合作
-
QQ群號(hào):4114653