Hyperdrive Entegrasyonu
PostgreSQL bağlantı optimizasyonu, connection pooling ve Hyperdrive mantığı.
Coursio, Cloudflare Hyperdrive ile PostgreSQL bağlantılarını optimize eder. Bu sayfa, Hyperdrive’ın nasıl çalıştığını ve connection pooling mantığını açıklar.
Hyperdrive Nedir?
Section titled “Hyperdrive Nedir?”Hyperdrive, Cloudflare’ın connection pooling servisidir. Edge’den PostgreSQL’e yapılan bağlantıları yönetir ve connection overhead’i azaltır.
Problem: Connection Overhead
Section titled “Problem: Connection Overhead”Her Worker isteği için yeni bir PostgreSQL bağlantısı açmak:
- Yavaş: TCP handshake, SSL handshake, authentication
- Maliyetli: Veritabanı bağlantı limitleri
- Edge’de sorunlu: Her edge lokasyonundan ayrı bağlantı
Çözüm: Hyperdrive
Section titled “Çözüm: Hyperdrive”Hyperdrive, tek bir connection pool üzerinden tüm edge lokasyonlarından gelen istekleri yönlendirir:
Edge (Worker) → Hyperdrive (Pool) → PostgreSQL (Neon)wrangler.toml Konfigürasyonu
Section titled “wrangler.toml Konfigürasyonu”[[hyperdrive]]binding = "HYPERDRIVE"id = "59c4a12da58e45d3993436576a163c85"localConnectionString = "postgresql://user:pass@host/neondb?sslmode=require"- binding: Worker içinde
env.HYPERDRIVEolarak erişilir. - id: Cloudflare Dashboard’da oluşturulan Hyperdrive config ID’si.
- localConnectionString: Yerel geliştirme için (
wrangler dev) kullanılan bağlantı dizesi.
Production: Hyperdrive Connection String
Section titled “Production: Hyperdrive Connection String”Production’da Hyperdrive, Cloudflare Dashboard’dan alınan connection string’i kullanır. Bu string, Hyperdrive’ın Neon’a bağlanması için optimize edilmiştir.
Worker içinde kullanım:
// app/db/index.ts veya route'lardaconst dbUrl = env.DATABASE_URL; // Hyperdrive connection string (production)const db = getDb(dbUrl);Production’da DATABASE_URL secret’ı Hyperdrive connection string’i içerir (Cloudflare Dashboard’dan alınır).
Yerel Geliştirme
Section titled “Yerel Geliştirme”Yerelde (wrangler dev):
- Hyperdrive kullanılmaz;
localConnectionStringveya.dev.varsiçindekiDATABASE_URLkullanılır. - Neon’un kendi pooler’ı (
-poolersuffix) connection pooling sağlar.
Neon Pooler vs Hyperdrive
Section titled “Neon Pooler vs Hyperdrive”| Özellik | Neon Pooler | Hyperdrive |
|---|---|---|
| Lokasyon | Neon tarafında | Cloudflare Edge |
| Kullanım | Yerel geliştirme | Production (Edge) |
| Avantaj | Basit, doğrudan | Edge’den optimize routing |
Öneri: Production’da Hyperdrive kullanın; yerelde Neon pooler yeterlidir.
Connection Pooling Mantığı
Section titled “Connection Pooling Mantığı”- İlk istek: Hyperdrive pool’dan bir bağlantı alır (veya yeni açar).
- Sonraki istekler: Pool’daki mevcut bağlantıları yeniden kullanır.
- Idle bağlantılar: Belirli süre sonra kapatılır (pool yönetimi).
Bu sayede:
- Daha hızlı: Bağlantı açma overhead’i yok.
- Daha verimli: Veritabanı bağlantı limitleri korunur.
- Edge-optimized: Tüm edge lokasyonları tek pool üzerinden bağlanır.
Veritabanı Bağlantı Yönetimi
Section titled “Veritabanı Bağlantı Yönetimi”app/db/index.ts içinde:
export const getDb = (connectionString: string) => { const sql = neon(connectionString); // Neon HTTP driver return drizzle(sql, { schema });};
export const getDbUrl = (env: any): string => { return env?.DATABASE_URL || process.env.DATABASE_URL || "";};- Neon HTTP driver: Edge uyumlu, HTTP üzerinden PostgreSQL sorguları.
- Drizzle ORM: Type-safe sorgular ve şema yönetimi.
Route’larda kullanım:
const dbUrl = getDbUrl(env); // Hyperdrive string (production) veya DATABASE_URL (yerel)const db = getDb(dbUrl);İlgili Dosyalar
Section titled “İlgili Dosyalar”app/db/index.ts— getDbUrl(env); Hyperdrive string (production) veya DATABASE_URL (yerel).wrangler.toml— [[hyperdrive]] config; localConnectionString (yerel), production’da Hyperdrive binding.