Als Solutions Architect mit über zwei Jahrzehnten Erfahrung in relationalen Datenbankensystemen habe ich kürzlich anfangen gearbeitet, die neue Vector Edition von MariaDB zu erkunden, um zu sehen, ob sie einige der AI-Daten Herausforderungen, die wir zu begegnen haben, bewältigen kann. Ein schneller Blick schien recht überzeugend zu sein, insbesondere mit der Möglichkeit, die magievolle AI direkt in eine normale Datenbankumgebung zu integrieren. Allerdings wollte ich dies mit einem einfachen Nutzungsfall testen, um zu sehen, wie sie praktisch leistet.
In diesem Artikel teile ich meine praktischen Erfahrungen und Beobachtungen über die Vektorkapazitäten von MariaDB durch Ausführung eines einfachen Nutzungsfalls mit. Speziell werden hier Testkundenbewertungen in MariaDB geladen und schnelle Ähnlichkeitssuchen durchgeführt, um verwandte Bewertungen zu finden.
Umgebungsaufbau
Mein Experiment begann mit der Setup eines Docker-Containers mit MariaDBs letzter Veröffentlichung (11.6), die Vektorkapazitäten beinhaltet.
# Pull the latest release
docker pull quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview
# Update password
docker run -d --name mariadb_vector -e MYSQL_ROOT_PASSWORD=<replace_password> quay.io/mariadb-foundation/mariadb-devel:11.6-vector-preview
Jetzt erstellen wir eine Tabelle und füllen sie mit Beispiel-Kundenbewertungen, die mit Meinungen Bewertungen und Embeddings für jede Bewertung aufgefüllt sind. Um Text-Embeddings zu generieren, verwende ich SentenceTransformer
, das es uns erlaubt, vorgefertigte Modelle zu verwenden. Speziell habe ich mich für ein Modell namens paraphrase-MiniLM-L6-v2 entschieden, das unsere Kundenbewertungen in einen 384-dimensionalen Raum abbildet.
import mysql.connector
import numpy as np
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
# I already have a database created with a name vectordb
connection = mysql.connector.connect(
host="localhost",
user="root",
password="<password>", # Replace me
database="vectordb"
)
cursor = connection.cursor()
# Create a table to store customer reviews with sentiment score and embeddings.
cursor.execute("""
CREATE TABLE IF NOT EXISTS customer_reviews (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name INT,
customer_review TEXT,
customer_sentiment_score FLOAT,
customer_review_embedding BLOB,
INDEX vector_idx (customer_review_embedding) USING HNSW
) ENGINE=ColumnStore;
""")
# Sample reviews
reviews = [
(1, "This product exceeded my expectations. Highly recommended!", 0.9),
(1, "Decent quality, but pricey.", 0.6),
(2, "Terrible experience. The product does not work.", 0.1),
(2, "Average product, ok ok", 0.5),
(3, "Absolutely love it! Best purchase I have made this year.", 1.0)
]
# Load sample reviews into vector DB
for product_id, review_text, sentiment_score in reviews:
embedding = model.encode(review_text)
cursor.execute(
"INSERT INTO customer_reviews (product_id, review_text, sentiment_score, review_embedding) VALUES (%s, %s, %s, %s)",
(product_id, review_text, sentiment_score, embedding.tobytes()))
connection.commit()
connection.close()
Nun nutzen wir die Vektorfähigkeiten von MariaDB, um ähnliche Bewertungen zu finden. Dies ist wie gefragt: „Was sagten andere Kunden ähnlich zu dieser Bewertung?„. In dem untenstehenden Beispiel finde ich die zwei ähnlichsten Bewertungen zu einer Kundenbewertung, die sagt „Ich bin super zufrieden!„. Um dies zu tun, verwende ich eine der Vektorfunktionen (VEC_Distance_Euclidean
), die in der neuesten Veröffentlichung verfügbar sind.
# Convert the target customer review into vector
target_review_embedding = model.encode("I am super satisfied!")
# Find top 2 similar reviews using MariaDB's VEC_Distance_Euclidean function
cursor.execute("""
SELECT review_text, sentiment_score, VEC_Distance_Euclidean(review_embedding, %s) AS similarity
FROM customer_reviews
ORDER BY similarity
LIMIT %s
""", (target_review_embedding.tobytes(), 2))
similar_reviews = cursor.fetchall()
Beobachtungen
- Es ist einfach zu setzen und wir können sowohl strukturierte Daten (wie Produkt-IDs und Meinungen Bewertungen), unstrukturierte Daten (Bewertungstexte) und ihre Vektorabbildungen in einer einzigen Tabelle kombinieren.
- Ich mag seine Fähigkeit, dass man SQL-Syntax neben Vektoroperationen verwenden kann, was es für Teams einfacher macht, die bereits mit relationalen Datenbanken vertraut sind. Hier ist die komplette Liste der unterstützten Vektorfunktionen in dieser Veröffentlichung.
- Der HNSW-Index verbesserte die Leistung der Ähnlichkeitssuche für größere Datenmengen, die ich bisher getestet habe.
Fazit
Insgesamt bin ich beeindruckt! Die MariaDB Vector Edition wird bestimmte AI-getriebene Architekturen vereinfachen. Sie verbindet den traditionellen Datenbanken-Welt mit den sich entwickelnden Anforderungen von AI-Tools. In den kommenden Monaten freue ich mich darauf, zu sehen, wie diese Technologie maturiert und wie die Community sie in realen Weltanwendungen aufnimmt.
Source:
https://dzone.com/articles/mariadb-vector-edition-hands-on-review