Inserimento di entità
Questa sezione descrive come inserire dati in Milvus tramite il lato client.
È inoltre possibile utilizzare MilvusDM per migrare i dati in Milvus. MilvusDM è un tool open-source progettato appositamente per l'importazione e l'esportazione dei dati di Milvus.
Milvus 2.1 supporta il tipo di dato VARCHAR
su campi scalari. Quando si costruisce un indice per un campo scalare di tipo VARCHAR, il tipo di indice predefinito è un albero trie.
Nell'esempio seguente vengono inserite 2.000 righe di dati generati casualmente come dati di esempio (l'esempio Milvus CLI utilizza un file CSV remoto pre-costruito contenente dati simili). Le applicazioni reali spesso usano vettori di dimensioni più elevate rispetto all'esempio. È possibile preparare i propri dati per sostituire i dati di esempio.
Preparazione dei dati
Innanzitutto, preparare i dati da inserire. Il tipo di dati da inserire deve corrispondere allo schema della collezione, altrimenti Milvus genererà un'eccezione.
Milvus supporta valori predefiniti per i campi scalari, tranne per i campi chiave primari. Ciò significa che durante l'inserimento o l'aggiornamento dei dati, alcuni campi possono essere lasciati vuoti. Per ulteriori informazioni, consultare la sezione Creazione di una Collezione.
Dopo aver abilitato lo schema dinamico, è possibile aggiungere campi dinamici ai dati. Per informazioni dettagliate, vedere Schema Dinamico.
import random
data = [
[i for i in range(2000)],
[str(i) for i in range(2000)],
[i for i in range(10000, 12000)],
[[random.random() for _ in range(2)] for _ in range(2000)],
[],
None,
]
data.append([str("dy"*i) for i in range(2000)])
Inserimento dei dati in Milvus
Inserire i dati nella collezione.
Specificando partition_name
, è possibile scegliere in quale partizione inserire i dati.
from pymilvus import Collection
collection = Collection("book") # Ottieni una collezione esistente.
mr = collection.insert(data)
Parametro | Descrizione |
---|---|
data |
I dati da inserire in Milvus. |
partition_name (opzionale) |
Il nome della partizione in cui verranno inseriti i dati. |
Dopo aver inserito entità in una collezione precedentemente indicizzata, non è necessario ricreare l'indice della collezione, poiché Milvus creerà automaticamente degli indici per i dati appena inseriti. Per ulteriori informazioni, consultare la sezione Possono Essere Creati Indici Dopo l'Inserimento dei Vettori?
Aggiornamento dei Dati in Milvus
Quando i dati vengono inseriti in Milvus, vengono inseriti in segmenti. I segmenti devono raggiungere una determinata dimensione per essere sigillati e indicizzati. I segmenti non sigillati utilizzeranno una ricerca forzata. Per evitare questa situazione, è meglio chiamare flush()
per tutti i dati rimanenti. La chiamata a flush()
sigillerà i segmenti rimanenti e li invierà all'indice. È importante chiamare questo metodo solo alla fine di una sessione di inserimento. Chiamarlo troppo frequentemente può portare a dati frammentati che dovranno essere puliti in seguito.
Limitazioni
Funzionalità | Limite Massimo |
---|---|
Dimensione vettoriale | 32.768 |
Aggiornamento di Entità (Upsert Entity)
L'aggiornamento tramite upsert è una combinazione di operazioni di inserimento e cancellazione. Nel contesto del database vettoriale di Milvus, l'aggiornamento è un'operazione a livello di dati. Sovrascrive l'entità esistente se il campo specificato esiste nella collezione e inserisce una nuova entità se il valore specificato non esiste.
Nell'esempio seguente vengono aggiornate 3.000 righe di dati generati casualmente come dati di esempio. Quando si esegue l'operazione di aggiornamento, è importante notare che questa operazione può influire sulle prestazioni perché comporta la cancellazione dei dati.
Preparazione dei Dati
Innanzitutto, preparare i dati da aggiornare. Il tipo di dati da aggiornare deve corrispondere allo schema della collezione, altrimenti Milvus genererà un'eccezione.
Milvus supporta valori predefiniti per i campi scalari, tranne per i campi chiave primari. Ciò significa che durante l'inserimento o l'aggiornamento dei dati, alcuni campi possono essere lasciati vuoti. Per ulteriori informazioni, consultare la sezione Creazione di una Collezione.
import random
nb = 3000
dim = 8
vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]
data = [
[i for i in range(nb)],
[str(i) for i in range(nb)],
[i for i in range(10000, 10000+nb)],
vectors,
[str("dy"*i) for i in range(nb)]
]
Aggiornamento dei Dati
Aggiornare i dati nella collezione.
from pymilvus import Collection
collection = Collection("book") # Ottieni la collezione esistente.
mr = collection.upsert(data)
Cancellazione di Entità
Milvus supporta la cancellazione delle entità tramite espressioni booleane attraverso le chiavi primarie.
Preparare l'espressione booleana
Prepara un'espressione booleana per filtrare le entità da eliminare.
Milvus supporta solo l'eliminazione delle entità con chiavi primarie specificate esplicitamente, che può essere ottenuto utilizzando l'operatore "in". Altri operatori possono essere utilizzati solo nel filtraggio scalare per query o ricerca vettoriale.
Nell'esempio seguente vengono filtrati i dati utilizzando i valori delle chiavi primarie 0 e 1.
expr = "book_id in [0,1]"
Simile alla clausola WHERE di SQL
Eliminare l'entità
Utilizza l'espressione booleana creata per eliminare le entità. Milvus restituirà l'elenco delle ID delle entità eliminate.
from pymilvus import Collection
collection = Collection("book") # Ottieni la collezione esistente.
collection.delete(expr)
Comprimere i Dati
Milvus supporta la compressione automatica dei dati per impostazione predefinita. È possibile configurare Milvus per abilitare o disabilitare la compressione automatica.
Se la compressione automatica è disabilitata, è comunque possibile comprimere manualmente i dati.
Comprimere manualmente i dati
Poiché la compressione di solito richiede molto tempo, le richieste di compressione vengono elaborate in modo asincrono.
from pymilvus import Collection
collection = Collection("book") # Ottieni la collezione esistente.
collection.compact()
Verificare lo stato di compressione
È possibile utilizzare l'ID di compressione restituito durante l'attivazione della compressione manuale per verificare lo stato di compressione.
collection.get_compaction_state()