Veri
Yönetilen Postgres, Redis, tam metin arama ve nesne depolama; proje başına, dış kayıt olmadan sağlanır.
Bu sayfada
PrimDB’de bir veri servisi, platformun senin adına tek bir projenin içinde çalıştırdığı veritabanı, önbellek, arama indeksi ya da bucket demek. Motoru sen seçersin, PrimDB kurar, kimlik bilgileri uygulamana ortam değişkeni olarak gelir. Dış kayıt yok, ikinci fatura yok.
Yönetilen ne demek
Sınırı net söylemekte fayda var, çünkü bir şey ters gittiğinde kime bakacağını o belirliyor. Yavaş sorgu senin. O sorguyu çalıştıran sürecin ayakta kalması bizim.
- Biz çalıştırıyoruz: kurulum, bağlantı dizeleri, kimlik rotasyonu, yedekler, askıya alma ve geri açma. Hepsi panelden ya da MCP üzerinden.
- Sende kalıyor: şeman, migration’ların, index’lerin ve uygulamanın gönderdiği sorgular.
- Veritabanları uykuya geçmez, Free planda da geçmez. İlk isteği uyandırma diye bir şeyi hesaba katmadan tasarlıyorsun.
Motorlar
Proje başına beş motor kurulabilir. Baştan karar vermek zorunda değilsin. İhtiyacın çıktıkça bir tane ekle.
| Motor | Ne | Ne zaman eklenir |
|---|---|---|
postgres | İlişkisel veritabanı | Sorgulanabilir, kalıcı bir duruma ihtiyacın var. Neredeyse her projede ilk servis bu oluyor. |
redis | Bellek içi anahtar/değer deposu | Önbellek, oturum deposu, rate-limit sayacı ya da kuyruk istiyorsun. |
meilisearch | Tam metin arama | Kullanıcı bir kutuya kelime yazıyor ve sıralanmış sonuç bekliyor. |
storage | S3-uyumlu nesne depolama | Dosya tutuyorsun: yüklemeler, dışa aktarımlar, üretilen görseller, tabloya koyduğuna pişman olacağın her şey. |
clickhouse | Kolon tabanlı analitik veritabanı | Çok satır üzerinde toplama yapıyorsun ve satır tabanlı yapı ayağına dolanıyor. Platform planı. |
Bağlantı uygulamana nasıl ulaşır
Bir veri servisini bir uygulamaya bağladığında PrimDB bağlantıyı o uygulamanın ortamına enjekte eder. Bağlı bir uygulama için bağlantı dizesini elle kopyalamıyorsun. Yapıştıracak bir şey, senkron tutulacak ikinci bir secret, rotasyondan sonra elde kalan bayat bir değer yok.
Değişkenler bunlar. Kodda okuman gereken isimler bu listenin dışına çıkmıyor.
| Değişken | Motor | İçinde ne var |
|---|---|---|
DATABASE_URL | postgres | Kimlik bilgileri dahil, tam Postgres bağlantı dizesi. |
REDIS_URL | redis | Tam Redis bağlantı dizesi. |
MEILI_HOST | meilisearch | Arama servisinin temel adresi. |
MEILI_API_KEY | meilisearch | Meilisearch istemcinin kimlik doğrulamada kullandığı anahtar. |
S3_ENDPOINT | storage | Nesne depolama API’sinin temel adresi. |
S3_BUCKET | storage | Okuyup yazacağın bucket. |
S3_ACCESS_KEY | storage | Erişim anahtarı kimliği. |
S3_SECRET | storage | Gizli erişim anahtarı. |
S3_REGION | storage | S3 istemcinin göndermesi gereken bölge değeri. |
S3_FORCE_PATH_STYLE | storage | İstemcinin bucket’a alan adı öneki yerine yol parçası olarak mı erişeceği. |
CLICKHOUSE_URL | clickhouse | Analitik veritabanının bağlantı adresi. |
// Nothing to wire up. These are already in the environment of any app
// the service is linked to.
import postgres from "postgres";
import Redis from "ioredis";
const sql = postgres(process.env.DATABASE_URL!);
const redis = new Redis(process.env.REDIS_URL!);
const users = await sql`select id, email from users limit 10`;
await redis.set("users:last-read", Date.now());Postgres
Çoğu proje Postgres ile başlıyor. Bağlantılar TLS ile anlaşır. Şema, migration ve index tarafı sende, herhangi bir Postgres’te olduğu gibi.
Uzantılar
Uzantılar veritabanı başına, bir beyaz listeden açılır. Liste bilerek kısa tutuldu ve tamamı şu:
btree_gin— sıradan skaler tipler için GIN index desteği, karışık koşulları tek index ile karşılamak için.citext— büyük/küçük harf duyarsız metin. E-posta kolonunda genelde istediğin şey budur.hstore— tek kolonda anahtar/değer çiftleri.pg_trgm— bulanık metin eşleştirme veLIKEhızlandırma için trigram.pgcrypto— veritabanının içinde kriptografi fonksiyonları.unaccent— aksanları temizler. Türkçe metinde işine yarar.uuid-ossp— UUID üretimi.vector— embedding için vektör kolonu ve benzerlik araması.
Bir uzantıyı yalnızca proje sahibi açabilir. Hangilerinin açık olduğunu her üye görebiliyor, ki bir sorgunun neden çalışmadığını çözerken asıl ihtiyacın olan bilgi bu. Her açma işlemi denetim kaydına düşer.
Dürüst not. Beyaz liste kapalı. Bu sekizin dışında bir uzantıya bağlı bir şema buraya olduğu gibi taşınmaz. Göç planı yapmadan önce listeyi kontrol etmeye değer.
Redis
Redis önbellek ve geçici çalışma alanı: oturumlar, rate-limit sayaçları, iş kuyrukları, süreçler arası pub/sub. Alışıldık kural burada da geçerli. Yeniden üretebileceğin şeyi Redis’e koy, üretemeyeceğini Postgres’te tut.
Arama
Tam metin arama motoru Meilisearch. Arama kutusu için pg_trgm index’i yetmemeye başladığında atılacak adım bu. Uygulama ortamına MEILI_HOST ve MEILI_API_KEY gelir, geri kalanını herhangi bir Meilisearch istemcisiyle konuşarak yaparsın. Motoru PrimDB çalıştırır. Neyi indeksleyeceğin ve dokümanı nasıl kuracağın sende kalır.
Nesne depolama
Dosyalar için S3-uyumlu nesne depolama. Herhangi bir S3 istemcisi çalışır, yani bildiğin SDK ve daha önce yazdığın yükleme kodu aynen geçerli. Beş depolama değişkeni uygulama ortamına birlikte iner.
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT,
region: process.env.S3_REGION,
forcePathStyle: process.env.S3_FORCE_PATH_STYLE === "true",
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY!,
secretAccessKey: process.env.S3_SECRET!,
},
});
await s3.send(
new PutObjectCommand({
Bucket: process.env.S3_BUCKET,
Key: "exports/january.csv",
Body: csv,
}),
);Kendi makinenden bağlanmak
Veritabanına platform dışından erişmek için bir bağlantı dizesi var, yani yerel araçların çalışmaya devam ediyor: psql, bir GUI istemci, tek seferlik bir backfill, bir daha ihtiyacın olmayacak bir dışa aktarım. Servisin bağlantısını panelden ya da MCP üzerinden oku, sonra aracını ona yönlendir.
# read the connection for the service, then use it locally
psql "postgres://..."
# same string, one-off script, no deploy involved
DATABASE_URL="postgres://..." bun run scripts/backfill.tsDürüst not. Dışarıya çıkan bağlantı dizesi gerçek bir kimlik bilgisidir. Dizeyi unutacağın bir dosyaya yapıştırmak yerine servisi uygulamaya bağlamayı tercih et, olmaması gereken bir yere düştüyse rotasyon uygula.
Yedek, rotasyon ve askıya alma
- Yedek: istediğin anda al, aldıklarını listele. MCP üzerinden de var, yani bir ajan riskli bir işten önce anlık görüntü alabilir.
- Kimlik rotasyonu: servise yeni kimlik bilgileri verir. Bağlı uygulama yeni değerleri enjekte edilen ortamdan alır. Kopyayı elde tutan her şey, yerel bir dosya, bir arkadaşının script’i, bir CI secret’ı, bağlantıyı yeniden okumak zorunda.
- Askıya alma ve geri açma: servisi silmeden durdurup sonra tekrar başlatırsın.
- Silme: servisi kaldırır. Bunun daha yumuşak bir sürümü yok.
Point-in-time recovery aylık $8 ücretli bir eklenti. İstek üzerine yedek ile PITR aynı satın alma değil: yedek önceden seçtiğin bir an, PITR ise kimsenin seçmeyi akıl etmediği an önemli hale geldiğinde işine yarayan şey. Ek depolama $0.02/GB. Faturanın kalanı için Maliyet sayfasına bak.
Bir ajan verinle ne yapabilir
Kontrol işlemleri iki tarafta da aynı: panelde ne varsa MCP üzerinden de var. Proje token’ı tutan bir ajan şunları yapabilir:
- Veri servisi oluşturur, siler.
- Servisi bir uygulamaya bağlar, bağlantıyı kaldırır.
- Servisin bağlantısını okur.
- Uzantıları listeler, bir uzantı açar.
- Yedek alır, yedekleri listeler.
- Kimlik bilgilerini döndürür.
- Servisi askıya alır, geri açar.
Bunun üstüne veri düzleminde araçlar var: Postgres için query_sql ve list_tables, Redis için redis_get / redis_set / redis_del / redis_keys, nesne depolama için storage_list / storage_get_url / storage_put_text / storage_delete.
Bu çağrıların hepsi token’ın bağlı olduğu projeyle sınırlı. Bir token başka bir projenin tablosuna, anahtarına ya da bucket’ına uzanamaz, yani bir ajana token vermenin etki alanı tek bir proje. MCP sayfasına bak.
Dürüst not. Dürüst sınırlar. Beyaz liste kapalı ve listeden açma yetkisi yalnızca proje sahibinde. ClickHouse Platform planında. Point-in-time recovery ve ek depolama planının üstüne binen ücretli kalemler. Bu sayfadaki geri kalan her şey, Free planda bile uykuya geçmeyen veritabanı dahil, plana dahil.