Skip to content

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, Cloudflare’ın connection pooling servisidir. Edge’den PostgreSQL’e yapılan bağlantıları yönetir ve connection overhead’i azaltır.

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ı

Hyperdrive, tek bir connection pool üzerinden tüm edge lokasyonlarından gelen istekleri yönlendirir:

Edge (Worker) → Hyperdrive (Pool) → PostgreSQL (Neon)
[[hyperdrive]]
binding = "HYPERDRIVE"
id = "59c4a12da58e45d3993436576a163c85"
localConnectionString = "postgresql://user:pass@host/neondb?sslmode=require"
  • binding: Worker içinde env.HYPERDRIVE olarak 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’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'larda
const 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).

Yerelde (wrangler dev):

  • Hyperdrive kullanılmaz; localConnectionString veya .dev.vars içindeki DATABASE_URL kullanılır.
  • Neon’un kendi pooler’ı (-pooler suffix) connection pooling sağlar.
ÖzellikNeon PoolerHyperdrive
LokasyonNeon tarafındaCloudflare Edge
KullanımYerel geliştirmeProduction (Edge)
AvantajBasit, doğrudanEdge’den optimize routing

Öneri: Production’da Hyperdrive kullanın; yerelde Neon pooler yeterlidir.

  1. İlk istek: Hyperdrive pool’dan bir bağlantı alır (veya yeni açar).
  2. Sonraki istekler: Pool’daki mevcut bağlantıları yeniden kullanır.
  3. 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.

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);
  • app/db/index.ts — getDbUrl(env); Hyperdrive string (production) veya DATABASE_URL (yerel).
  • wrangler.toml — [[hyperdrive]] config; localConnectionString (yerel), production’da Hyperdrive binding.