1?數據庫
????????Milvus 在集合之上引入了數據庫層,為管理和組織數據提供了更有效的方式,同時支持多租戶。
1.1?什么是數據庫
????????在 Milvus 中,數據庫是組織和管理數據的邏輯單元。為了提高數據安全性并實現多租戶,你可以創建多個數據庫,為不同的應用程序或租戶從邏輯上隔離數據。例如,創建一個數據庫用于存儲用戶 A 的數據,另一個數據庫用于存儲用戶 B 的數據。
1.2?創建數據庫
????????可以使用 Milvus RESTful API 或 SDK 以編程方式創建數據。
from pymilvus import MilvusClientclient = MilvusClient(uri="http://localhost:19530",token="root:Milvus" # 用戶名:密碼
)client.create_database(db_name="my_database_1"
)
????????還可以在創建數據庫時為其設置屬性。下面的示例設置了數據庫的副本數量。
client.create_database(db_name="my_database_2",properties={"database.replica.number": 3}
)
1.3 查看數據庫
????????您可以使用 Milvus RESTful API 或 SDK 列出所有現有數據庫并查看其詳細信息。
# 列出所有現有數據庫
client.list_databases()# 輸出
# ['default', 'my_database_1', 'my_database_2']# 檢查數據庫詳細信息
client.describe_database(db_name="default"
)# 輸出
# {"name": "default"}
1.4?管理數據庫屬性
????????每個數據庫都有自己的屬性,您可以在創建數據庫時設置數據庫屬性,也可以更改和刪除任何現有數據庫的屬性。下表列出了可能的數據庫屬性。
屬性名稱 | 類型 | 屬性描述 |
---|---|---|
| 整數 | 指定數據庫的副本數量。 |
| 字符串 | 與指定數據庫關聯的資源組名稱,以通用分隔列表形式顯示。 |
| 整數 | 指定數據庫的最大磁盤空間大小(MB)。 |
| 整數 | 指定數據庫中允許的最大 Collections 數量。 |
| 布爾 | 是否強制指定的數據庫拒絕寫操作。 |
| 布爾 | 是否強制指定的數據庫拒絕讀取操作。 |
1.4.1 更改數據庫屬性
????????可以通過以下方式更改現有數據庫的屬性。下面的示例限制了可以在數據庫中創建的 Collections 數量。
client.alter_database_properties(db_name: "my_database_1",properties: {"database.max.collections": 10}
)
1.4.2?刪除數據庫屬性
????????還可以通過如下方式刪除數據庫屬性來重置該屬性。下面的示例刪除了可以在數據庫中創建的 Collection 數量限制。
client.drop_database_properties(db_name: "my_database_1",property_keys: ["database.max.collections"]
)
1.5?使用數據庫
????????可以在不斷開與 Milvus 連接的情況下從一個數據庫切換到另一個數據庫。RESTful API 不支持此操作符。
client.use_database(db_name="my_database_2"
)
1.6?刪除數據庫
????????一旦不再需要數據庫,就可以刪除數據庫。請注意
- 不能丟棄默認數據庫。
- 在丟棄數據庫之前,需要先丟棄數據庫中的所有 Collections。
client.drop_database(db_name="my_database_2"
)
????????你可以使用 Milvus RESTful API 或 SDK 以編程方式創建數據。
2?Collections 說明
????????在 Milvus 中,您可以創建多個 Collections 來管理數據,并將數據作為實體插入到 Collections 中。Collections 和實體類似于關系數據庫中的表和記錄。本頁將幫助你了解集合和相關概念。
????????Collection 是一個二維表,具有固定的列和變化的行。每列代表一個字段,每行代表一個實體。下圖顯示了一個有 8 列和 6 個實體的 Collection。
2.1?Schema 和字段
????????在描述一個對象時,我們通常會提到它的屬性,如大小、重量和位置。您可以將這些屬性用作 Collection 中的字段。每個字段都有各種約束屬性,例如向量字段的數據類型和維度。通過創建字段并定義其順序,可以形成一個 Collections Schema。應在要插入的實體中包含所有 Schema 定義的字段。
2.2?主鍵和 AutoId
????????與關系數據庫中的主字段類似,Collection 也有一個主字段,用于將實體與其他實體區分開來。主字段中的每個值都是全局唯一的,并與一個特定實體相對應。
????????如上圖所示,名為id的字段是主字段,第一個 ID0對應一個名為 "冠狀病毒的死亡率并不重要"的實體。不會有其他實體的主字段是 0。
????????主字段只接受整數或字符串。插入實體時,默認情況下應包含主字段值。但是,如果在創建 Collections 時啟用了AutoId,Milvus 將在插入數據時生成這些值。在這種情況下,請從要插入的實體中排除主字段值。
2.3 索引
????????為特定字段創建索引可提高搜索效率。建議您為服務所依賴的所有字段創建索引,其中向量字段的索引是強制性的。
2.4?實體
????????實體是指在 Collections 中共享同一組字段的數據記錄。同一行中所有字段的值構成一個實體。您可以根據需要在 Collections 中插入任意數量的實體。但是,隨著實體數量的增加,所占用的內存大小也會增加,從而影響搜索性能。
2.5?加載和釋放
????????加載集合是在集合中進行相似性搜索和查詢的前提。加載 Collections 時,Milvus 會將所有索引文件和每個字段中的原始數據加載到內存中,以便快速響應搜索和查詢。搜索和查詢是內存密集型操作。為節約成本,建議您釋放當前不使用的 Collections。
2.6?搜索和查詢
????????創建索引并加載 Collections 后,就可以通過輸入一個或多個查詢向量開始相似性搜索。例如,當接收到搜索請求中攜帶的查詢向量表示時,Milvus 會使用指定的度量類型來衡量查詢向量與目標 Collections 中的向量之間的相似性,然后再返回與查詢語義相似的向量。
????????還可以在搜索和查詢中加入元數據過濾功能,以提高搜索結果的相關性。請注意,元數據過濾條件在查詢中是必須的,但在搜索中是可選的。
- 基本 ANN 搜索
- 過濾搜索
- 范圍搜索
- 分組搜索
- 混合搜索
- 搜索迭代器
- 查詢
- 全文搜索
- 文本匹配
????????此外,Milvus 還提供了提高搜索性能和效率的增強功能。這些增強功能默認為禁用,您可以根據自己的服務要求啟用和使用它們。它們是
- 使用 Partition Key
- 使用 mmap
- 集群壓縮
2.7?分區
????????分區是集合的子集,與其父集合共享相同的字段集,每個分區包含一個實體子集。通過將實體分配到不同的分區,可以創建實體組。你可以在特定分區中進行搜索和查詢,讓 Milvus 忽略其他分區中的實體,提高搜索效率。
2.8 分片
分片是 Collections 的水平切片。每個分片對應一個數據輸入通道。每個 Collections 默認都有一個分片。創建 Collections 時,可以根據預期吞吐量和要插入 Collections 的數據量設置適當的分片數量。
2.9?別名
????????可以為您的集合創建別名。一個集合可以有多個別名,但集合不能共享一個別名。收到針對某個 Collection 的請求后,Milvus 會根據所提供的名稱定位該 Collection。如果所提供名稱的 Collection 不存在,Milvus 會繼續定位所提供名稱的別名。你可以使用 Collections 別名來調整代碼以適應不同的情況。
2.10?函數
????????您可以為 Milvus 設置函數,以便在創建 Collections 時派生字段。例如,全文搜索功能使用用戶定義函數從特定 varchar 字段推導出稀疏向量字段。
2.11?一致性級別
????????分布式數據庫系統通常使用一致性級別來定義跨數據節點和副本的數據相同性。在創建 Collections 或在 Collections 中進行相似性搜索時,可以分別設置不同的一致性級別。適用的一致性級別有強、有限制的不穩定性、會話和最終。