OceanBase SeekDB ist eine Vektorabfrage-Engine im Kern der OceanBase-Datenbank, die speziell für das KI-Zeitalter entwickelt wurde. Anstatt ein eigenständiges Datenbankprodukt zu sein, das separat betrieben und gewartet werden muss, bettet SeekDB die Fähigkeiten einer Vektordatenbank vollständig in OceanBase ein, eine ausgereifte verteilte relationale Datenbank. Als erstes Prinzip verleiht SeekDB relationalen Datenbanken die Fähigkeit, unstrukturierte Daten zu "verstehen" (z.B. Vektoren, die durch Text, Bilder und Audio generiert werden). Es löst die Probleme der Datenfragmentierung, der Verzögerungen bei der Datensynchronisation und der Komplexität von Betrieb und Wartung, die durch die Trennung von "relationalen Datenbanken, die Geschäftsdaten speichern" und "dedizierten Vektordatenbanken, die Merkmalsdaten speichern" in der traditionellen KI-Anwendungsarchitektur entstehen. SeekDB basiert auf der verteilten Architektur von OceanBase und übernimmt deren hohe Verfügbarkeit, starke Konsistenz und horizontale Skalierbarkeit und unterstützt Vektorspeicher mit bis zu 16.000 Dimensionen. Basierend auf der verteilten Architektur von OceanBase erbt SeekDB dessen hohe Verfügbarkeit, starke Konsistenz und horizontale Skalierbarkeit, unterstützt Vektorspeicher mit bis zu 16.000 Dimensionen, bietet leistungsstarke Indizierungsalgorithmen wie HNSW und IVF und führt Top-K-Abfragen mit sehr geringer Latenz auf massiven Daten durch, was es zu einer idealen Datenbank für den Aufbau von RAG (Retrieval Augmentation Generation), Empfehlungssystemen und multimodalen Suchanwendungen macht.
Funktionsliste
- Unterstützung nativer Vektordatentypen: direkt in der Tabellenstruktur der Datenbank definiert
VECTORTypfeld, das eine dichte Vektorspeicherung mit bis zu 16.000 Dimensionen unterstützt, wobei dieINTundVARCHARund andere traditionelle Datentypen koexistieren. - Hochleistungs-VektorindizesSie verfügt über integrierte branchenführende Indizierungsalgorithmen wie HNSW (Hierarchical Navigational Small World) und IVF (Inverted File) und unterstützt eine Vielzahl von Abstandsberechnungsformeln wie L2 (Euklidischer Abstand), Inneres Produkt und Cosinus (Cosinusähnlichkeit), was eine hohe Wiederauffindbarkeit und geringe Latenz bei der Suche gewährleistet.
- SQL+AI Hybride Suche: Unterstützt die Einbeziehung sowohl der
WHEREKlauseln für die skalare Filterung (z. B. Preisspanne, Produktkategorie) und dieORDER BYder Vektorähnlichkeitsreihenfolge optimiert der Datenbankkern automatisch den Ausführungsplan, wodurch Mehrfachinteraktionen auf der Anwendungsschicht vermieden werden. - Verteilte horizontale SkalierungVektordaten können automatisch auf mehrere Server verteilt werden, wenn sie in Scheiben und Würfel geschnitten werden, und durch Hinzufügen weiterer Knoten können die Speicherkapazität und die Abrufleistung linear erhöht werden, so dass es einfach ist, mit Dutzenden von Milliarden von Vektoren umzugehen.
- Vollständig kompatibel mit dem MySQL-ProtokollOhne eine spezielle Vektordatenbank-API erlernen zu müssen, können Entwickler Vektordaten direkt mit jedem Client, der das MySQL-Protokoll (z. B. JDBC, PyMySQL) oder das ORM-Framework unterstützt, bearbeiten.
- Nahtlose Integration von KI-ÖkosystemenOceanBase ist ein neuartiges KI-Entwicklungsframework, das an die gängigen KI-Entwicklungsframeworks wie LangChain, LlamaIndex, DB-GPT usw. angepasst ist. Das Python-SDK wird bereitgestellt, damit Entwickler OceanBase schnell mit der Datenkette großer Modellanwendungen verbinden können.
Hilfe verwenden
OceanBase SeekDB ist so konzipiert, dass es einer herkömmlichen MySQL-Datenbank sehr nahe kommt, wobei der Hauptunterschied in der Definition und Indizierung von Vektordaten besteht. Im Folgenden wird der gesamte Prozess von der Vorbereitung der Umgebung bis zum Abschluss einer hybriden Suche detailliert beschrieben.
1. ökologische Vorbereitung und Installation
Die Funktionen von SeekDB sind in OceanBase 4.3.3 und höher enthalten. Für Entwickler ist der schnellste Weg, eine eigenständige Version von OceanBase mithilfe von Docker-Containern zu implementieren.
Schritt 1: Starten Sie den OceanBase-Container
Vergewissern Sie sich, dass auf Ihrem Rechner Docker installiert ist und mindestens 8 GB Arbeitsspeicher zugewiesen sind (Vektor-Computing hat einige Speicheranforderungen). Führen Sie den folgenden Befehl im Terminal aus, um die neueste Version des Images zu laden und zu starten:
docker run -p 2881:2881 --name oceanbase-ce -e MINI_MODE=1 -d oceanbase/oceanbase-ce:latest
Anmerkungen:MINI_MODE=1 wird verwendet, um auf PCs mit eingeschränkten Ressourcen im Minimalmodus zu booten.
Schritt 2: Verbindung mit der Datenbank
Sobald der Container gestartet ist (die Initialisierung dauert in der Regel 1-2 Minuten), können Sie sich mit einem beliebigen MySQL-Client verbinden. Hier ist ein Beispiel für einen MySQL-Client für die Kommandozeile:
# 进入容器内部
docker exec -it oceanbase-ce bash
# 连接数据库(默认无密码,端口2881)
obclient -h127.0.0.1 -P2881 -uroot@test
Hinweis: Es wird empfohlen, in Produktionsumgebungen einen Nicht-Root-Benutzer anzulegen und ein sicheres Kennwort festzulegen.
2. die Arbeitsweise der Vektortabelle
Wir werden ein "Buchempfehlungssystem"-Szenario simulieren, indem wir eine Tabelle mit grundlegenden Informationen über das Buch (Titel, Preis) und einen Vektor von Merkmalen über das Buch erstellen.
Schritt 1: Erstellen einer Tabelle mit Stützvektoren
Wenn Sie eine Tabelle erstellen, verwenden Sie die VECTOR(<维度>) Die Syntax definiert Vektorspalten. Nehmen wir an, wir müssen dreidimensionale Vektoren speichern (in der Realität sind das normalerweise 768 oder 1536 Dimensionen):
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
category VARCHAR(50),
price DECIMAL(10, 2),
embedding VECTOR(3) -- 定义一个3维的向量列
);
Schritt 2: Einfügen von Daten
Wenn Sie Vektordaten einfügen, verwenden Sie das String-Format [v1, v2, v3, ...] Stellt einen Vektor dar.
INSERT INTO books (title, category, price, embedding) VALUES
('Python深度学习', 'Tech', 59.90, '[0.1, 0.2, 0.8]'),
('如果是普通的书', 'Fiction', 29.90, '[0.8, 0.1, 0.1]'),
('数据库内部原理', 'Tech', 89.00, '[0.2, 0.2, 0.9]'),
('烹饪大全', 'Life', 45.00, '[0.1, 0.9, 0.1]');
3. die Erstellung von Vektorindizes
Um die Abfrage zu beschleunigen, müssen Indizes auf Vektorspalten erstellt werden. SeekDB unterstützt die Erstellung von IVFFLAT- oder HNSW-Indizes.
Parameter Beschreibung:
distanceDistanzmessung, optionall2(Euklidischer Abstand).inner_product(inneres Produkt), (inneres Produkt)cosine(Kosinus).typeIndexierungsalgorithmen: Typen von Indizierungsalgorithmen, empfohlenhnsw.libVector: Implementierung der Vektorbibliothek, Standardwert istvsag.
-- 创建一个基于 HNSW 算法的索引,使用 L2 距离
CREATE INDEX idx_book_embedding ON books(embedding)
USING VECTOR
WITH (distance=l2, type=hnsw, lib=vsag);
Hinweis: Die Erstellung von Vektorindizes kann einige Speicherressourcen verbrauchen, und die Geschwindigkeit der Erstellung hängt von der Datenmenge ab.
4) Implementierung der hybriden Suche
Dies ist die mächtigste Funktion von SeekDB. Angenommen, wir suchen nach "Inhalten mit Bezug zur Computertechnologie (Vektoren nahe der [0.15, 0.2, 0.85]), und der Preis beträgt weniger als 100 Dollar".
Schreiben von SQL-Anweisungen:
ausnutzen l2_distance Funktion zur Berechnung der Entfernung, kombiniert mit der WHERE Klausel filtert den Preis.
SELECT title, price, l2_distance(embedding, '[0.15, 0.2, 0.85]') as distance
FROM books
WHERE price < 100 AND category = 'Tech' -- 标量过滤条件
ORDER BY distance ASC -- 按相似度排序(距离越小越相似)
LIMIT 5;
Interpretation der Durchführungsergebnisse:
Die Datenbank-Engine wird zunächst die skalaren Indizes schnell durchforsten, um die price < 100 im Gesang antworten category = 'Tech' oder verwenden Sie die Vektorindizierung, um vor dem Filtern eine Annäherung zu finden (je nach der Kostenschätzung des Optimierers). Es besteht keine Notwendigkeit, manuell eine komplexe "Filter- und Sortierlogik" zu schreiben.
5. mit Python
Bei der Entwicklung von KI-Anwendungen in der Praxis wird in der Regel Python verwendet. PyMySQL Der vollständige Beispielcode der
import pymysql
import json
# 1. 建立连接
conn = pymysql.connect(
host='127.0.0.1',
port=2881,
user='root@test',
password='',
database='test',
autocommit=True
)
cursor = conn.cursor()
# 2. 准备查询向量(模拟来自 Embedding 模型的结果)
query_vector = [0.15, 0.2, 0.85]
query_vector_str = json.dumps(query_vector)
# 3. 执行混合检索 SQL
sql = """
SELECT title, l2_distance(embedding, %s) as dist
FROM books
WHERE category = 'Tech'
ORDER BY dist ASC
LIMIT 3
"""
cursor.execute(sql, (query_vector_str,))
results = cursor.fetchall()
# 4. 输出结果
print("推荐图书:")
for row in results:
print(f"书名: {row[0]}, 距离: {row[1]}")
cursor.close()
conn.close()
Mit dem oben beschriebenen Verfahren haben Sie erfolgreich eine vektorbasierte semantische Suchfunktion in OceanBase implementiert, ohne eine externe Vektordatenbank einzubeziehen.
Anwendungsszenario
- Wissensdatenbank Unternehmen Privat Frage und Antwort (RAG)
Unternehmen zerschneiden interne Dokumente (PDFs, Wikis, Codebases) und verwandeln sie in Vektoren, die in OceanBase gespeichert werden. Wenn ein Mitarbeiter eine Frage stellt, vektorisiert das System die Frage, ruft die relevantesten Dokumentfragmente aus der Datenbank durch Vektorsuche ab und generiert eine genaue Antwort durch Kombination mit LLM. Der Vorteil von OceanBase besteht darin, dass die Daten die Datenbank nicht verlassen und die Verwaltung der Befugnisse direkt den ACL-Mechanismus der Datenbank nachbildet, wodurch die Sicherheit der Unternehmensdaten gewährleistet wird. - Multimodale Kartensuche
In einem Szenario einer E-Commerce-Plattform werden die Bildmerkmale eines Produkts als Vektoren extrahiert und in einer Datenbank gespeichert. Die Benutzer laden ein Bild hoch, und das System findet über SeekDB schnell Produkte mit ähnlichen visuellen Merkmalen. In Kombination mit der skalaren Fähigkeit von SQL können auch geschäftliche Filterbedingungen wie "nur sehen, was verfügbar ist" und "Preis zwischen 50 und 100 $" einfach überlagert werden, um eine genaue Einkaufsanleitung zu bieten. - Personalisiertes Empfehlungssystem
Anhand des Browserverlaufs und der Verhaltensdaten des Nutzers werden Vektoren des Nutzerprofils erstellt, die mit Vektoren aus der Inhaltsbibliothek (Artikel, Videos) abgeglichen werden. SeekDB kann innerhalb von Millisekunden aus Millionen von Inhalten die Einträge herausfiltern, die den Interessensvektoren des Nutzers am nächsten kommen, um eine "Guess What You Like"-Funktion in Echtzeit zu erreichen und die Nutzerbindung zu verbessern.
QA
- Warum haben Sie sich für OceanBase SeekDB und nicht für eine spezialisierte Vektordatenbank (z. B. Milvus, Pinecone) entschieden?
Dedizierte Vektordatenbanken werden in der Regel unabhängig voneinander eingesetzt, was bedeutet, dass Sie zwei Datensysteme pflegen müssen (relationale DB + Vektor-DB), was nicht nur die Betriebs- und Wartungskosten erhöht, sondern auch mit dem Konsistenzproblem der Datensynchronisation konfrontiert ist.SeekDB erreicht "all-in-one", indem es Transaktionen, Analysen und Vektorabfragen im selben Datenbankkern abwickelt, was die technische Architektur von KI-Anwendungen drastisch vereinfacht und direkt die Hochverfügbarkeitsfähigkeiten von OceanBase übernimmt. SeekDB vereint Transaktionen, Analysen und Vektorabfragen in ein und demselben Datenbankkern, was die technische Architektur von KI-Anwendungen drastisch vereinfacht und die Hochverfügbarkeitsfunktionen von OceanBase für den Finanzsektor direkt übernimmt. - Welche Indexarten unterstützt SeekDB? Wie ist die Leistung?
Derzeit unterstützt es hauptsächlich HNSW- (geeignet für Szenarien mit hohen Leistungsanforderungen und ausreichendem Speicher) und IVF-Serienindizes (geeignet für Szenarien mit extrem großen Datenmengen und Speicherempfindlichkeit). Im Standard-ANN-Benchmark-Test hat die OceanBase-Vektor-Retrieval-Engine hervorragende QPS- und Recall-Werte bei einer Datenmenge von 10 Millionen, was den Echtzeitanforderungen der meisten Online-Reasoning-Dienste entspricht (in der Regel auf der Ebene von 10 ms-50 ms). - Können der bestehenden Tabelle Vektorspalten hinzugefügt werden?
können. Sie können die Spalten wie normale Spalten manipulieren, indem Sie dieALTER TABLEAnweisung für eine bestehende Geschäftstabelle hinzuzufügenVECTORArt der Spalte und erstellen einen Index für diese Spalte. Das macht die KI-gestützte Nachrüstung von Altsystemen sehr einfach, ohne dass Daten migriert werden müssen.
































