TiDB vs Neo4j Scegliere il database vettoriale giusto per le tue app di IA
Che cos'è un database vettoriale?
Prima di confrontare TiDB e Neo4j, esploriamo innanzitutto il concetto di database vettoriali.
Un database vettoriale è progettato specificamente per archiviare ed eseguire query su vettori ad alta dimensionalità, che sono rappresentazioni numeriche di dati non strutturati. Questi vettori codificano informazioni complesse, come il significato semantico del testo, le caratteristiche visive delle immagini o gli attributi dei prodotti. Consentendo ricerche di similarità efficienti, i database vettoriali svolgono un ruolo fondamentale nelle applicazioni di IA, permettendo un'analisi e un recupero dei dati più avanzati.
I casi d'uso comuni per i database vettoriali includono raccomandazioni di prodotti per l'e-commerce, piattaforme di scoperta dei contenuti, rilevamento di anomalie nella cybersecurity, analisi di immagini mediche e attività di elaborazione del linguaggio naturale (NLP). Svolgono inoltre un ruolo cruciale nella Retrieval Augmented Generation (RAG), una tecnica che migliora le prestazioni dei modelli linguistici di grandi dimensioni (LLM) fornendo conoscenze esterne per ridurre problemi come le allucinazioni dell'IA.
Sul mercato sono disponibili molti tipi di database vettoriali, tra cui:
- Database vettoriali progettati appositamente come Milvus, Zilliz Cloud (Milvus completamente gestito)
- Librerie di ricerca vettoriale come Faiss e Annoy.
- Database vettoriali leggeri come Chroma e Milvus Lite.
- Database tradizionali con componenti aggiuntivi per la ricerca vettoriale in grado di eseguire ricerche vettoriali su piccola scala.
TiDB è un database tradizionale e Neo4j è un database a grafo. Entrambi con ricerca vettoriale come componente aggiuntivo. Questo post confronta le loro capacità di ricerca vettoriale.
TiDB: Panoramica e tecnologia di base
TiDB, sviluppato da PingCAP, è un database SQL distribuito open-source che offre funzionalità di elaborazione ibrida transazionale e analitica (HTAP). È compatibile con MySQL, il che lo rende facile da adottare per i team già familiari con l'ecosistema MySQL. L'architettura SQL distribuita di TiDB offre scalabilità orizzontale come i database NoSQL, pur mantenendo il modello relazionale dei database SQL, rendendolo altamente flessibile per gestire sia carichi di lavoro transazionali sia analitici.
Uno dei principali punti di forza di TiDB è la sua architettura HTAP, che gli consente di elaborare carichi di lavoro transazionali (OLTP) e analitici (OLAP) in un singolo database, riducendo la necessità di sistemi separati. Inoltre, la compatibilità di TiDB con MySQL rende semplice l'integrazione in ambienti esistenti che si basano su MySQL senza modifiche significative al codice dell'applicazione. Il database dispone anche di auto-sharding, distribuendo automaticamente i dati tra i nodi per migliorare le prestazioni di lettura e scrittura mantenendo al contempo una forte coerenza.
TiDB supporta la ricerca vettoriale tramite l'integrazione con librerie e plugin esterni, consentendo una gestione e un'interrogazione efficienti dei dati vettorializzati. Questa funzionalità, combinata con l'architettura HTAP di TiDB, lo rende un'opzione versatile per le aziende che necessitano di capacità di ricerca vettoriale insieme a carichi di lavoro transazionali e analitici. L'architettura distribuita di TiDB gli consente di gestire query vettoriali su larga scala una volta configurate le impostazioni necessarie.
Sebbene l'inclusione di funzionalità di ricerca vettoriale in TiDB richieda una configurazione aggiuntiva, la compatibilità SQL del sistema consente agli sviluppatori di combinare la ricerca vettoriale con le query relazionali tradizionali. Questa flessibilità rende TiDB adatto ad applicazioni complesse che richiedono sia funzionalità di ricerca vettoriale sia capacità di database relazionale, offrendo una soluzione completa per diverse esigenze di gestione dei dati.
Neo4j: Le basi
La ricerca vettoriale di Neo4j consente agli sviluppatori di creare indici vettoriali per cercare dati simili all'interno del loro grafo. Questi indici funzionano con proprietà dei nodi che contengono embedding vettoriali - rappresentazioni numeriche di dati come testo, immagini o audio che catturano il significato dei dati. Il sistema supporta vettori fino a 4096 dimensioni e funzioni di similarità coseno ed euclidea.
L'implementazione utilizza grafi Hierarchical Navigable Small World (HNSW) per eseguire rapide ricerche approssimate dei k vicini più prossimi. Quando si interroga un indice vettoriale, si specifica quanti vicini si desidera recuperare e il sistema restituisce i nodi corrispondenti ordinati per punteggio di similarità. Questi punteggi vanno da 0 a 1, dove valori più alti indicano una maggiore similarità. L'approccio HNSW funziona bene mantenendo connessioni tra vettori simili e consentendo al sistema di saltare rapidamente a diverse parti dello spazio vettoriale.
La creazione e l'utilizzo degli indici vettoriali avvengono tramite il linguaggio di query. È possibile creare indici con il comando CREATE VECTOR INDEX e specificare parametri come le dimensioni del vettore e la funzione di similarità. Il sistema convaliderà che vengano indicizzati solo vettori delle dimensioni configurate. L'interrogazione di questi indici viene eseguita con la procedura db.index.vector.queryNodes, che prende come input il nome di un indice, il numero di risultati e il vettore di query.
L'indicizzazione vettoriale di Neo4j dispone di ottimizzazioni delle prestazioni come la quantizzazione, che riduce l'utilizzo della memoria comprimendo le rappresentazioni vettoriali. È possibile regolare il comportamento dell'indice con parametri come il numero massimo di connessioni per nodo (M) e il numero di vicini più prossimi tracciati durante l'inserimento (ef_construction). Sebbene questi parametri consentano di bilanciare accuratezza e prestazioni, le impostazioni predefinite funzionano bene per la maggior parte dei casi d'uso. Il sistema supporta anche indici vettoriali sulle relazioni dalla versione 5.18, quindi è possibile cercare dati simili nelle proprietà delle relazioni.
Questo consente agli sviluppatori di creare applicazioni basate sull'IA. Combinando query su grafi con la ricerca per similarità vettoriale, le applicazioni possono trovare dati correlati in base al significato semantico, non a corrispondenze esatte. Ad esempio, un sistema di raccomandazione di film potrebbe utilizzare vettori di embedding della trama per trovare film simili, sfruttando al contempo la struttura del grafo per garantire che le raccomandazioni provengano dallo stesso genere o dalla stessa epoca preferiti dall'utente.
Differenze chiave
Metodologia di ricerca
TiDB: TiDB utilizza librerie e plugin esterni per la ricerca vettoriale, quindi il sistema integra strumenti di terze parti per gestire dati vettorializzati. Questo offre flessibilità ma dipende fortemente dalla configurazione esterna per ottimizzare le prestazioni delle query vettoriali. Può eseguire carichi di lavoro di elaborazione transazionale e analitica ibrida (HTAP), quindi è una buona scelta per applicazioni che combinano la ricerca vettoriale con operazioni tradizionali basate su SQL.
Neo4j: Neo4j supporta l'indicizzazione vettoriale utilizzando grafi Hierarchical Navigable Small World (HNSW). Può eseguire ricerche efficienti approssimate dei k vicini più prossimi (k-NN) con supporto integrato per metriche di similarità coseno ed euclidea. La metodologia di Neo4j è strettamente integrata con la sua architettura a grafo, quindi può gestire query basate su vettori insieme a operazioni di attraversamento del grafo.
Dati
TiDB: In quanto database SQL distribuito, TiDB è efficace nella gestione di dati strutturati con compatibilità MySQL. Supporta carichi di lavoro ibridi e può integrare dati non strutturati tramite strumenti esterni, quindi è adatto ad ambienti che necessitano di una combinazione di gestione di dati relazionali e vettoriali. Ma questa flessibilità comporta una configurazione aggiuntiva per attività specifiche vettoriali.
Neo4j: Neo4j è efficace nella modellazione dei dati a grafo, ideale per gestire dati altamente connessi e semi-strutturati. Le sue funzionalità native di ricerca vettoriale completano la sua forza nell’attraversare relazioni e gestire strutture a grafo. È adatto per applicazioni come sistemi di raccomandazione, rilevamento delle frodi o knowledge graph che richiedono comprensione semantica e connessioni tra entità.
Scalabilità e prestazioni
TiDB: TiDB è scalabile orizzontalmente grazie alla sua architettura distribuita. L’auto-sharding garantisce che i dati siano distribuiti uniformemente tra i nodi, quindi è adatto per carichi di lavoro su larga scala. Tuttavia, una ricerca vettoriale ad alte prestazioni può richiedere la messa a punto delle librerie esterne e l’integrazione ottimale con l’architettura di TiDB.
Neo4j: Le prestazioni della ricerca vettoriale di Neo4j sono ottimizzate tramite grafi HNSW, che riducono il tempo di query strutturando le connessioni tra vettori simili. Funzionalità come la quantizzazione aiutano a risparmiare memoria mantenendo l’accuratezza delle query. Sebbene Neo4j scali bene per i carichi di lavoro a grafo, la gestione di dataset vettoriali molto grandi può richiedere un’attenta pianificazione delle risorse.
Flessibilità e personalizzazione
TiDB: Flessibile grazie alla compatibilità con SQL e all’integrazione con applicazioni esistenti basate su MySQL. Può combinare query vettoriali e relazionali, quindi è adatto per applicazioni che richiedono entrambe. Tuttavia, la personalizzazione spesso dipende dalle capacità delle librerie vettoriali integrate.
Neo4j: Altamente personalizzabile per applicazioni basate su grafi, Neo4j consente agli sviluppatori di regolare i parametri di indicizzazione vettoriale per bilanciare prestazioni e accuratezza. Può integrare la ricerca vettoriale nelle query a grafo, quindi rappresenta un vantaggio unico per applicazioni che si basano su relazioni semantiche.
Integrazione ed ecosistema
TiDB: TiDB si integra bene con gli strumenti e l’ecosistema MySQL, quindi è una scelta naturale per i team già inseriti in un workflow basato su SQL. La ricerca vettoriale richiede plugin esterni, ma la sua compatibilità con l’ecosistema MySQL più ampio ne facilita l’adozione.
Neo4j: Le capacità di integrazione di Neo4j sono forti nell’ecosistema incentrato sui grafi, con un buon supporto per workflow AI/ML. Può gestire operazioni su grafi e vettori in un unico ambiente, quindi è un grande vantaggio per applicazioni basate sull’AI.
Facilità d’uso
TiDB: Se hai familiarità con MySQL, la curva di apprendimento di TiDB è più bassa. Tuttavia, configurare la ricerca vettoriale richiede la comprensione delle librerie esterne utilizzate, il che può aggiungere complessità.
Neo4j: Sebbene il linguaggio di query a grafo di Neo4j (Cypher) abbia una curva di apprendimento più ripida per gli utenti SQL, la sua ricerca vettoriale nativa è facile da usare e richiede meno configurazione esterna rispetto a TiDB.
Costo
TiDB: I costi dipendono dal numero di nodi distribuiti e dai costi aggiuntivi di licenza o operativi delle librerie vettoriali integrate. Sono disponibili servizi gestiti, ma aumentano il costo complessivo.
Neo4j: Il costo di Neo4j dipende dalla scala dei carichi di lavoro a grafo e dalle funzionalità richieste. Per la ricerca vettoriale, l’implementazione nativa ha un overhead inferiore rispetto alla dipendenza di TiDB da strumenti di terze parti.
Sicurezza
TiDB: Funzionalità di sicurezza basate su SQL, crittografia, controllo degli accessi, autenticazione. La sicurezza per le operazioni vettoriali dipende dalla libreria esterna utilizzata.
Neo4j: Funzionalità di sicurezza integrate come crittografia e controlli di accesso granulari per dati a grafo e vettoriali. Integra la ricerca vettoriale nella piattaforma principale, quindi la gestione della sicurezza è semplificata.
Quando usare TiDB
TiDB è indicato per applicazioni che necessitano di gestione distribuita dei dati su larga scala con carichi di lavoro sia transazionali sia analitici. HTAP consente di gestire dati strutturati e dati semi-strutturati o non strutturati tramite integrazioni esterne. Se il tuo caso d’uso consiste nel combinare la ricerca vettoriale con query SQL o integrare operazioni vettoriali in un ambiente esistente compatibile con MySQL, TiDB è una soluzione flessibile e scalabile. È perfetto per scenari in cui sono importanti una forte coerenza e la scalabilità attraverso sistemi distribuiti.
Quando usare Neo4j
Neo4j è per applicazioni basate su modelli di dati a grafo e che necessitano di funzionalità avanzate per esplorare le relazioni tra entità. La sua ricerca vettoriale nativa, integrata con le query su grafo, è perfetta per creare applicazioni basate sull’AI come sistemi di raccomandazione, knowledge graph o sistemi di rilevamento delle frodi. Se ti concentri sulla comprensione semantica e sulla ricerca di connessioni in dataset altamente connessi, l’approccio incentrato sui grafi di Neo4j con indicizzazione vettoriale è il vantaggio unico. Combinare l’attraversamento del grafo con la ricerca per similarità è efficiente per carichi di lavoro che danno priorità all’esplorazione di dati connessi.
Riepilogo
TiDB e Neo4j sono pensati per casi d’uso diversi, ciascuno eccelle in aree differenti. Il punto di forza di TiDB è nell’elaborazione ibrida transazionale e analitica, nella scalabilità distribuita e nella compatibilità con MySQL, quindi è una buona scelta per applicazioni orientate a SQL che necessitano di ricerca vettoriale. L’architettura basata su grafi di Neo4j e l’indicizzazione vettoriale nativa sono perfette per applicazioni che danno priorità alle relazioni e agli insight semantici. Scegli tra i due in base al tuo caso d’uso: hai bisogno di solide capacità SQL distribuite con ricerca vettoriale o di un database a grafo che integri la ricerca vettoriale nei workflow di dati connessi. Valuta i tuoi tipi di dati, i pattern di carico di lavoro e i requisiti di prestazioni per decidere.
Leggi questo per ottenere una panoramica di TiDB e Neo4j, ma per valutarli devi farlo in base al tuo caso d’uso. Uno strumento che può aiutare in questo è VectorDBBench, uno strumento di benchmarking open-source per il confronto di database vettoriali. Alla fine, un benchmarking approfondito con i tuoi dataset e i tuoi pattern di query sarà fondamentale per prendere una decisione tra questi due approcci potenti ma diversi alla ricerca vettoriale nei sistemi di database distribuiti.
Utilizzare VectorDBBench open-source per valutare e confrontare i database vettoriali autonomamente
VectorDBBench è uno strumento di benchmarking open-source per utenti che necessitano di sistemi di archiviazione e recupero dati ad alte prestazioni, in particolare database vettoriali. Questo strumento consente agli utenti di testare e confrontare diversi sistemi di database vettoriali come Milvus e Zilliz Cloud (il Milvus gestito) utilizzando i propri dataset e trovare quello più adatto ai propri casi d’uso. Con VectorDBBench, gli utenti possono prendere decisioni basate sulle prestazioni effettive dei database vettoriali anziché su affermazioni di marketing o voci di corridoio.
VectorDBBench è scritto in Python e concesso in licenza con licenza open-source MIT, il che significa che chiunque può usarlo, modificarlo e distribuirlo liberamente. Lo strumento è mantenuto attivamente da una community di sviluppatori impegnati a migliorarne funzionalità e prestazioni.
Scarica VectorDBBench dal suo repository GitHub per riprodurre i nostri risultati di benchmark o ottenere risultati prestazionali sui tuoi dataset.
Dai una rapida occhiata alle prestazioni dei database vettoriali mainstream nella classifica di VectorDBBench.
Leggi i seguenti blog per saperne di più sulla valutazione dei database vettoriali.
Ulteriori risorse su VectorDB, GenAI e ML
Continua a leggere

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.

Zilliz Cloud Launches in AWS Australia, Expanding Global Reach to Australia and Neighboring Markets
We're thrilled to announce that Zilliz Cloud is now available in the AWS Sydney, Australia region (ap-southeast-2).
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


