Note di rilascio
Scoprite le novità di Milvus! Questa pagina riassume le nuove funzionalità, i miglioramenti, i problemi noti e le correzioni di bug di ogni versione. In questa sezione è possibile trovare le note di rilascio per ogni versione rilasciata dopo la v2.4.0. Si consiglia di visitare regolarmente questa pagina per conoscere gli aggiornamenti.
v2.4.9
Data di rilascio: 20 agosto 2024
Versione Milvus | Versione dell'SDK Python | Versione dell'SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.9 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus v2.4.9 risolve un problema critico che poteva restituire risultati inferiori al limite (topk) in alcuni casi particolari e include diversi miglioramenti chiave per migliorare le prestazioni e l'usabilità della piattaforma.
Correzioni critiche
- Esclusione del segmento l0 dallo snapshot leggibile(#35510).
Miglioramenti
- Eliminata la creazione di helper di schema duplicati nel proxy(#35502).
- Aggiunto il supporto per la compilazione di Milvus su Ubuntu 20.04(#35457).
- Ottimizzato l'uso dei lock ed evitato il doppio flush del buffer writer del clustering (#35490).
- Rimosso il log non valido(#35473).
- Aggiunta una guida all'uso della compattazione del clustering (#35428).
- Aggiunto il supporto per i campi dinamici nello schema helper(#35469).
- Aggiunta la sezione msgchannel nello YAML generato(#35466).
v2.4.8
Data di rilascio: 14 agosto 2024
Versione di Milvus | Versione dell'SDK Python | Versione dell'SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.8 | 2.4.5 | 2.4.3 | 2.4.4 |
Milvus 2.4.8 ha introdotto diversi miglioramenti significativi alle prestazioni e alla stabilità del sistema. La caratteristica più importante è stata l'implementazione della compattazione del clustering, un meccanismo che migliora l'efficienza della ricerca e delle interrogazioni ridistribuendo i dati in grandi collezioni in base a una chiave di clustering designata, riducendo la quantità di dati scansionati. La compattazione è stata anche disaccoppiata dallo shard DataNode, consentendo a qualsiasi DataNode di eseguire la compattazione in modo indipendente, migliorando la tolleranza agli errori, la stabilità, le prestazioni e la scalabilità. Inoltre, l'interfaccia tra i componenti Go e C++ è stata rifattorizzata per utilizzare chiamate CGO asincrone, risolvendo problemi come i timeout di sessione, mentre sono state apportate diverse altre ottimizzazioni delle prestazioni basate sulla profilazione. Le dipendenze dell'applicazione sono state aggiornate per risolvere le vulnerabilità di sicurezza note. Inoltre, questa versione include anche numerose ottimizzazioni delle prestazioni e correzioni di bug critici.
Caratteristiche
- Implementata la compattazione del clustering, che consente di ridistribuire i dati in base a una chiave di clustering designata per migliorare l'efficienza delle query(#34326),(#34363).
Miglioramenti
- Implementate le funzionalità di ricerca e recupero asincrono in CGO.(#34200)
- Separato il processo di compattazione dallo Shard DataNode per migliorare la modularità del sistema.(#34157)
- Aggiunto il supporto per il pooling dei client in QueryNode all'interno del proxy/delegatore per migliorare le prestazioni.(#35195)
- Integrato Sonic per minimizzare l'overhead della CPU durante il marshaling e l'unmarshaling di JSON nei gestori Gin e RestfulV1.(#35018)
- Introdotta una cache in memoria per ottimizzare il recupero dei risultati dell'autenticazione.(#35272)
- Modificato il tipo di metrica predefinito per l'autoindex.[#34277, #34479]
- Rifatto il formato della memoria di runtime per le colonne variabili, con conseguente riduzione dell'uso della memoria.[#34367, #35012, #35041]
- Ritoccati i processi di compattazione per consentire la memorizzazione persistente dei dati.(#34268)
- Abilitato il supporto di file mappati in memoria per segmenti crescenti, migliorando la gestione della memoria.(#34110)
- Migliorati i registri di accesso aggiungendo il supporto per le API RESTful, i livelli di consistenza dei registri e la distinzione tra errori di sistema e errori dell'utente.[#34295, #34352, #34396]
- Utilizzato il nuovo parametro
range_search_k
in Knowhere per velocizzare le ricerche di intervallo.(#34709) - Applicati i filtri Bloom bloccati per migliorare la velocità di costruzione dei filtri e di interrogazione.[#34377, #34922]
- Miglioramenti nell'uso della memoria:
- Spazio preallocato per i buffer di inserimento dei DataNode.(#34205)
- Preallocazione di
FieldData
per le operazioni di riduzione.(#34254) - Rilasciati i record nel codec di cancellazione per evitare perdite di memoria.(#34506)
- Controllato il livello di concorrenza del file manager del disco durante il caricamento dei file.(#35282)
- Ottimizzata la logica di garbage collection del runtime di Go per un rilascio tempestivo della memoria.(#34950)
- Implementata una nuova politica di tenuta per i segmenti in crescita.(#34779)
- Miglioramenti a DataCoord:
- Riduzione dell'uso della CPU.[#34231, #34309]
- Implementata una logica di uscita dalla garbage collection più veloce.(#35051)
- Migliorati gli algoritmi di pianificazione dei nodi worker.(#34382)
- Migliorato l'algoritmo di controllo delle dimensioni dei segmenti, in particolare per le operazioni di importazione.(#35149)
- Miglioramenti all'algoritmo di bilanciamento del carico:
- Riduzione del fattore di sovraccarico della memoria sul delegatore.(#35164)
- Allocazione di una dimensione di memoria fissa per il delegatore.(#34600)
- Evitata l'allocazione eccessiva di segmenti e canali per i nuovi nodi di interrogazione.(#34245)
- Ridotto il numero di compiti per ciclo di pianificazione da parte del Query Coordinator, aumentando al contempo la frequenza di pianificazione.(#34987)
- Migliorato l'algoritmo di bilanciamento dei canali sul DataNode (#35033).
- Metriche di sistema ampliate: Aggiunte nuove metriche su vari componenti per monitorare aspetti specifici, tra cui:
Modifiche
Per gli utenti open-source, questa versione cambia i tipi di metrica in AutoIndex per
FloatVector
eBinaryVector
inCosine
eHamming
, rispettivamente.Versioni fisse di dipendenze di terze parti:
- Questa versione introduce versioni fisse per alcune librerie di dipendenza di terze parti, migliorando in modo significativo la gestione della catena di fornitura del software di Milvus.
- Isolando il progetto dalle modifiche a monte, salvaguarda le build quotidiane da potenziali interruzioni.
- L'aggiornamento garantisce la stabilità ospitando esclusivamente pacchetti C++ convalidati di terze parti su JFrog Cloud e utilizzando Conan Recipe Revisions (RREV).
- Questo approccio attenua il rischio di rottura delle modifiche derivanti dagli aggiornamenti in ConanCenter.
- Gli sviluppatori che utilizzano Ubuntu 22.04 beneficeranno immediatamente di queste modifiche. Tuttavia, gli sviluppatori che utilizzano altri sistemi operativi potrebbero dover aggiornare la versione di
glibc
per evitare problemi di compatibilità.
Correzioni di bug critici
- Corretto un problema per cui i dati di cancellazione andavano persi a causa dell'omissione di segmenti durante la compattazione L0.[#33980, #34363]
- Corretto un problema per cui i messaggi di cancellazione non venivano inoltrati a causa di una gestione errata dell'ambito dei dati.(#35313)
- Risolta un'eccezione SIGBUS che si verificava a causa dell'uso non corretto di
mmap
.[#34455, #34530] - Corretti gli arresti anomali causati da espressioni di ricerca illegali.(#35307)
- Corretto un problema per cui l'orologio DataNode falliva a causa di un'impostazione errata del timeout nel contesto dell'orologio.(#35017)
Correzioni di bug
- Risolte le vulnerabilità di sicurezza aggiornando alcune dipendenze.[#33927, #34693]
- Corretto un errore di parsing causato da espressioni troppo lunghe.(#34957)
- Risolta una perdita di memoria che si verificava durante l'analisi del piano di query.(#34932)
- Corretto un problema per cui le modifiche al livello di log dinamico non avevano effetto.(#34777)
- Risolto un problema per cui le query group by su dati in crescita fallivano a causa di offset di segmento non inizializzati.(#34750)
- Corretta l'impostazione dei parametri di ricerca quando si usa l'iteratore Knowhere.(#34732)
- Rivista la logica per il controllo dello stato del caricamento della partizione.(#34305)
- Corretto un problema per cui gli aggiornamenti della cache dei privilegi non riuscivano a causa di errori di richiesta non gestiti.(#34697)
- Risolto un errore nel recupero della collezione caricata dopo il riavvio di QueryCoord.(#35211)
- Risolto un problema di idempotenza del carico eliminando la convalida non necessaria dei parametri dell'indice.(#35179)
- Assicurata l'esecuzione di
compressBinlog
per consentire areloadFromKV
di riempire correttamentelogID
di binlog dopo il riavvio di DataCoord.(#34062) - Corretto un problema per cui i metadati della raccolta non venivano rimossi dopo la garbage collection in DataCoord.(#34884)
- Risolta una perdita di memoria in SegmentManager all'interno di DataCoord rimuovendo i segmenti flussati generati attraverso le importazioni.(#34651)
- Risolto un problema di panico quando la compattazione era disabilitata e una raccolta veniva abbandonata.(#34206)
- Corretto un problema di esaurimento della memoria in DataNode migliorando l'algoritmo di stima dell'uso della memoria.(#34203)
- Impedito l'utilizzo a raffica della memoria quando più richieste di recupero di vettori hanno un miss della cache, implementando il singleflight per la cache dei chunk.(#34283)
- Catturato
ErrKeyNotFound
durante le operazioni CAS (Compare and Swap) nella configurazione.(#34489) - Corretto un problema per cui gli aggiornamenti della configurazione fallivano a causa dell'uso errato del valore formattato in un'operazione CAS.(#34373)
Varie
- Aggiunto il supporto per l'esportatore HTTP OTLP, migliorando le capacità di osservazione e monitoraggio.[#35073, #35299]
- Migliorata la funzionalità del database introducendo proprietà come "max collections" e "disk quota", che ora possono essere modificate dinamicamente.[#34511, #34386]
- Aggiunte funzionalità di tracciamento per i processi di compattazione L0 all'interno di DataNode per migliorare la diagnostica e il monitoraggio.(#33898)
- Introdotta la configurazione della quota per il numero di voci di segmento L0 per raccolta, che consente un migliore controllo dei tassi di cancellazione applicando una pressione all'indietro.(#34837)
- Esteso il meccanismo di limitazione della velocità per le operazioni di inserimento anche alle operazioni di upsert, garantendo prestazioni costanti in condizioni di carico elevato.(#34616)
- Implementato un pool CGO dinamico per le chiamate proxy CGO, ottimizzando l'uso delle risorse e le prestazioni.(#34842)
- Abilitata l'opzione di compilazione DiskAnn per i sistemi operativi Ubuntu, Rocky e Amazon, migliorando la compatibilità e le prestazioni su queste piattaforme.(#34244)
- Aggiornato Conan alla versione 1.64.1, per garantire la compatibilità con le funzioni e i miglioramenti più recenti.(#35216)
- Aggiornato Knowhere alla versione 2.3.7, con miglioramenti delle prestazioni e nuove funzionalità.(#34709)
- Corretta la revisione di specifici pacchetti di terze parti per garantire build coerenti e ridurre il rischio di modifiche inattese.(#35316)
v2.4.6
Data di rilascio: 16 luglio 2024
Versione Milvus | Versione dell'SDK Python | Versione dell'SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.6 | 2.4.4 | 2.4.2 | 2.4.4 |
Milvus v2.4.6 è una release di correzione di bug che risolve problemi critici come panico, perdite di memoria e perdita di dati durante le cancellazioni. Introduce inoltre diverse ottimizzazioni, tra cui miglioramenti alle metriche di monitoraggio, l'aggiornamento della versione Go alla 1.21 e il miglioramento dell'esperienza utente per le query RESTful count(*).
Miglioramenti
- Migliorata la facilità d'uso delle query API RESTful(#34444).
- Aggiornata la versione di Go da 1.20 a 1.21(#33940).
- Ottimizzato il bucket delle metriche dell'istogramma per una granularità più fine nel bucketing (#34592).
- Aggiornata la versione della dipendenza Pulsar da 2.8.2 a 2.9.5. Si raccomanda di aggiornare Pulsar alla versione 2.9.5 a partire da Milvus 2.4.6.
Correzioni di bug
- Corretto un problema per cui l'API GetReplicas restituiva uno stato nullo(#34019).
- Corretto un problema per cui le query potevano restituire record cancellati(#34502).
- Risolto un problema per cui IndexNode si bloccava durante l'arresto a causa di un controllo errato del tempo di vita(#34559).
- Corretta una perdita di memoria degli oggetti oracolo a chiave primaria quando un worker è offline (#34020).
- Corretto ChannelManagerImplV2 per notificare il nodo corretto, risolvendo i problemi di cattura dei parametri nella chiusura del ciclo(#34004).
- Corretta una corsa di dati in lettura e scrittura in ImportTask segmentsInfo implementando una copia profonda (#34126).
- Corrette le informazioni sulla versione per l'opzione di configurazione "legacyVersionWithoutRPCWatch", per evitare errori durante gli aggiornamenti periodici (#34185).
- Corretta la metrica per il numero di partizioni caricate(#34195).
- Passata la configurazione di
otlpSecure
quando si imposta il tracciamento di segcore(#34210). - Risolto un problema per cui le proprietà di DataCoord venivano sovrascritte per errore(#34240).
- Risolto un problema di perdita di dati causato dall'unione errata di due flussi di messaggi appena creati(#34563).
- Corretto un panico causato da msgstream che cercava di consumare un pchannel non valido(#34230).
- Risolto un problema per cui le importazioni potevano generare file orfani (#34071).
- Risolti i risultati incompleti delle query a causa di chiavi primarie duplicate in un segmento(#34302).
- Risolto un problema di segmenti sigillati mancanti nella compattazione L0(#34566).
- Risolto il problema dei dati sporchi nel meta canale-cp generato dopo la garbage collection(#34609).
- Corretta la metrica in cui database_num era 0 dopo il riavvio di RootCoord(#34010).
- Corretta una perdita di memoria in SegmentManager in DataCoord rimuovendo i segmenti generati dall'importazione (#34652).
- Assicurato che compressBinlog riempia il logID dei binlog dopo il riavvio di DataCoord, garantendo il corretto ricarico da KV(#34064).
v2.4.5
Data di rilascio: 18 giugno 2024
Versione Milvus | Versione dell'SDK Python | Versione SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.5 | 2.4.4 | 2.4.1 | 2.4.3 |
Il rilascio di Milvus 2.4.5 introduce diversi miglioramenti e correzioni di bug per migliorare le prestazioni, la stabilità e la funzionalità. Milvus 2.4.5 semplifica la ricerca di vettori sparsi, float16 e bfloat16 con l'indicizzazione automatica, velocizza le ricerche, le cancellazioni e le compattazioni con le ottimizzazioni del filtro Bloom e affronta la gestione dei dati con tempi di caricamento più rapidi e il supporto dei segmenti L0 importati. Introduce inoltre l'indice sparse HNSW per una ricerca efficiente di dati sparsi ad alta dimensione, migliora l'API RESTful con il supporto dei vettori sparse float e corregge i bug critici per una maggiore stabilità.
Nuove funzioni
- Aggiunto il supporto rbac all'API describe/alter database(#33804)
- Supportata la costruzione dell'indice HNSW per i vettori sparsi(#33653, #33662)
- Supportata la costruzione dell'indice Disk per i vettori binari(#33575)
- Supportato il tipo di vettore sparse su RESTful v2(#33555)
- Aggiunta l'API RESTful /management/stop per fermare un componente(#33799)
Miglioramenti
- Impostare il valore predefinito di maxPartitionNum a 1024(#33950)
- Abilitato il reset forzato della connessione in caso di errore di non disponibilità (#33910)
- Abilitato il limitatore della velocità di lavaggio del livello di raccolta (#33864)
- Eseguita l'applicazione del filtro bloom in parallelo per velocizzare la previsione dei segmenti (#33793)
- Usato fastjson lib per cancellare il log per velocizzare json.Unmarshal(#33802)
- Usato BatchPkExist per ridurre il costo delle chiamate alle funzioni del filtro bloom (#33752)
- Velocizzato il caricamento di piccole raccolte(#33746)
- Supportata l'importazione di dati di cancellazione nel segmento L0 (#33712)
- Saltate le attività di compattazione dei marchi per evitare l'esecuzione ripetuta della stessa attività (#33833).
- Gestiti i vettori float16 e bfloat16 come BinaryVector in numpy bulk insert (#33788)
- Aggiunto il flag includeCurrentMsg per il metodo seek(#33743)
- Aggiunti mergeInterval, targetBufSize, maxTolerantLag di msgdispatcher alle configurazioni(#33680)
- Migliorato GetVectorByID del vettore sparse(#33652)
- Rimossa StringPrimarykey per ridurre le copie non necessarie e il costo delle chiamate di funzione (#33649)
- Aggiunta la mappatura dell'autoindice per i tipi di dati binari/sparsi(#33625)
- Ottimizzate alcune cache per ridurre l'uso della memoria(#33560)
- Astratta l'interfaccia di esecuzione per le operazioni di importazione/preimportazione (#33607)
- Usato map pk per timestamp nell'inserimento del buffer per ridurre le cause di bf (#33582)
- Evitate meta-operazioni ridondanti di importazione (#33519)
- Migliorati i log registrando meglio le informazioni sulla quota disco, aggiungendo il flag UseDefaultConsistency, rimuovendo i log non necessari(#33597, #33644, #33670)
Correzioni di bug
- Corretto un bug per cui queryHook non era in grado di riconoscere il tipo di vettore (#33911)
- Impedito l'uso della variabile di iterazione catturata partitionID (#33970)
- Corretto un bug che può causare l'incapacità di Milvus di creare AutoIndex su vettori binari e sparsi(#33867)
- Corretto un bug che può far sì che indexnode ritenti la creazione di un indice su parametri di indice non validi di tutti i vettori (#33878)
- Corretto il bug che quando i carichi e i rilasci avvengono in modo concomitante può mandare in crash il server(#33699)
- Migliorata la coerenza della cache per i valori di configurazione(#33797)
- Prevenuta la possibile perdita di dati durante la cancellazione(#33821)
- Assicurato che il campo DroppedAt (probabile timestamp di cancellazione) sia impostato dopo l'eliminazione delle raccolte (#33767).
- Corretto un problema che poteva causare una gestione non corretta delle dimensioni dei dati dei vettori binari da parte di Milvus(#33751)
- Impedito che le credenziali sensibili di Kafka vengano registrate in testo normale(#33694, #33747).
- Assicurato che Milvus possa importare correttamente dati con campi vettoriali multipli.(#33724)
- Migliorata l'affidabilità dell'importazione controllando l'esistenza di un lavoro di importazione prima dell'avvio.(#33673)
- Migliorata la gestione dell'indice HNSW sparse (funzionalità interna)(#33714)
- Pulita la memoria vettoriale per evitare perdite di memoria(#33708)
- Assicurato un riscaldamento asincrono più fluido grazie alla correzione di un problema di blocco di stato.(#33687)
- Risolto un bug che poteva causare risultati mancanti negli iteratori delle query.(#33506)
- Corretto un bug che poteva causare una dimensione non uniforme dei segmenti di importazione (#33634).
- Corretta la gestione della dimensione dei dati per i tipi bf16, fp16 e vettori binari(#33488).
- Migliorata la stabilità risolvendo potenziali problemi con il compattatore L0(#33564)
- Assicurato che gli aggiornamenti della configurazione dinamica siano riflessi correttamente nella cache.(#33590)
- Migliorata l'accuratezza della metrica RootCoordQuotaStates (#33601)
- Assicurata la segnalazione accurata del numero di entità caricate nella metrica(#33522).
- Fornite informazioni più complete nei log delle eccezioni. (#33396)
- Ottimizzata la pipeline di query rimuovendo il controllore di gruppo non necessario(#33485)
- Utilizzato il percorso di archiviazione locale per un controllo più accurato della capacità del disco sul nodo indice.(#33505)
- Corretta la possibilità che hasMoreResult restituisca false quando il numero di hit è superiore al limite(#33642)
- Ritardato il caricamento dei bf nel delegatore per evitare che vengano caricati più volte quando il worker non ha più memoria(#33650) - Corretto un bug per cui queryHook non era in grado di riconoscere il tipo di vettore(#33911)
- Impedito l'uso della variabile di iterazione catturata partitionID (#33970)
- Corretto un bug che poteva causare l'incapacità di Milvus di creare AutoIndex su vettori binari e sparsi(#33867)
- Corretto un bug che può far sì che indexnode ritenti la creazione di un indice su parametri di indice non validi di tutti i vettori (#33878)
- Corretto il bug che quando i carichi e i rilasci avvengono in modo concomitante può mandare in crash il server(#33699)
- Migliorata la coerenza della cache per i valori di configurazione(#33797)
- Prevenuta la possibile perdita di dati durante la cancellazione(#33821)
- Assicurato che il campo DroppedAt (probabile timestamp di cancellazione) sia impostato dopo l'eliminazione delle raccolte (#33767).
- Corretto un problema che poteva causare una gestione non corretta delle dimensioni dei dati dei vettori binari da parte di Milvus(#33751)
- Impedito che le credenziali sensibili di Kafka vengano registrate in testo normale(#33694, #33747).
- Assicurato che Milvus possa importare correttamente dati con campi vettoriali multipli.(#33724)
- Migliorata l'affidabilità dell'importazione controllando l'esistenza di un lavoro di importazione prima dell'avvio.(#33673)
- Migliorata la gestione dell'indice HNSW sparse (funzionalità interna)(#33714)
- Pulita la memoria vettoriale per evitare perdite di memoria(#33708)
- Assicurato un riscaldamento asincrono più fluido grazie alla correzione di un problema di blocco di stato.(#33687)
- Risolto un bug che poteva causare risultati mancanti negli iteratori delle query.(#33506)
- Corretto un bug che poteva causare una dimensione non uniforme dei segmenti di importazione (#33634).
- Corretta la gestione della dimensione dei dati per i tipi bf16, fp16 e vettori binari(#33488).
- Migliorata la stabilità risolvendo potenziali problemi con il compattatore L0(#33564)
- Assicurato che gli aggiornamenti della configurazione dinamica siano riflessi correttamente nella cache.(#33590)
- Migliorata l'accuratezza della metrica RootCoordQuotaStates (#33601)
- Assicurata la segnalazione accurata del numero di entità caricate nella metrica(#33522).
- Fornite informazioni più complete nei log delle eccezioni. (#33396)
- Ottimizzata la pipeline di query rimuovendo il controllore di gruppo non necessario(#33485)
- Utilizzato il percorso di archiviazione locale per un controllo più accurato della capacità del disco sul nodo indice.(#33505)
- Corretta la possibilità che hasMoreResult restituisca false quando il numero di hit è superiore al limite(#33642)
- Ritardato il caricamento dei bf nel delegatore per evitare che vengano caricati più volte quando il worker non ha più memoria(#33650).
v2.4.4
Data di rilascio: 31 maggio 2024
Versione Milvus | Versione dell'SDK Python | Versione SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.4 | 2.4.3 | 2.4.1 | 2.4.2 |
Milvus v2.4.4 include diverse correzioni di bug critici e miglioramenti volti a migliorare le prestazioni e la stabilità. In particolare, è stato risolto un problema critico a causa del quale i registri delle statistiche degli inserti di massa non venivano raccolti in modo corretto, compromettendo potenzialmente l'integrità dei dati. Consigliamo vivamente a tutti gli utenti della versione 2.4 di effettuare l'aggiornamento a questa versione per beneficiare di queste correzioni.
Se utilizzate bulk insert, aggiornate alla v2.4.4 il prima possibile per garantire l'integrità dei dati.
Correzioni di bug critici
- Compilazione dell'ID del registro delle statistiche e convalida della sua correttezza(#33478)
Miglioramenti
Correzioni di bug
- Visualizzazione di collezioni vuote quando tutti i privilegi sono concessi(#33454)
- Assicurato il download e l'installazione di CMake per la piattaforma corrente, non solo x86_64(#33439)
v2.4.3
Data di rilascio: 29 maggio 2024
Versione di Milvus | Versione dell'SDK Python | Versione dell'SDK Java | Versione SDK Node.js |
---|---|---|---|
2.4.3 | 2.4.3 | 2.4.1 | 2.4.2 |
La versione 2.4.3 di Milvus ha introdotto una serie di funzionalità, miglioramenti e correzioni di bug per aumentare le prestazioni e l'affidabilità. Tra i miglioramenti più significativi, il supporto per l'inserimento massivo di vettori float sparsi e l'accelerazione ottimizzata del filtro bloom. I miglioramenti riguardano diverse aree, dagli aggiornamenti della configurazione dinamica all'ottimizzazione dell'uso della memoria. Le correzioni di bug hanno affrontato problemi critici come gli scenari di panico e hanno garantito un funzionamento più fluido del sistema. Questa release sottolinea il costante impegno di Milvus nel migliorare le funzionalità, ottimizzare le prestazioni e offrire un'esperienza utente solida.
Caratteristiche
- Supporto dell'inserimento massivo di vettori float sparsi per binlog/json/parquet(#32649)
Miglioramenti
- Implementato il canale di sorveglianza Datacoord/nodo basato su RPC(#32036)
- Ottimizzato il filtro bloom per accelerare il filtraggio delle cancellazioni(#32642, #33329, #33284)
- Caricamento dei dati grezzi tramite mmap se l'indice scalare non ha dati grezzi(#33317)
- Sincronizzata la configurazione di milvus in milvus.yaml(#33322, #32920, #32857, #32946)
- Aggiornata la versione di knowhere(#33310, #32931, #33043)
- Abilitato l'aggiornamento dinamico della politica del bilanciatore in QueryCoord(#33272)
- Utilizzato un logger precostituito nel buffer di scrittura per ridurre al minimo l'allocazione del logger (#33304)
- Migliorato il controllo dei parametri(#32777, #33271, #33218)
- Aggiunto un parametro per ignorare gli ID dei messaggi errati nel checkpoint(#33249)
- Aggiunta una configurazione per controllare la gestione dei fallimenti di inizializzazione per i plugin(#32680)
- Aggiunta la configurazione della coerenza del calcolo dei punteggi per knowhere(#32997)
- Introdotta un'opzione di configurazione per controllare l'inizializzazione dei permessi dei ruoli pubblici (#33174)
- Ottimizzato l'uso della memoria durante la lettura dei campi(#33196)
- Raffinata l'implementazione di Channel Manager v2(#33172, #33121, #33014)
- Aggiunta una funzione per tracciare la dimensione dei dati in memoria per binlog(#33025)
- Aggiunte metriche per le dimensioni dei file indice dei segmenti(#32979, #33305)
- Sostituito Delete con DeletePartialMatch per rimuovere le metriche(#33029)
- Ottenuta la dimensione dei dati relativi in base al tipo di segmento(#33017)
- Pulite le informazioni sui nodi dei canali nel meta store(#32988)
- Rimosso il rootcoord dal broker dei datanodi (#32818)
- Abilitato il caricamento in batch (#32788)
- Cambiato il numero di partizione predefinito a 16 quando si usa la chiave di partizione (#32950)
- Migliorate le prestazioni di riduzione delle query top-k molto grandi (#32871)
- Utilizzata la capacità di TestLocations per accelerare la scrittura e la compattazione(#32948)
- Ottimizzato il pool di parser dei piani per evitare ricicli inutili (#32869)
- Migliorata la velocità di caricamento (#32898)
- Utilizzato il livello di consistenza predefinito della raccolta per restv2(#32956)
- Aggiunta la risposta ai costi per l'API Rest (#32620)
- Abilitata la politica di bilanciamento esclusivo dei canali (#32911)
- Esposta l'API describedatabase nel proxy (#32732)
- Utilizzata la mappatura coll2replica quando si ottiene RG per collezione(#32892)
- Aggiunto un maggiore tracciamento per la ricerca e la query(#32734)
- Supportata la configurazione dinamica per la traccia di opentelemetria(#32169)
- Evitata l'iterazione sui risultati dei canali quando si aggiorna la leaderview(#32887)
- Ottimizzata la gestione degli offset vettoriali per il parquet(#32822)
- Migliorato il filtraggio dei segmenti dei datacoord con la raccolta(#32831)
- Regolato il livello e la frequenza dei log (#33042, #32838, #33337)
- Abilitato l'arresto del bilanciamento dopo che questo era stato sospeso(#32812)
- Aggiornata la cache del leader dello shard quando la posizione del leader è cambiata(#32470)
- Rimossi API e campi deprecati(#32808, #32704)
- Aggiunto metautil.channel per convertire i confronti tra stringhe in int(#32749)
- Aggiunte informazioni sul tipo per il messaggio di errore dello scrittore di payload e il log quando querynode ha trovato una nuova raccolta(#32522)
- Controllato il numero di partizione quando si crea una raccolta con una chiave di partizione(#32670)
- Rimosso il segmento legacy l0 se l'orologio fallisce(#32725)
- Migliorata la stampa del tipo di richiesta(#33319)
- Controllato che i dati del campo dell'array fossero nulli prima di ottenere il tipo(#33311)
- Restituito errore quando l'operazione di avvio Delete/AddNode del nodo non è riuscita(#33258)
- Consentito l'aggiornamento dell'ID del server del datanode (#31597)
- Unificata la pulizia delle metriche del querynode nella collection release(#32805)
- Corretta la versione errata della configurazione dell'indice automatico scalare(#32795)
- Raffinato il controllo dei parametri dell'indice per la creazione/alterazione dell'indice(#32712)
- Rimosso il recupero delle repliche ridondanti(#32985)
- Abilitata la meta tabella dei canali per scrivere più di 200k segmenti(#33300)
Correzioni di bug
- Corretto il panico quando il database non esisteva nell'intercettore del limite di velocità(#33308)
- Corretto il fallimento della raccolta delle metriche di quotacenter a causa di parametri errati(#33399)
- Corretto il panico se processactivestandby restituiva un errore(#33372)
- Corretto il troncamento dei risultati della ricerca in restful v2 quando nq > 1(#33363)
- Aggiunto il campo del nome del database per le operazioni di ruolo in restful v2(#33291)
- Corretto il limite di velocità globale che non funziona(#33336)
- Corretto il panico causato dal fallimento della costruzione dell'indice(#33314)
- Aggiunta la convalida per il vettore sparse in segcore per garantire la legalità(#33312)
- Rimossa l'attività da syncmgr dopo il completamento dell'attività(#33303)
- Corretto il fallimento del filtraggio della chiave di partizione durante l'importazione dei dati (#33277)
- Corretta l'impossibilità di generare traceID quando si usa noop exporter(#33208)
- Migliorato il recupero dei risultati delle query(#33179)
- Segnato l'abbandono del checkpoint del canale per prevenire la perdita di metriche di ritardo del checkpoint(#33201)
- Corretto il nodo di query che si blocca durante l'arresto dell'avanzamento(#33154)
- Corretti i segmenti mancanti nella risposta di flush (#33061)
- Rese idempotenti le operazioni di invio (#33053)
- Allocata nuova slice per ogni batch nel lettore di streaming(#33360)
- Pulito il nodo offline dal gruppo di risorse dopo il riavvio di QueryCoord(#33233)
- Rimosso il compattatore l0 in completedCompactor(#33216)
- Ripristinato il valore della quota quando si inizializza il limitatore(#33152)
- Risolto il problema del superamento del limite di etcd (#33041)
- Risolto il superamento del limite delle transazioni etcd a causa di troppi campi(#33040)
- Rimosso il rientro di RLock in GetNumRowsOfPartition(#33045)
- Avviato LeaderCacheObserver prima di SyncAll(#33035)
- Abilitato il bilanciamento del canale di standby rilasciato (#32986)
- Inizializzato il logger degli accessi prima dell'inizializzazione del server(#32976)
- Il compattatore è in grado di cancellare i segmenti vuoti(#32821)
- Riempito il numero di voce deltalog e l'intervallo di tempo nelle compattazioni l0(#33004)
- Corretto l'arresto anomalo del proxy dovuto alla corsa dei dati della cache del leader dello shard(#32971)
- Corretta l'unità di tempo per la metrica dell'indice di carico (#32935)
- Corretto il problema per cui il segmento sul nodo di query in arresto non poteva essere rilasciato con successo(#32929)
- Corretta la stima delle risorse dell'indice(#32842)
- Impostazione del checkpoint del canale alla posizione delta(#32878)
- Fatto in modo che syncmgr blocchi la chiave prima di restituire il futuro (#32865)
- Assicurato che l'indice invertito avesse un solo segmento(#32858)
- Corretto il trigger di compattazione che sceglie due segmenti identici(#32800)
- Corretto il problema per cui il nome della partizione non poteva essere specificato nell'importazione di binlog(#32730, #33027)
- Rese opzionali le colonne dinamiche nell'importazione di parquet(#32738)
- Saltato il controllo dell'ID automatico durante l'inserimento dei dati(#32775)
- Convalidato il numero di righe per i dati del campo di inserimento con lo schema(#32770)
- Aggiunti Wrapper e Keepalive per gli ID CTraceContext (#32746)
- Corretto il problema per cui il nome del database non veniva trovato nel meta-oggetto datacoord(#33412)
- Sincronizzato il segmento abbandonato per la partizione abbandonata (#33332)
- Corretto il fallimento della raccolta delle metriche di quotaCenter a causa di parametri errati(#33399)
v2.4.1
Data di rilascio: 6 maggio 2024
Versione Milvus | Versione dell'SDK Python | Versione dell'SDK Java | Versione dell'SDK Node.js |
---|---|---|---|
2.4.1 | 2.4.1 | 2.4.0 | 2.4.2 |
La versione 2.4.1 di Milvus apporta numerosi miglioramenti e correzioni di bug che mirano a migliorare le prestazioni, l'osservabilità e la stabilità del software. Questi miglioramenti includono un'API dichiarativa per i gruppi di risorse, una funzionalità di inserimento massivo migliorata che supporta i tipi di dati vettoriali Float16/BFloat16, un meccanismo raffinato di garbage collection (GC) che riduce le operazioni di lista per la memorizzazione degli oggetti e altre modifiche relative all'ottimizzazione delle prestazioni. Inoltre, le correzioni dei bug risolvono problemi quali errori di compilazione, corrispondenze fuzzy fallite su caratteri newline, tipi di dati dei parametri errati per le interfacce RESTful e errori di BulkInsert su file numpy quando sono abilitati i campi dinamici.
Modifiche di rottura
- Interruzione del supporto per la cancellazione con un'espressione di filtro vuota.(#32472)
Caratteristiche
- Aggiunto il supporto per i tipi di dati vettoriali Float16/BFloat16 in BulkInert(#32157).
- Miglioramento del vettore sparse float per supportare la ricerca iterativa a forza bruta e la ricerca per intervallo (#32635)
Miglioramenti
- Aggiunta l'API dichiarativa per i gruppi di risorse(#31930, #32297, #32536, #32666)
- Riscritto l'osservatore delle collezioni in QueryCoord per renderlo guidato dai task (#32441)
- Rifatto la struttura dei dati usata nel SyncManager di DataNode per ridurre l'uso della memoria e prevenire gli errori(#32673).
- Rivista l'implementazione della garbage collection per minimizzare le operazioni di lista associate alla memorizzazione degli oggetti(#31740)
- Ridotto l'uso della cpu quando il numero di raccolte è elevato(#32245)
- Migliorata la gestione di milvus.yaml generando automaticamente le voci di configurazione rilevanti nel file milvus.yaml attraverso il codice(#31832, #32357)
- Migliorate le prestazioni della query recuperando i dati dopo aver eseguito la riduzione locale (#32346).
- Aggiunta l'opzione WithBlock per la creazione del client etcd(#32641)
- Utilizzato client_request_id specificato dal client come TraceID se fornito dal client(#32264)
- Aggiunta l'etichetta db alle metriche per le operazioni di cancellazione e inserimento in blocco (#32611)
- Aggiunta la logica per saltare la verifica attraverso la configurazione per le colonne AutoID e PartitionKey (#32592)
- Raffinati gli errori relativi all'autenticazione(#32253)
- Affinati i log degli errori per AllocSegmentID in DataCoord(#32351, #32335)
- Rimosse le metriche duplicate(#32380, #32308) e ripulite quelle inutilizzate(#32404, #32515).
- Aggiunta opzione di configurazione per controllare se imporre l'attivazione della funzione partitionKey (#32433)
- Aggiunta un'opzione di configurazione per controllare la quantità massima di dati che possono essere inseriti in una singola richiesta(#32433).
- Parallelizzare l'operazione applyDelete a livello di segmento per accelerare l'elaborazione dei messaggi Delete da parte del delegatore(#32291)
- Usato l'indice(#32232, #32505, #32533, #32595) e l'add cache(#32580) per accelerare le operazioni di filtraggio frequenti in QueryCoord.
- Riscritta la struttura dei dati(#32273) e rifattorizzato il codice(#32389) per accelerare le operazioni più comuni in DataCoord.
- Rimosso openblas da conan(#32002).
Correzioni di bug
- Corretta la build milvus in rockylinux8(#32619)
- Corretti gli errori di compilazione per SVE su ARM(#32463, #32270)
- Corretto il problema del crash su immagini GPU basate su ARM(#31980)
- Corretta la query regex che non può gestire il testo con newline(#32569)
- Corretta la ricerca che ottiene risultati vuoti quando GetShardLeaders restituisce un elenco di nodi vuoto(#32685)
- Corretto l'errore sollevato da BulkInsert quando incontra campi dinamici in file numpy(#32596)
- Corretti bug relativi all'interfaccia RESTFulV2, inclusa un'importante correzione che permette ai parametri numerici nelle richieste di accettare input numerici invece che di tipo stringa(#32485, #32355)
- Corretta la perdita di memoria nel proxy rimuovendo l'evento watching config nel limitatore di velocità(#32313)
- Corretto il problema per cui il limitatore di velocità segnala erroneamente che la partizione non può essere trovata quando partitionName non è specificato(#32647)
- Aggiunto il rilevamento dei casi in cui Collection si trova nello stato di recupero e non viene caricato nel tipo di errore.(#32447)
- Corretta la metrica negativa del numero di entità interrogabili (#32361).
v2.4.0
Data di rilascio: 17 aprile 2024
Versione Milvus | Versione dell'SDK Python | Versione SDK Node.js |
---|---|---|
2.4.0 | 2.4.0 | 2.4.0 |
Siamo entusiasti di annunciare il lancio ufficiale di Milvus 2.4.- Basandoci sulle solide fondamenta della release 2.4.0-rc.1, ci siamo concentrati sulla risoluzione dei bug critici segnalati dai nostri utenti, preservando le funzionalità esistenti. Inoltre, Milvus 2.4.0 introduce una serie di ottimizzazioni volte a migliorare le prestazioni del sistema, a migliorare l'osservabilità attraverso l'incorporazione di varie metriche e a snellire la base di codice per una maggiore semplicità.
Miglioramenti
- Supporto per le connessioni MinIO TLS(#31396, #31618)
- Supporto dell'AutoIndex per i campi scalari(#31593)
- Rifattorizzazione della ricerca ibrida per percorsi di esecuzione coerenti con la ricerca regolare(#31742, #32178)
- Filtraggio accelerato grazie alla rifattorizzazione di bitset e bitset_view(#31592, #31754, #32139)
- I task di importazione ora supportano l'attesa per il completamento dell'indice dei dati(#31733)
- Migliorata la compatibilità dell'importazione(#32121), la pianificazione dei task(#31475) e i limiti sulla dimensione e sul numero dei file importati(#31542).
- Semplificazione del codice, compresa la standardizzazione dell'interfaccia per il controllo dei tipi(#31945, #31857), la rimozione di codice e metriche deprecate(#32079, #32134, #31535, #32211, #31935) e la normalizzazione dei nomi delle costanti(#31515).
- Nuova metrica per la latenza del punto di controllo del canale di destinazione corrente di QueryCoord(#31420)
- Nuova etichetta db per le metriche comuni(#32024)
- Nuove metriche relative al conteggio delle entità cancellate, indicizzate e caricate, con l'inclusione di etichette come collectionName e dbName(#31861)
- Miglioramenti nella gestione degli errori per i tipi di vettore non corrispondenti(#31766)
- Supporto per il lancio di errori invece che per il crash quando l'indice non può essere costruito(#31845)
- Supporto per l'invalidazione della meta-cache del database quando si eliminano i database(#32092)
- Rifattorizzazione dell'interfaccia per la distribuzione dei canali(#31814) e la gestione delle viste leader (#32127)
- Rifattorizzazione dell'interfaccia del gestore della distribuzione dei canali(#31814) e rifattorizzazione dell'interfaccia del gestore della vista leader(#32127)
- Elaborazione batch(#31632), aggiunta di informazioni di mappatura(#32234, #32249) ed evitamento dell'uso di lock(#31787) per accelerare le operazioni invocate di frequente.
Modifiche di rottura
- Interruzione della ricerca di raggruppamenti su vettori binari(#31735)
- Interruzione della ricerca di raggruppamento con ricerca ibrida(#31812)
- Interruzione dell'indice HNSW su vettori binari(#31883)
Correzioni di bug
- Miglioramento dei controlli del tipo di dati e del valore per le query e gli inserimenti per prevenire gli arresti anomali(#31478, #31653, #31698, #31842, #32042, #32251, #32204)
- Correzioni di bug dell'API RESTful (#32160)
- Miglioramento della previsione dell'utilizzo delle risorse degli indici invertiti (#31641)
- Risoluzione di problemi di connessione con etcd quando l'autorizzazione è abilitata(#31668)
- Aggiornamento della sicurezza per il server nats (#32023)
- Memorizzati i file degli indici invertiti in un percorso di archiviazione locale di QueryNode invece che in /tmp(#32210)
- Risolte le perdite di memoria dei datacoord per collectionInfo(#32243)
- Risolti i bug relativi a fp16/bf16 che potevano causare panico di sistema(#31677, #31841, #32196)
- Risolti problemi con la ricerca per raggruppamento che restituiva risultati insufficienti(#32151)
- Adattamento della ricerca con iteratori per gestire in modo più efficace gli offset nella fase di riduzione e garantire risultati adeguati con "reduceStopForBest" abilitato(#32088)
v2.4.0-rc.1
Data di rilascio: 20 marzo 2024
Versione Milvus | Versione dell'SDK Python |
---|---|
2.4.0-rc.1 | 2.4.0 |
Questa versione introduce diverse funzionalità basate su scenari:
Nuovo indice GPU - CAGRA: grazie al contributo di NVIDIA, questo nuovo indice GPU offre un aumento delle prestazioni di 10 volte, soprattutto per le ricerche in batch. Per maggiori dettagli, consultare l'Indice GPU.
Ricercamultivettoriale e ibrida: Questa funzione consente di memorizzare le incorporazioni vettoriali di più modelli e di effettuare ricerche ibride. Per ulteriori informazioni, consultare la sezione Ricerca ibrida.
Vettori sparsi: Ideali per l'interpretazione e l'analisi delle parole chiave, i vettori sparsi sono ora supportati per l'elaborazione nella vostra raccolta. Per ulteriori informazioni, consultare Vettori sparsi.
Ricerca per raggruppamento: L'aggregazione categoriale migliora il richiamo a livello di documento per le applicazioni RAG (Retrieval-Augmented Generation). Per ulteriori informazioni, consultare la sezione Ricerca per gruppi.
Indice invertito e corrispondenza fuzzy: queste funzionalità migliorano il recupero delle parole chiave per i campi scalari. Per ulteriori informazioni, consultare Campi scalari indicizzati e ricerca filtrata.
Nuove funzionalità
Indice GPU - CAGRA
Desideriamo esprimere la nostra sincera gratitudine al team NVIDIA per il suo prezioso contributo a CAGRA, un indice di grafi basato su GPU allo stato dell'arte (SoTA) che può essere utilizzato online.
A differenza dei precedenti indici su GPU, CAGRA dimostra una superiorità schiacciante anche nelle query di piccoli lotti, un'area in cui gli indici su CPU tradizionalmente eccellono. Inoltre, le prestazioni di CAGRA nelle query batch di grandi dimensioni e la velocità di costruzione dell'indice, ambiti in cui gli indici su GPU già primeggiano, sono davvero impareggiabili.
Il codice di esempio si trova in example_gpu_cagra.py.
Vettore sparso (Beta)
In questa versione è stato introdotto un nuovo tipo di campo vettoriale, chiamato sparse vector. I vettori sparsi sono diversi dalle loro controparti dense, in quanto tendono ad avere un numero di dimensioni più elevato, con solo una manciata di dimensioni non nulle. Questa caratteristica offre una migliore interpretabilità grazie alla sua natura basata sui termini e può essere più efficace in alcuni domini. I modelli sparsi appresi, come SPLADEv2/BGE-M3, si sono dimostrati molto utili per i comuni compiti di classificazione di primo livello. Il principale caso d'uso di questa nuova funzionalità di Milvus è quello di consentire un'efficiente ricerca semantica approssimata dei vicini su vettori sparsi generati da modelli neurali come SPLADEv2/BGE-M3 e da modelli statistici come l'algoritmo BM25. Milvus supporta ora la memorizzazione, l'indicizzazione e la ricerca efficace e ad alte prestazioni (MIPS, Maximum Inner Product Search) di vettori sparsi.
Un esempio di codice si trova in hello_sparse.py.
Incorporamento multiplo e ricerca ibrida
Il supporto multi-vettore è la pietra miliare per le applicazioni che richiedono l'elaborazione di dati multi-modello o un mix di vettori densi e radi. Con il supporto multivettoriale, ora è possibile:
- Memorizzare le incorporazioni vettoriali generate per campioni di testo, immagini o audio non strutturati da più modelli.
- Condurre ricerche RNA che includono più vettori di ogni entità.
- Personalizzare le strategie di ricerca assegnando pesi ai diversi modelli di incorporamento.
- Sperimentare con vari modelli di incorporamento per trovare la combinazione ottimale di modelli.
Il supporto multivettoriale consente di memorizzare, indicizzare e applicare strategie di reranking a più campi vettoriali di tipo diverso, come FLOAT_VECTOR e SPARSE_FLOAT_VECTOR, in una collezione. Attualmente sono disponibili due strategie di reranking: Reciprocal Rank Fusion (RRF) e Average Weighted Scoring. Entrambe le strategie combinano i risultati della ricerca di diversi campi vettoriali in un insieme di risultati unificato. La prima strategia dà priorità alle entità che appaiono costantemente nei risultati di ricerca di diversi campi vettoriali, mentre l'altra strategia assegna dei pesi ai risultati di ricerca di ciascun campo vettoriale per determinare la loro importanza nel set di risultati finale.
Un esempio di codice si trova in hybrid_search.py.
Indice invertito e corrispondenza fuzzy
Nelle versioni precedenti di Milvus, per l'indicizzazione dei campi scalari venivano utilizzati indici di ricerca binaria basati sulla memoria e indici Marisa Trie. Tuttavia, questi metodi richiedevano molta memoria. L'ultima versione di Milvus impiega ora l'indice inverso basato su Tantivy, che può essere applicato a tutti i tipi di dati numerici e stringhe. Questo nuovo indice migliora notevolmente le prestazioni delle query scalari, riducendo di dieci volte la ricerca di parole chiave nelle stringhe. Inoltre, l'indice invertito consuma meno memoria, grazie a ulteriori ottimizzazioni nella compressione dei dati e al meccanismo di Memory-mapped storage (MMap) della struttura di indicizzazione interna.
Questa versione supporta anche le corrispondenze sfumate nel filtraggio scalare utilizzando prefissi, infissi e suffissi.
Esempi di codice si trovano in inverted_index_example.py e fuzzy_match.py.
Raggruppare la ricerca
È ora possibile aggregare i risultati della ricerca in base ai valori di uno specifico campo scalare. Questo aiuta le applicazioni RAG a implementare il richiamo a livello di documento. Si consideri un insieme di documenti, ogni documento suddiviso in vari passaggi. Ogni passaggio è rappresentato da un'incorporazione vettoriale e appartiene a un documento. Per trovare i documenti più rilevanti invece di disperdere i passaggi, è possibile includere l'argomento group_by_field nell'operazione search() per raggruppare i risultati in base all'ID del documento.
Un esempio di codice si trova in example_group_by.py.
Tipo di dati vettoriali Float16 e BFloat
L'apprendimento automatico e le reti neurali utilizzano spesso tipi di dati a mezza precisione, come Float16 e BFloat. Sebbene questi tipi di dati possano migliorare l'efficienza delle query e ridurre l'uso della memoria, hanno come contropartita una minore precisione. Con questa versione, Milvus supporta ora questi tipi di dati per i campi vettoriali.
Il codice di esempio si trova in float16_example.py e bfloat16_example.py.
Architettura aggiornata
Segmento L0
Questa versione include un nuovo segmento chiamato Segmento L0, progettato per registrare i dati cancellati. Questo segmento compatta periodicamente i record cancellati memorizzati e li divide in segmenti sigillati, riducendo il numero di flush dei dati necessari per le piccole cancellazioni e lasciando un'impronta di memoria ridotta. Con questo meccanismo, Milvus separa completamente la compattazione dei dati dal lavaggio dei dati, migliorando le prestazioni delle operazioni di cancellazione e di upsert.
BulkInsert rifatto
Questa versione introduce anche una logica di inserimento massivo migliorata. Ciò consente di importare più file in un'unica richiesta di bulk-insert. Con la versione rifattorizzata, sia le prestazioni che la stabilità del bulk insert sono migliorate in modo significativo. Anche l'esperienza dell'utente è stata migliorata, come la limitazione della velocità e i messaggi di errore più semplici. Inoltre, è possibile accedere facilmente agli endpoint di inserimento massivo tramite l'API RESTful di Milvus.
Archiviazione con memoria
Milvus utilizza lo storage memory-mapped (MMap) per ottimizzare l'uso della memoria. Invece di caricare il contenuto del file direttamente nella memoria, questo meccanismo mappa il contenuto del file nella memoria. Questo approccio ha come contropartita una riduzione delle prestazioni. Abilitando MMap per una raccolta indicizzata HNSW su un host con 2 CPU e 8 GB di RAM, è possibile caricare 4 volte più dati con una riduzione delle prestazioni inferiore al 10%.
Inoltre, questa versione consente anche un controllo dinamico e a grana fine su MMap senza la necessità di riavviare Milvus.
Per maggiori dettagli, consultare la sezione Memorizzazione MMap.
Altri
Milvus-CDC
Milvus-CDC è uno strumento di facile utilizzo per acquisire e sincronizzare i dati incrementali tra le istanze di Milvus, consentendo di semplificare il backup incrementale e il disaster recovery. In questa versione, Milvus-CDC ha migliorato la stabilità e la sua funzionalità Change Data Capture (CDC) è ora generalmente disponibile.
Per saperne di più su Milvus-CDC, consultate il repository GitHub e la panoramica di Milvus-CDC.
Interfacce perfezionate per MilvusClient
MilvusClient è un'alternativa facile da usare al modulo ORM. Adotta un approccio puramente funzionale per semplificare le interazioni con il server. Invece di mantenere un pool di connessioni, ogni MilvusClient stabilisce una connessione gRPC al server. Il modulo MilvusClient ha implementato la maggior parte delle funzionalità del modulo ORM. Per saperne di più sul modulo MilvusClient, visitate pymilvus e i documenti di riferimento.