Klasa Collection w Milvusie jest podobna do tabeli w MySQL, służy do organizacji danych i składa się z jednej lub więcej partycji.
Tworzenie kolekcji
Kolekcja składa się z jednej lub więcej partycji. Podczas tworzenia nowej kolekcji Milvus utworzy domyślną partycję o nazwie _default
. Aby uzyskać więcej informacji, proszę odnieść się do wyjaśnień terminologii dotyczącej kolekcji.
Poniższy przykład utworzy kolekcję o nazwie book
z dwoma partycjami, zawierającą pole klucza głównego o nazwie book_id
, pole skalarnego typu INT64
o nazwie word_count
, oraz pole wektorowe o wymiarze dwóch, typu zmiennoprzecinkowego, o nazwie book_intro
. W rzeczywistych aplikacjach często stosuje się wektory o wyższej liczbie wymiarów niż w tym przykładzie.
Tryb przygotowania
Tryb jest podobny do definiowania struktury tabeli MYSQL.
Zbiór, który ma zostać utworzony musi zawierać pole klucza głównego i pole wektorowe. Pole klucza głównego obsługuje typy danych INT64 i VarChar.
Najpierw przygotuj niezbędne parametry, w tym schemat pola, schemat zbioru i nazwę zbioru.
Przed zdefiniowaniem schematu zbioru, utwórz schemat dla każdego pola w zbiorze. Aby zredukować złożoność wstawiania danych, Milvus pozwala zdefiniować wartość domyślną dla każdego skalarnego pola (z wyjątkiem pola klucza głównego). Oznacza to, że jeśli pozostawisz pole puste podczas wstawiania danych, zostanie użyta skonfigurowana wartość domyślna podczas tworzenia schematu pola.
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="Nieznane" # Domyślna wartość to "Nieznane"
)
word_count = FieldSchema(
name="word_count",
dtype=DataType.INT64,
default_value=9999 # Domyślna wartość to 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="Test wyszukiwania książek", # Opis to "Test wyszukiwania książek"
enable_dynamic_field=True # Włącz dynamiczny schemat
)
collection_name = "book"
Typ schematu | Parametr | Opis | Opcje |
---|---|---|---|
FieldSchema |
name |
Nazwa pola do utworzenia. | N/A |
dtype |
Typ danych pola do utworzenia. | Pole klucza głównego: - DataType.INT64 (numpy.int64) - DataType.VARCHAR (VARCHAR) Pola skalarnego: - 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) Pola wektorowe: - BINARY_VECTOR (Wektor binarny) - FLOAT_VECTOR (Wektor float) |
|
is_primary |
Przełącznik kontrolujący, czy pole jest polem klucza głównego. Ten parametr musi być określony dla pól klucza głównego. | True lub False |
|
auto_id |
Przełącznik umożliwiający włączenie lub wyłączenie automatycznego przypisania ID (klucza głównego). Ten parametr musi być określony dla pól klucza głównego i domyślnie ustawiony na False . |
True or False |
|
max_length (Wymagane dla pól VARCHAR) |
Maksymalna długość ciągu znaków, która może zostać wstawiona. | [1, 65,535] | |
default_value |
Domyślna wartość pola. Ten parametr dotyczy tylko pól skalarnych (nie będących tablicami ani obiektami JSON). Nie można określić domyślnej wartości dla pola klucza głównego. Aby uzyskać więcej informacji, zapoznaj się z parametrem default_value . |
N/A | |
dim (Wymagane dla pól wektorowych) |
Wymiar wektora. | [1, 32,768] | |
description (Opcjonalne) |
Opis pola. | N/A | |
CollectionSchema |
fields |
Pola do utworzenia dla zbioru. | N/A |
description (Opcjonalne) |
Opis kolekcji, która ma zostać utworzona. | N/A | |
enable_dynamic_field |
Czy włączyć dynamiczny schemat. Typ danych: Boolean (true lub false ). Opcjonalne, domyślnie ustawione na False . Aby uzyskać więcej informacji na temat dynamicznego schematu, zapoznaj się z przewodnikiem użytkownika dotyczącym dynamicznego schematu i zarządzania kolekcją. |
||
collection_name |
Nazwa kolekcji do utworzenia. | N/A |
Tworzenie kolekcji z schematem
Następnie utwórz kolekcję z określonym schematem.
from pymilvus import Collection
kolekcja = Collection(
name=nazwa_kolekcji,
schema=schemat,
using='domyslny',
shards_num=2
)
Parametr | Opis | Opcje |
---|---|---|
using (opcjonalne) |
Określ alias serwera tutaj i wybierz miejsce utworzenia kolekcji w serwerze Milvus. | BRAK |
shards_num (opcjonalne) |
Liczba fragmentów do utworzenia kolekcji. | [1,16] |
num_partitions (opcjonalne) |
Logiczna liczba partycji do utworzenia w kolekcji. | [1,4096] |
*kwargs: collection.ttl.seconds (opcjonalne) |
TTL kolekcji to czas wygaśnięcia kolekcji. Dane w wygasłej kolekcji zostaną wyczyszczone i nie wezmą udziału w wyszukiwaniach ani zapytaniach. Określ TTL w sekundach. | Wartość powinna wynosić 0 lub więcej. 0 oznacza wyłączenie TTL. |
Ograniczenia
Konfiguracja zasobów
Funkcja | Maksymalny limit |
---|---|
Długość nazwy kolekcji | 255 znaków |
Liczba partycji w kolekcji | 4,096 |
Liczba pól w kolekcji | 64 |
Liczba fragmentów w kolekcji | 16 |
Parametr default_value
-
default_value
dotyczy tylko pól skalarnych, niebędących tablicami i niebędących typem JSON. -
default_value
nie dotyczy klucza głównego. - Typ danych
default_value
musi być taki sam jak określony wdtype
. W przeciwnym razie może dojść do błędów. - W przypadku użycia
auto_id
nie wolno ustawić pozostałych pól na wartość domyślną. Innymi słowy, podczas wykonywania operacji wstawiania lub aktualizacji, należy określić wartość co najmniej jednego pola. W przeciwnym razie może dojść do błędów.
Zmiana nazwy kolekcji
Jeśli chcesz zmienić nazwę kolekcji, możesz komunikować się z Milvus za pomocą interfejsu do zmiany nazwy kolekcji. Ten przewodnik pomoże Ci zrozumieć, jak użyć wybranego SDK do zmiany nazwy istniejącej kolekcji.
W poniższym fragmencie kodu tworzymy kolekcję o nazwie stara_kolekcja
, a następnie zmieniamy jej nazwę na nowa_kolekcja
.
from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility
connections.connect(alias="domyslny")
schemat = CollectionSchema(fields=[
... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True),
... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128),
... ])
kolekcja = Collection(name="stara_kolekcja", schema=schemat)
utility.rename_collection("stara_kolekcja", "nowa_kolekcja") # Wynik: True
utility.has_collection("nowa_kolekcja") # Wynik: False
Modyfikowanie kolekcji
Obecnie funkcja TTL jest dostępna tylko w języku Python.
kolekcja.set_properties(properties={"collection.ttl.seconds": 1800})
W powyższym przykładzie zmieniamy TTL kolekcji na 1800 sekund.
Sprawdzanie, czy kolekcja istnieje
Sprawdź, czy kolekcja istnieje w Milvus.
from pymilvus import utility
utility.has_collection("book")
Sprawdzanie szczegółów kolekcji
from pymilvus import Collection
kolekcja = Collection("book") # Pobierz istniejącą kolekcję.
kolekcja.schema # Zwraca schemat CollectionSchema kolekcji.
kolekcja.description # Zwraca opis kolekcji.
kolekcja.name # Zwraca nazwę kolekcji.
kolekcja.is_empty # Zwraca wartość logiczną wskazującą, czy kolekcja jest pusta.
kolekcja.num_entities # Zwraca liczbę jednostek w kolekcji.
kolekcja.primary_field # Zwraca schemat FieldSchema klucza głównego.
kolekcja.partitions # Zwraca listę obiektów [Partition].
kolekcja.indexes # Zwraca listę obiektów [Index].
kolekcja.properties # Zwraca czas wygaśnięcia danych w kolekcji.
Wyświetlanie wszystkich kolekcji
from pymilvus import utility
utility.list_collections()
Usunięcie kolekcji
from pymilvus import utility
utility.drop_collection("book")
Utworzenie aliasu kolekcji
from pymilvus import utility
utility.create_alias(
collection_name = "book",
alias = "publication"
)
Usunięcie aliasu kolekcji
from pymilvus import utility
utility.drop_alias(alias = "publication")
Zmiana aliasu kolekcji
Zmodyfikuj istniejący alias, aby wskazywał na inną kolekcję. Poniższy przykład oparty jest na sytuacji, w której alias publication
pierwotnie został utworzony dla innej kolekcji.
from pymilvus import utility
utility.alter_alias(
collection_name = "book",
alias = "publication"
)
Wczytanie kolekcji
Jak wczytać kolekcję do pamięci przed przeprowadzeniem operacji wyszukiwania lub zapytań. W Milvus wszystkie operacje wyszukiwania i zapytań są wykonywane w pamięci.
Milvus pozwala użytkownikom wczytać kolekcje jako wielorplikowane repliki, aby wykorzystać dodatkowe zasoby CPU i pamięci węzłów zapytań. Ta funkcja poprawia ogólną wydajność zapytań na sekundę (QPS) i przepustowość bez konieczności dodatkowego sprzętu. Przed wczytaniem kolekcji upewnij się, że dla niej utworzono indeks.
from pymilvus import Collection, utility
collection = Collection("book")
collection.load(replica_number=2)
utility.load_state("book")
utility.loading_progress("book")
Zwolnienie kolekcji
Jak zwolnić kolekcję po operacjach wyszukiwania lub zapytań, aby zmniejszyć zużycie pamięci.
from pymilvus import Collection
collection = Collection("book")
collection.release()