symfony/ai-maria-db-store
MariaDB vector store integration for Symfony AI Store. Requires MariaDB 11.7+ for VECTOR columns, vector indexing, and distance search. Useful for building RAG and similarity search apps backed by MariaDB.
AiStoreInterface ensures consistency with Symfony’s AI components but limits flexibility for non-Symfony ecosystems.VECTOR columns, indexes). This contrasts with dedicated vector databases that abstract schema complexity, potentially increasing operational overhead for schema evolution.symfony/dependency-injection) or custom wrappers.AiStoreInterface, potentially requiring custom bootstrapping.config/ai.php, adding maintenance overhead.ALTER TABLE).pgvector, Milvus).ALTER TABLE) fit into deployments?VectorStoreInterface) to allow future swaps (e.g., to pgvector)?symfony/dependency-injection and symfony/console-bridge via Composer, then bind the MariaDB store to Laravel’s container:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(\Symfony\Component\AI\Store\AiStoreInterface::class, function ($app) {
return new \Symfony\AI\MariaDbStore\MariaDbStore(
$app['db']->connection()->getPdo(),
config('ai.maria_db_store')
);
});
}
config/ai.php:
'maria_db_store' => [
'dsn' => env('DATABASE_MARIADB_URL'),
'table' => 'ai_embeddings',
'vector_column' => 'embedding',
'distance' => 'cosine',
'dimensions' => 1536,
],
use Symfony\AI\MariaDbStore\MariaDbStore;
$store = new MariaDbStore(
DB::connection('mariadb')->getPdo(),
config('ai.maria_db_store')
);
DATABASE_MARIADB_URL is distinct from the primary Laravel DB.Phase 1: Infrastructure Setup (1–2 weeks)
VECTOR columns and indexes:
CREATE TABLE ai_embeddings (
id INT AUTO_INCREMENT PRIMARY KEY,
embedding VECTOR(1536),
metadata JSON,
created_at TIMESTAMP
);
CREATE INDEX idx_embedding ON ai_embeddings ((embedding));
composer require symfony/ai-maria-db-store symfony/dependency-injection symfony/console-bridge
Phase 2: Data Migration (2–4 weeks)
$store->insertMany([
['embedding' => $vector1, 'metadata' => ['id' => 1]],
['embedding' => $vector2, 'metadata' => ['id' => 2]],
]);
$results = $store->findNearest($query, 10, [
'metadata->$.category' => 'tech',
]);
Phase 3: Application Integration (3–6 weeks)
// Before: Elasticsearch
$results = $elasticsearch->search($query);
// After: MariaDB
$results = $store->findNearest($query, 5);
cosine).Phase 4: Performance Optimization (Ongoing)
VECTOR indexes for query patterns (e.g., IVF for large datasets).$cacheKey = "vector_query_{$queryHash}";
return cache()->remember($cacheKey, now()->addMinutes(5), function () use ($store, $query) {
return $store->findNearest($query, 10);
});
SHOW PROCESSLIST).How can I help you explore Laravel packages today?