Iniziare con Pgvector: Una guida per gli sviluppatori che esplorano i database vettoriali
Con le recenti tendenze tecnologiche in materia di IA generativa e [modelli linguistici di grandi dimensioni] (https://zilliz.com/glossary/large-language-models-(llms)), sono emersi modi più efficienti per memorizzare e interrogare i dati. I database tradizionali come MySQL e PostgreSQL sono stati per anni la scelta ideale per gli sviluppatori. Tuttavia, ultimamente, un nuovo tipo di database, chiamato database vettoriale, si è diffuso nella comunità.
Con l'estensione pgvector, gli sviluppatori possono memorizzare in modo efficiente i dati vettoriali in PostgreSQL, consentendo capacità avanzate di gestione dei dati.
I database vettoriali sono molto diversi dai database tradizionali, soprattutto per quanto riguarda i loro casi d'uso. In questa raccolta esploreremo Pgvector, un'estensione di PostgreSQL che consente di utilizzare l'archiviazione vettoriale con un database PostgreSQL. Esploreremo e capiremo anche i limiti di Pgvector, come si differenzia dai database vettoriali specializzati e come e dove è possibile utilizzare i database vettoriali per le proprie applicazioni.
Se siete sviluppatori che hanno familiarità con i database tradizionali e siete alla ricerca di nuove soluzioni, questa guida vi fornirà le conoscenze necessarie per iniziare a lavorare con Pgvector. Vi aiuterà anche a esplorare altri [database vettoriali] dedicati (https://zilliz.com/learn/what-is-vector-database) come alternativa a Pgvector.
L'intelligenza artificiale e l'apprendimento automatico sono oggi ampiamente utilizzati in diversi settori, tra cui la tecnologia, l'informatica, la medicina e le automobili. In questi campi, i dati sono rappresentati come vettori contenenti valori numerici che catturano proprietà e caratteristiche di dati non strutturati come immagini o testi. Gli algoritmi di apprendimento automatico utilizzano questi vettori come input per apprendere modelli e relazioni all'interno dei dati.
Pgvector è un'estensione open-source di PostgreSQL, un tradizionale database relazionale open-source. Supporta la memorizzazione e la ricerca di vettori provenienti da modelli di elaborazione del linguaggio naturale o di deep learning su PostgreSQL. Oppure, si può semplicemente vedere Pgvector come un'estensione del database vettoriale di PostgreSQL.
Una delle cose migliori del lavoro con Pgvector è che è simile a quello di un database SQL tradizionale come PostgreSQL. La sintassi delle operazioni vettoriali, come la creazione di colonne vettoriali, la creazione di una nuova tabella con colonne vettoriali e la ricerca dei vicini L2, è la stessa.
Se state lavorando ad applicazioni di intelligenza artificiale, a sistemi di raccomandazione o a qualsiasi altro progetto che coinvolga dati ad alta dimensionalità, la comprensione del database Pgvector - e di altri database vettoriali - può ampliare i vostri orizzonti nella gestione dei database. Inoltre, consente di memorizzare in modo efficiente i valori vettoriali senza richiedere una conoscenza approfondita della memorizzazione vettoriale e dei database.
Ora iniziamo a configurare Pgvector per integrarlo con PostgreSQL. Assicuratevi di avere installato PostgreSQL nel vostro sistema. Per Mac, è possibile installarlo facilmente tramite Homebrew:
brew install postgresql
È possibile verificare rapidamente se PostgreSQL è installato eseguendo il seguente comando:
psql --versione
Dovrebbe quindi fornire la versione di PostgreSQL installata sul sistema, come mostrato di seguito:
È inoltre necessario installare make. È possibile installarlo facilmente con Homebrew eseguendo il seguente comando:
brew install make
Quindi, dovrebbe installare make nel sistema come mostrato di seguito:
Prima di tuffarsi nel mondo dei database vettoriali, è necessario configurare Pgvector e integrarlo con PostgreSQL. Vediamo i passi necessari.
- Clonare il repo di Pgvector.
cd /tmp && git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
- Entrate in questa directory ed eseguite i seguenti comandi
make:
cd pgvector && make && make install
Integrare Pgvector con Postgres
Aprite l'interfaccia a riga di comando di PostgreSQL (psql) usando il seguente comando. Questo passo avvierà Postgres sulla riga di comando, in modo da poter eseguire i comandi di Postgres direttamente sul terminale:
psql
È possibile creare un utente per utilizzare Postgres utilizzando il seguente comando:
CREA UTENTE <utente> CON PASSWORD <password>
Quindi, accedere a tale utente utilizzando le credenziali create con il comando precedente. In alternativa, è possibile accedere a Postgres come superutente:
psql -U postgres
Ora creiamo un nuovo database con il seguente comando:
creare il database vectordb;
Selezioniamo questo database:
/c vectordb;
Quindi, abilitiamo l'estensione Pgvector per il nostro database vectordb:
creare l'estensione pgvector;
È sufficiente eseguire questo passaggio una sola volta per ogni database che si desidera utilizzare con Pgvector.
Esempio di Pgvector
Creiamo due colonne vettoriali, id e embedding, in una tabella chiamata vectors. La tabella e le colonne memorizzano i dati vettoriali in PostgreSQL.
CREARE TABELLA vettori (
id SERIAL PRIMARY KEY,
embedding float4[] -- La colonna del vettore
);
Ora possiamo inserire alcuni dati vettoriali nella nostra tabella vettori:
INSERT INTO vectors (embedding) VALUES
('{1.2, 0.8, -2.1}'),
('{-0.7, 2.4, 3.6}');
Per visualizzare la tabella, è sufficiente eseguire la query SELECT * sulla tabella vettori.
SELECT * FROM vectors;
Utilizzo di Pgvector per la ricerca della somiglianza tra vettori
Abbiamo discusso di come i database vettoriali possano essere utili per eseguire ricerche di similarità. Ecco come scrivere una semplice query di ricerca di similarità per trovare vettori simili a un dato vettore di interrogazione.
SELEZIONA * DA VETTORI
WHERE pgvector_cosine(embedding, '{0.9, -0.3, 1.8}') > 0.8;
Utilizziamo la normale query SELECT * con una clausola WHERE. Quindi, utilizziamo la funzione pgvector_cosine per specificare che vogliamo recuperare le righe in cui la somiglianza del coseno tra la colonna del vettore embedding e il vettore di query {0.9, -0.3, 1.8} sia maggiore di 0.8.
Introduzione ai database vettoriali
Cos'è un database vettoriale?
Un database vettoriale è un tipo specializzato di database progettato per memorizzare, gestire e interrogare in modo efficiente i dati vettoriali ad alta dimensione. A differenza dei database tradizionali, che sono ottimizzati per i dati strutturati come testo e numeri, i database vettoriali sono stati progettati per gestire i tipi di dati complessi utilizzati nell'apprendimento automatico e nell'elaborazione del linguaggio naturale. Questi database eccellono nell'esecuzione di ricerche di similarità, in cui l'obiettivo è trovare vettori simili a un determinato vettore di interrogazione in base a specifiche metriche di distanza.
I database vettoriali sono fondamentali nelle applicazioni che richiedono la memorizzazione e il recupero di dati vettoriali, come il riconoscimento delle immagini, i sistemi di raccomandazione e la [ricerca semantica] (https://zilliz.com/glossary/semantic-search). Sfruttando tecniche di indicizzazione avanzate, i database vettoriali possono recuperare in modo rapido e preciso i vettori rilevanti, rendendoli indispensabili per gli sviluppatori che lavorano con modelli di intelligenza artificiale e apprendimento automatico.
Vantaggi dei database vettoriali per gli sviluppatori
I database vettoriali offrono diversi vantaggi significativi agli sviluppatori:
Memorizzazione e recupero efficienti: Sono ottimizzati per memorizzare e recuperare in modo efficiente i dati vettoriali ad alta dimensionalità, garantendo la gestione efficace anche di grandi insiemi di dati.
Ricerche di somiglianza rapide e accurate: I database vettoriali supportano ricerche di similarità rapide, consentendo agli sviluppatori di trovare rapidamente i vettori più rilevanti. Questo è essenziale per applicazioni come i sistemi di raccomandazione e il riconoscimento delle immagini.
Supporto per diverse metriche di distanza e algoritmi: Offrono flessibilità nella scelta di diverse metriche di distanza (ad esempio, somiglianza del coseno, distanza euclidea) e algoritmi per soddisfare le esigenze di applicazioni specifiche.
Scalabilità e flessibilità: I database vettoriali possono gestire insiemi di dati su larga scala, rendendoli adatti ad applicazioni che richiedono la gestione di milioni o addirittura miliardi di vettori.
- Integrazione con i più diffusi linguaggi di programmazione e framework: Offrono una perfetta integrazione con vari linguaggi di programmazione e framework, consentendo agli sviluppatori di incorporare facilmente le funzionalità dei database vettoriali nei loro flussi di lavoro esistenti.
Sfruttando questi vantaggi, gli sviluppatori possono creare applicazioni più efficienti e scalabili che richiedono capacità avanzate di gestione dei dati vettoriali e di ricerca di similarità.
Comprendere i dati vettoriali
Che cosa sono i dati vettoriali?
I dati vettoriali sono un tipo di dati rappresentati come un elenco di numeri, noto come vettore. Ogni numero del vettore corrisponde a una specifica caratteristica o attributo dei dati rappresentati. I vettori sono versatili e possono essere utilizzati per rappresentare un'ampia gamma di tipi di dati, tra cui testo, immagini, audio e altro. Nel contesto dell'apprendimento automatico e dell'elaborazione del linguaggio naturale, i vettori rappresentano spesso il significato semantico di parole, frasi o interi documenti.
Una delle caratteristiche principali dei dati vettoriali è la loro elevata dimensionalità. I vettori possono avere migliaia o addirittura milioni di dimensioni, che catturano dettagli intricati e relazioni all'interno dei dati. Questa elevata dimensionalità pone delle sfide ai database tradizionali, che non sono ottimizzati per memorizzare e interrogare strutture di dati così complesse.
I database vettoriali affrontano queste sfide fornendo meccanismi efficienti di archiviazione e recupero specificamente progettati per i dati vettoriali ad alta dimensione. Consentono agli sviluppatori di eseguire ricerche di similarità vettoriale, con l'obiettivo di trovare vettori simili a un determinato vettore di interrogazione in base a criteri specifici. Questa capacità è essenziale per applicazioni come il riconoscimento delle immagini, i sistemi di raccomandazione e l'elaborazione del linguaggio naturale, dove la comprensione e lo sfruttamento delle relazioni tra i punti di dati è fondamentale.
Utilizzando i database vettoriali, gli sviluppatori possono memorizzare e interrogare in modo efficiente i dati vettoriali, aprendo nuove possibilità per la creazione di applicazioni avanzate di intelligenza artificiale e apprendimento automatico.
Indice e limitazioni di Pgvector
Sebbene Pgvector sia un ottimo modo per memorizzare e cercare i vettori, presenta alcuni svantaggi evidenti.
Pgvector ha problemi di scalabilità quando si tratta di gestire vettori ad alta dimensione. La memorizzazione dei dati vettoriali può anche introdurre ulteriori spese di archiviazione e indicizzazione. È inoltre importante considerare lo spazio di cui hanno bisogno i dati vettoriali e il modo in cui potrebbe influire sulle prestazioni delle query.
Inoltre, Pgvector supporta solo un tipo di indice chiamato IVFFlat. Questa limitazione influisce sulle proprietà dei vettori e sulle dimensioni dei set di dati memorizzati. Ciò significa anche che non esiste un'ottimizzazione predefinita dello storage con un indice Pgvector.
In sintesi, Pgvector è un'estensione di PostgreSQL che consente la memorizzazione e la ricerca di incorporazioni vettoriali. Tuttavia, ha capacità e prestazioni limitate. Fortunatamente, oggi sono disponibili molti database vettoriali dedicati, come Milvus, che fanno un lavoro molto migliore grazie a indici o algoritmi migliori.
Ora che abbiamo esplorato Pgvector e le sue applicazioni e svantaggi, introduciamo il concetto di database vettoriali dedicati.
A differenza di Pgvector, un plugin di ricerca vettoriale sopra un database tradizionale, i database vettoriali dedicati come Milvus e Zilliz sono costruiti appositamente per memorizzare e interrogare milioni o addirittura miliardi di dati vettoriali ad alta dimensionalità con risposte quasi in tempo reale. Sfruttano tecniche di indicizzazione avanzate per gestire in modo efficiente le ricerche di similarità, offrono prestazioni superiori per le operazioni basate sulla similarità, gestiscono dati vettoriali su larga scala e forniscono potenti API per applicazioni di intelligenza artificiale e apprendimento automatico.
Un database vettoriale dedicato come Milvus si rivolge a un'ampia gamma di casi d'uso, tra cui il recupero di immagini e video simili, l'elaborazione del linguaggio naturale, i sistemi di raccomandazione e altro ancora. La sua versatilità lo rende adatto a diversi progetti legati all'intelligenza artificiale. Vediamo come capire Milvus e come sfruttarlo nel cloud utilizzando .
Milvus è un database vettoriale open-source che fornisce una soluzione robusta per la gestione e l'interrogazione di miliardi di vettori ad alta dimensionalità. Offre numerose funzionalità interessanti, come l'indice GPU, Arm64, la ricerca per intervallo, l'upsert e il CDC, che garantiscono prestazioni ottimali e un'esperienza utente ottimale per la creazione di applicazioni di intelligenza artificiale e apprendimento automatico. Per ulteriori informazioni su queste funzionalità, consultare l'ultimo blog sulla release 2.3 di Milvus.
Zilliz Cloud è un servizio basato sul cloud che porta le istanze Milvus nel regno del software as a service (SaaS). Semplifica la distribuzione e la gestione dei database Milvus offrendo infrastruttura cloud, scalabilità e supporto operativo. Zilliz garantisce che gli sviluppatori possano sfruttare le capacità di Milvus senza la complessità di configurare e mantenere la propria infrastruttura. È proprio come utilizzare Amazon RDS per PostgreSQL nel cloud.
Zilliz Cloud offre un livello gratuito, dando a tutti gli sviluppatori lo stesso accesso a questo servizio di database vettoriale. Il livello gratuito offre fino a due collezioni, ciascuna delle quali può ospitare fino a 500.000 vettori con 768 dimensioni e ancora di più su scala ridotta. Questa generosa capacità consente di gestire i dati in modo significativo senza richiedere investimenti in infrastrutture.
Quando si passa a Postgres 12, assicurarsi che il vettore di estensione sia gestito correttamente per mantenere la compatibilità e la funzionalità.
Come scegliere tra Milvus e Zilliz
Se desiderate un controllo completo sul vostro database, potete optare per le istanze Milvus self-hosted. Tuttavia, è necessario implementare e gestire l'infrastruttura in base alle proprie esigenze e ai casi d'uso.
Se invece preferite utilizzare un database vettoriale basato sul cloud, potete utilizzare Zilliz Cloud. Zilliz consente di concentrarsi sulla creazione dell'applicazione sfruttando Milvus nel cloud, senza preoccuparsi della manutenzione dell'infrastruttura.
Milvus e Zilliz consentono agli sviluppatori di gestire in modo efficiente i dati vettoriali, ma si adattano a diverse preferenze di distribuzione. Sia che si propenda per la flessibilità self-hosted o per la semplicità del cloud, la collaborazione Milvus-Zilliz offre opzioni in linea con le esigenze del progetto.
Pgvector vs. Milvus e Zilliz: un confronto tra database vettoriali
Ora confrontiamo [https://zilliz.com/comparison] Pgvector con Milvus/Zilliz per quanto riguarda la facilità d'uso, le prestazioni e la flessibilità.
Pgvector si integra perfettamente con PostgreSQL, che è familiare agli sviluppatori che già utilizzano il database relazionale. Tuttavia, Milvus e Zilliz richiedono ulteriori configurazioni per installare i loro SDK e API. La buona notizia è che una volta configurato Milvus/Zilliz, la creazione di un servizio di ricerca di similarità su larga scala richiede meno di un minuto. Inoltre, sono disponibili SDK semplici e intuitivi per diversi linguaggi di programmazione.
A parte l'installazione, c'è un po' di curva di apprendimento quando li si usa. Pgvector sembra più facile da usare grazie alla sua familiarità con PostgreSQL.
Analisi delle prestazioni e della scalabilità della ricerca di similarità vettoriale
Una delle principali limitazioni di Pgvector è la sua limitata capacità di indicizzazione. Per le ricerche di similarità complesse, Milvus supera Pgvector grazie ai suoi meccanismi di indicizzazione ottimizzati, come dimostrato in questo benchmark.
Milvus sfrutta la ricerca approximate nearest neighbor per migliorare le prestazioni delle query, offrendo tempi di risposta più rapidi ma sacrificando una certa precisione rispetto alla ricerca exact nearest neighbor.
Pgvector e Milvus sono potenti stack di ricerca vettoriale progettati per gestire in modo efficiente dati vettoriali su larga scala. Tuttavia, Milvus/Zilliz è più scalabile e può gestire insiemi di dati con miliardi di incorporazioni vettoriali.
Insiemi di caratteristiche e flessibilità nelle incorporazioni vettoriali
Mentre Pgvector porta le funzionalità vettoriali in PostgreSQL, Milvus/Zilliz è un database vettoriale appositamente costruito con funzionalità specializzate per le applicazioni di intelligenza artificiale. Sono più ricchi di funzionalità e possono essere più utili per [casi d'uso dei database vettoriali] personalizzati (https://zilliz.com/vector-database-use-cases).
VectorDBBench è uno strumento di benchmarking open source per i database vettoriali. Mette a confronto i database vettoriali tradizionali e i servizi cloud disponibili sul mercato e fornisce risultati di benchmark imparziali per quanto riguarda le query al secondo (QPS), le query per dollaro (QP$) e la latenza P99.
Ad esempio, è possibile utilizzare VectorDBBench per confrontare Pgvector con Milvus o Zilliz. Secondo i risultati del benchmark, Milvus e Zilliz superano Pgvector per quanto riguarda QPS e latenza.
Nota: Si tratta di un punteggio da 1 a 100 basato sulle prestazioni di ciascun sistema in casi diversi secondo una regola specifica. Un punteggio più alto denota prestazioni migliori.
Nota: Si tratta di un punteggio >1 basato sulle prestazioni di ciascun sistema in casi diversi secondo una regola specifica. Un punteggio inferiore denota prestazioni migliori.
Con VectorDBBench è possibile capire rapidamente quale database ha le migliori prestazioni in termini di varie metriche. È inoltre possibile determinare quale database si adatta meglio alle proprie esigenze specifiche.
Pgvector apre nuove possibilità per la memorizzazione e l'interrogazione di dati vettoriali in PostgreSQL. Se avete già familiarità con PostgreSQL e volete esplorare i database vettoriali, Pgvector è un ottimo punto di partenza. Tuttavia, per le applicazioni di intelligenza artificiale con milioni o addirittura miliardi di ricerche di similarità vettoriale, le prestazioni di Pgvector potrebbero non essere sufficienti. Milvus e Zilliz offrono funzionalità specializzate che ottimizzano le prestazioni. Considerate i requisiti del vostro progetto ed esplorate questi database vettoriali per sbloccare il pieno potenziale dello storage vettoriale nelle vostre applicazioni.
Questo post è stato scritto da Siddhant Varma. [Siddhant] (https://www.linkedin.com/in/siddhantvarma99/) è uno sviluppatore JavaScript full-stack esperto di ingegneria front-end. Ha lavorato alla scalata di diverse startup in India e ha esperienza nella costruzione di prodotti nei settori Ed-Tech e sanitario. Siddhant ha una passione per l'insegnamento e un talento per la scrittura. Ha anche insegnato programmazione a molti laureati, aiutandoli a diventare migliori sviluppatori del futuro.
Ultimo aggiornamento: 23 gennaio 2024
Continua a leggere

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
Take a look at the latest release of Zilliz Cloud.

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
This dual recognition shows that Zilliz solved a challenge that has long defined the database industry—delivering enterprise-grade performance without the complexity typically associated with it.
