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.

MotorNeNe zaman eklenir
postgresİlişkisel veritabanıSorgulanabilir, kalıcı bir duruma ihtiyacın var. Neredeyse her projede ilk servis bu oluyor.
redisBellek içi anahtar/değer deposuÖnbellek, oturum deposu, rate-limit sayacı ya da kuyruk istiyorsun.
meilisearchTam metin aramaKullanıcı bir kutuya kelime yazıyor ve sıralanmış sonuç bekliyor.
storageS3-uyumlu nesne depolamaDosya tutuyorsun: yüklemeler, dışa aktarımlar, üretilen görseller, tabloya koyduğuna pişman olacağın her şey.
clickhouseKolon 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şkenMotorİçinde ne var
DATABASE_URLpostgresKimlik bilgileri dahil, tam Postgres bağlantı dizesi.
REDIS_URLredisTam Redis bağlantı dizesi.
MEILI_HOSTmeilisearchArama servisinin temel adresi.
MEILI_API_KEYmeilisearchMeilisearch istemcinin kimlik doğrulamada kullandığı anahtar.
S3_ENDPOINTstorageNesne depolama API’sinin temel adresi.
S3_BUCKETstorageOkuyup yazacağın bucket.
S3_ACCESS_KEYstorageErişim anahtarı kimliği.
S3_SECRETstorageGizli erişim anahtarı.
S3_REGIONstorageS3 istemcinin göndermesi gereken bölge değeri.
S3_FORCE_PATH_STYLEstorageİstemcinin bucket’a alan adı öneki yerine yol parçası olarak mı erişeceği.
CLICKHOUSE_URLclickhouseAnalitik 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 ve LIKE hı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.ts

Dü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.

Markdown olarak görüntüle