Milvus提供向量數據庫管理功能,可以幫助用戶在軟件上管理數據,您可以為自己的業務創建數據管理方案,可以在軟件設置,可以創建數據索引方案,可以對標量數據過濾,讓用戶可以更方便管理數據,各方便處理TB級別的數據文件;軟件基于Python開發,您可以通過代碼的方式建立新的向量,可以通過代碼創建新的分區,每個都可以創建分區管理數據,方便以后建立數據索引,每個都可以創建對應的索引內容,為查詢和轉換數據提供方便,如果你需要建立向量類型的數據庫就可以通過Milvus軟件開發!
Milvus軟件功能
1、全面的相似度指標
Milvus 支持各種常用的相似度計算指標,包括歐氏距離、內積、漢明距離和杰卡德距離等。您可以根據應用需求來選擇最有效的向量相似度計算方式。
2、業界領先的能
Milvus 基于高度優化的 Appximate Nearest Neighbor Search (ANNS) 索引庫構建,包括 faiss、 annoy、和 hnswlib 等。您可以針對不同使用場景選擇不同的索引類型。
3、動態數據管理
您可以隨時對數據進行插入、刪除、搜索、更新等作而無需受到靜態數據帶來的困擾。
4、近實時搜索
在插入或更新數據之后,您可以幾乎立刻對插入或更新過的數據進行搜索。Milvus 負責保證搜索結果的準確率和數據一致。
5、高成本效益
Milvus 充分利用現代處理器的并行計算能力,可以在單臺通用上完成對十億級數據的毫秒級搜索。
6、支持多種數據類型和高級搜索
Milvus 的數據記錄中的字段支持多種數據類型。您還可以對一個或多個字段使用高級搜索,例如過濾、排序和聚合。
7、高擴展和可
您可以在分布式環境中部署 Milvus。如果要對集群擴容或者增加可,您只需增加節點。
8、云原生
您可以輕松在公有云、私有云、或混合云上運行 Milvus。
9、簡單易用
Milvus 提供了易用的 Python、Java、Go 和 C++ SDK,另外還提供了 RESTful API。
Milvus軟件特色
一、異構計算優化了基于 U 搜索向量和建立索引的能。
可以在單臺通用上完成對 TB 級數據的毫秒級搜索。
動態數據管理。
二、支持主流索引庫、距離計算方式和監控工具集成了 Faiss、NMSLIB、Annoy 等向量索引庫。
支持基于量化的索引、基于圖的索引和基于樹的索引。
相似度計算方式包括歐氏距離 (L2)、內積 (IP)、漢明距離、杰卡德距離等。
Pmetheus 作為監控和能指標存儲方案,Grafana 作為可視化組件進行數據展示。
三、近實時搜索插入 Milvus 的數據默認在 1 秒后即可被搜索到。
四、標量字段過濾 (即將上線)支持向量和標量數據。
可以對標量數據進行過濾,增強搜索的靈活。
Milvus教程
Mishards 是什么Mishards 是一個用 Python 開發的 Milvus 集群分片中間件,其內部處理請求轉發、讀寫分離、水平擴展和動態擴容,為用戶提供內存和算力可以擴容的 Milvus 實例。
Mishards 簡單工作原理Mishards 負責將上游請求拆分,并路由到內部各細分子服務,最后將子服務結果匯總,返回給上游。
Mishards 目標場景
Mishards 適合大數據規模下的搜索場景。那么,怎么判斷數據規模的大小呢?這個問題沒有標準答案,因為這取決于實際生產環境中使用的硬件資源。這里提供一個簡單的判斷數據規模的思路:
1、如果你不在意延遲,當數據規模大于單臺上硬盤的可用容量時,你可以認為這種場景具有大的數據規模。例如,每次批處理 5000 條查詢請求,服務端計算時間已經大于數據從硬盤到內存的加載時間,此時將硬盤的可用容量作為判斷數據規模的標準。
2、如果你在意延遲,當數據規模大于單臺上的可用內存時,你也可以認為這種場景具有大的數據規模。
基于 Mishards 的集群方案總體架構
主要構件服務發現:獲取讀寫節點的服務地址。
負載均衡器
Mishards 節點:無狀態, 可擴容。
Milvus 寫節點:單節點,不可擴容。為避免單點故障,需為該節點部署高可用 HA 方案。
Milvus 讀節點:有狀態,可擴容。
共享存儲服務:Milvus 讀寫節點通過共享存儲服務共享數據,可選擇 NAS 或 NFS。
元數據服務:目前只支持 MySQL。生產環境下需要部署 MySQL 高可用方案。
Mishards 配置全局配置
元數據元數據記錄了底層數據的組織結構。在分布式系統中,Milvus 寫節點是元數據唯一的生產者,而 Mishards 節點、Milvus 寫節點和讀節點都是元數據的消費者。目前版本的 Milvus 只支持 MySQL 和 SQLite 作為元數據的存儲后端。
在分布式系統中,元數據的存儲后端只能是 MySQL。
服務發現服務發現為 Mishards 提供所有 Milvus 讀寫節點的地址。Mishards 定義了相關的服務發現接口 IServiceRegistryPvider,并通過插件模式提供了擴展的可能。目前默認提供了兩種插件:KubernetesPvider 對應 Kubernetes 集群;StaticPvider 對應靜態配置。你可以仿照這兩種插件的實現,定制自己的服務發現插件。
鏈路追蹤分布式系統錯綜復雜,請求往往會分發給內部多個服務調用。為了方便問題的定位,我們需要跟蹤內部的服務調用鏈。系統的復雜越高,一個可行的鏈路追蹤系統帶來的好處就越明顯。我們選擇了已進入 CNCF 的 OpenTracing 分布式追蹤標準,OpenTracing 提供與平臺和廠商無關的 API,便于開發人員實現鏈路跟蹤系統。
Mishards 定義了相關的鏈路追蹤接口,并通過插件模式提供了擴展的可能。目前默認提供了基于 Jaeger 的插件。
志集群服務志文件分布在不同的服務節點上,因此你在排查問題需要登錄到相關獲取志。建議使用 ELK 志分析組件來協同分析多個志文件、排查問題。
路由Mishards 從服務發現中心獲取 Milvus 讀寫節點的地址,通過元數據服務獲取底層數據元。Mishards 的路由策略就是對于這些素材的一種消費。如圖有 10 個數據段(s1, s2, s3, …, s10)。現在選擇基于數據段名字的一致哈希路由策略(FileNameHashRingBased),Mishards 會將涉及 s1、s4、s6、s9 數據段的請求路由到 Milvus 1 節點,將涉及 s2、s3、s5 數據段的請求路由到 Milvus 2 節點,將涉及 s7、s8、s10 數據段的請求路由到 Milvus 3 節點。
Mishards 定義了路由策略相關的接口,并通過插件提供擴展。你可以仿照默認的一致哈希路由插件,根據自己的業務特點定制個化路由。
基本案例你可以在 Milvus Helm Charts 找到 Milvus-Helm 支持的所有參數。
1、配置有多個讀節點和多個 Mishards 分片中間件的集群。
我們通常配置多個節點來保證服務的可用以及提高吞吐率。下面的例子部署的 Mishards 集群包括:2 個分片中間件、2 個讀節點、1 個寫節點。
這里通過 mishards.replica 和 readonly.replica 控制副本集數量,默認值為 1。
Mishards 集群中的寫節點暫時不支持擴展。
2、使用外部已配置好的 MySQL 集群作為元數據數據庫。
為了配合本地部署,有些情況需要支持外部的 MySQL。Milvus-Helm 內部的 MySQL 服務不保證高可用,但你可以通過外部的 MySQL 集群來提升可用。下面的例子就是基于外部 MySQL 的部署。
若使用外部的 MySQL,則不再需要 Helm 內置的 MySQL 服務。這里通過 mysql.enabled 來關閉 Helm 內置的 MySQL 服務。
3、讀寫節點的 Milvus 分別使用不同的配置。
為了更合理地使用資源,我們希望讀節點和寫節點擁有不一樣的配置。下面的例子配置了一個擁有 16 GB 內存的讀節點和 8 GB 內存的寫節點。
4、配置 U 資源。
使用 U 可以有效提升 Milvus 的能。下面的例子通過 gpu.enabled=true 允許寫節點使用 U 資源,readonly.gpu.enabled=false 禁止讀節點使用 U 資源。