Lớp Collection trong Milvus tương tự như một bảng trong MySQL, được sử dụng để tổ chức dữ liệu và bao gồm một hoặc nhiều phân vùng.
Tạo một Collection
Một collection bao gồm một hoặc nhiều phân vùng. Khi tạo một collection mới, Milvus sẽ tạo ra một phân vùng mặc định có tên là _default
. Để biết thêm thông tin, vui lòng tham khảo giải thích thuật ngữ - liên quan đến collections.
Ví dụ sau sẽ tạo ra một collection có tên là book
với hai phân vùng, bao gồm một trường khóa chính có tên là book_id
, một trường INT64
scalar có tên là word_count
, và một trường vector số thực hai chiều có tên là book_intro
. Trong ứng dụng thực tế thường sử dụng các vector có số chiều cao hơn so với ví dụ này.
Chế Độ Chuẩn Bị
Chế độ này tương tự như việc định nghĩa cấu trúc của một bảng MYSQL.
Bộ sưu tập sẽ được tạo ra phải chứa một trường khóa chính và một trường vector. Trường khóa chính hỗ trợ các loại dữ liệu INT64 và VarChar.
Đầu tiên, chuẩn bị các tham số cần thiết, bao gồm schema trường, schema bộ sưu tập và tên bộ sưu tập.
Trước khi định nghĩa schema bộ sưu tập, tạo một schema cho mỗi trường trong bộ sưu tập. Để giảm bớt sự phức tạp của việc chèn dữ liệu, Milvus cho phép bạn chỉ định một giá trị mặc định cho mỗi trường số (trừ trường khóa chính). Điều này có nghĩa rằng nếu bạn để trường trống khi chèn dữ liệu, giá trị mặc định được cấu hình trong quá trình tạo schema trường sẽ được sử dụng.
from pymilvus import CollectionSchema, FieldSchema, DataType
book_id = FieldSchema(
name="book_id",
dtype=DataType.INT64,
is_primary=True,
)
book_name = FieldSchema(
name="book_name",
dtype=DataType.VARCHAR,
max_length=200,
default_value="Không rõ" # Giá trị mặc định là "Không rõ"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # Giá trị mặc định là 9999
)
book_intro = FieldSchema(
name="book_intro",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[book_id, book_name, word_count, book_intro],
description="Tìm kiếm sách thử nghiệm", # Mô tả là "Tìm kiếm sách thử nghiệm"
enable_dynamic_field=True # Kích hoạt schema linh hoạt
)
collection_name = "sách"
Loại Schema | Tham số | Mô tả | Tùy chọn |
---|---|---|---|
FieldSchema |
name |
Tên của trường cần tạo. | N/A |
dtype |
Loại dữ liệu của trường cần tạo. | Trường khóa chính: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Trường số: - DataType.BOOL (Boolean) - DataType.INT8 (numpy.int8) - DataType.INT16 (numpy.int16) - DataType.INT32 (numpy.int32) - DataType.INT64 (numpy.int64) - DataType.FLOAT (numpy.float32) - DataType.DOUBLE (numpy.double) - DataType.VARCHAR (VARCHAR) - DataType.JSON (JSON) Trường vector: - BINARY_VECTOR (Vector nhị phân) - FLOAT_VECTOR (Vector float) |
|
is_primary |
Chuyển đổi kiểm soát xem trường có phải là trường khóa chính hay không. Tham số này cần được chỉ định cho các trường khóa chính. | True hoặc False |
|
auto_id |
Chuyển đổi để bật hoặc tắt việc tự động gán ID (khóa chính). Tham số này cần được chỉ định cho các trường khóa chính và mặc định là False . |
True hoặc False |
|
max_length (Yêu cầu cho trường VARCHAR) |
Độ dài tối đa của chuỗi có thể chèn vào. | [1, 65,535] | |
default_value |
Giá trị mặc định của trường. Tham số này chỉ áp dụng cho các trường số không phải mảng và không phải JSON. Không thể chỉ định giá trị mặc định cho trường khóa chính. Để biết thêm thông tin, vui lòng tham khảo tham số default_value . |
N/A | |
dim (Yêu cầu cho trường vector) |
Số chiều của vector. | [1, 32,768] | |
description (Tùy chọn) |
Mô tả của trường. | N/A | |
CollectionSchema |
fields |
Các trường cần tạo cho bộ sưu tập. | N/A |
description (Tùy chọn) |
Mô tả của bộ sưu tập cần tạo. | N/A | |
enable_dynamic_field |
Có kích hoạt schema linh hoạt hay không. Loại dữ liệu: Boolean (true hoặc false ). Tùy chọn, mặc định là False . Để biết thêm thông tin về schema linh hoạt, vui lòng tham khảo hướng dẫn người dùng về schema linh hoạt và quản lý bộ sưu tập. |
||
collection_name |
Tên của bộ sưu tập cần tạo. | N/A |
Tạo một Bộ sưu tập với Schema
Tiếp theo, tạo một bộ sưu tập với schema cụ thể.
from pymilvus import Collection
collection = Collection(
name=collection_name,
schema=schema,
using='default',
shards_num=2
)
Tham số | Mô tả | Tùy chọn |
---|---|---|
using (tùy chọn) |
Chỉ định bí danh của máy chủ ở đây và chọn nơi để tạo bộ sưu tập trong máy chủ Milvus. | Không áp dụng |
shards_num (tùy chọn) |
Số lượng shard cho bộ sưu tập được tạo. | [1,16] |
num_partitions (tùy chọn) |
Số lượng phân vùng logic cho bộ sưu tập được tạo. | [1,4096] |
*kwargs: collection.ttl.seconds (tùy chọn) |
Thời hạn sử dụng của bộ sưu tập là thời gian hết hạn của bộ sưu tập. Dữ liệu trong bộ sưu tập hết hạn sẽ được xóa và sẽ không tham gia vào tìm kiếm hoặc truy vấn. Chỉ định TTL tính bằng giây. | Giá trị phải là 0 hoặc lớn hơn. 0 có nghĩa là vô hiệu hóa TTL. |
Giới hạn
Cấu hình Tài nguyên
Tính năng | Giới hạn Tối đa |
---|---|
Độ dài Tên Bộ sưu tập | 255 ký tự |
Số lượng phân vùng trong Bộ sưu tập | 4.096 |
Số lượng Trường trong Bộ sưu tập | 64 |
Số lượng Shards trong Bộ sưu tập | 16 |
Tham số default_value
-
default_value
chỉ áp dụng cho các trường không phải mảng và không phải scalar JSON. -
default_value
không áp dụng cho khóa chính. - Kiểu dữ liệu của
default_value
phải giống như kiểu dữ liệu được chỉ định trongdtype
. Nếu không, có thể xảy ra lỗi. - Trong trường hợp sử dụng
auto_id
, không được phép thiết lập tất cả các trường còn lại để sử dụng giá trị mặc định. Nói cách khác, khi thực hiện thao tác chèn hoặc cập nhật, bạn cần phải chỉ định giá trị cho ít nhất một trường. Nếu không, có thể xảy ra lỗi.
Đổi tên một Bộ sưu tập
Nếu bạn muốn đổi tên một bộ sưu tập, bạn có thể tương tác với Milvus bằng cách sử dụng API đổi tên bộ sưu tập. Hướng dẫn này sẽ giúp bạn hiểu cách sử dụng SDK bạn chọn để đổi tên một bộ sưu tập hiện có.
Trong đoạn mã sau, chúng ta tạo một bộ sưu tập và đặt tên là old_collection
, sau đó đổi tên thành new_collection
.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="default")
schema = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
collection = Collection(name="old_collection", schema=schema)
utility.rename_collection("old_collection", "new_collection") # Output: True
utility.has_collection("new_collection") # Output: False
Sửa đổi một Bộ sưu tập
Hiện tại, tính năng TTL chỉ có sẵn trong Python.
collection.set_properties(properties={"collection.ttl.seconds": 1800})
Ví dụ trên thay đổi TTL của bộ sưu tập thành 1800 giây.
Kiểm tra xem một Bộ sưu tập có tồn tại
Xác minh xem bộ sưu tập có tồn tại trong Milvus không.
from pymilvus import utility
utility.has_collection("book")
Kiểm tra Chi tiết Bộ sưu tập
from pymilvus import Collection
collection = Collection("book") # Lấy ra một bộ sưu tập hiện có.
collection.schema # Trả về CollectionSchema của bộ sưu tập.
collection.description # Trả về mô tả của bộ sưu tập.
collection.name # Trả về tên của bộ sưu tập.
collection.is_empty # Trả về một giá trị boolean chỉ ra liệu bộ sưu tập có trống không.
collection.num_entities # Trả về số lượng thực thể trong bộ sưu tập.
collection.primary_field # Trả về schema.FieldSchema của trường khóa chính.
collection.partitions # Trả về một danh sách các đối tượng [Partition].
collection.indexes # Trả về một danh sách các đối tượng [Index].
collection.properties # Trả về thời gian hết hạn của dữ liệu trong bộ sưu tập.
Liệt kê tất cả các bộ sưu tập
from pymilvus import utility
utility.list_collections()
Xóa một bộ sưu tập
from pymilvus import utility
utility.drop_collection("book")
Tạo một bí danh cho bộ sưu tập
from pymilvus import utility
utility.create_alias(
collection_name = "book",
alias = "publication"
)
Xóa một bí danh của bộ sưu tập
from pymilvus import utility
utility.drop_alias(alias = "publication")
Sửa đổi bí danh bộ sưu tập
Sửa đổi bí danh hiện có để trỏ đến một bộ sưu tập khác. Ví dụ dưới đây dựa trên tình huống khi bí danh publication
ban đầu được tạo cho một bộ sưu tập khác.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
Tải một bộ sưu tập
Làm thế nào để tải một bộ sưu tập vào bộ nhớ trước khi thực hiện các hoạt động tìm kiếm hoặc truy vấn. Trong Milvus, tất cả các hoạt động tìm kiếm và truy vấn được thực hiện trong bộ nhớ.
Milvus cho phép người dùng tải bộ sưu tập dưới dạng nhiều bản sao để tận dụng tài nguyên CPU và bộ nhớ của các nút truy vấn. Tính năng này cải thiện tổng QPS và công suất mà không cần phải sử dụng phần cứng bổ sung. Trước khi tải một bộ sưu tập, hãy đảm bảo rằng bạn đã tạo một chỉ mục cho nó.
from pymilvus import Collection, utility
collection = Collection("book")
collection.load(replica_number=2)
utility.load_state("book")
utility.loading_progress("book")
Giải phóng một bộ sưu tập
Làm thế nào để giải phóng một bộ sưu tập sau các hoạt động tìm kiếm hoặc truy vấn để giảm sử dụng bộ nhớ.
from pymilvus import Collection
collection = Collection("book")
collection.release()