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 w dtype. 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()