Web ve mobil uygulamalar için PostgreSQL şemalarınızdan anında GraphQL ve REST API üretmek istediğinizde; Hasura Cloud gibi yönetilen SaaS platformları aylık istek kotaları ve veri aktarım tarifeleriyle faturayı $99'dan ayda yüzlerce ve binlerce dolara fırlatabilir. Öte yandan Apollo Server veya Prisma ile manuel resolver yazmak ise ünlü N+1 veritabanı sorgu patlamasına yol açarak PostgreSQL bağlantı havuzunuzu kilitler. Haskell tabanlı açık kaynaklı Hasura Community Edition (CE) veya PostGraphile'ı kendi VDS sunucunuzda barındırarak; tüm iç içe grafiği tek bir JSON SQL sorgusuna derleyen mimariyle sıfır N+1 gecikmesi, 4 ms yanıt süresi ve %85'in üzerinde net tasarruf sağlayın.
5.0M İstek/Ay • Derinlik: 3 Seviye • Cloud Pro Standard
5 yılda elde edilen net bulut tasarrufu: $6.300
Geleneksel ORM'ler derin ilişkili GraphQL sorgularını çözmek için veritabanına 26 kat daha fazla SQL sorgusu göndererek veritabanı CPU'sunu kilitler ve bağlantı havuzunu tüketir. Hasura CE ise AST derleyicisiyle tüm grafiği tek bir SQL sorgusuna indirger.
| Özellik / Metrik | Hasura Community (Haskell) | PostGraphile (TypeScript/Rust) | Prisma / Manuel Node.js |
|---|---|---|---|
| Sorgu Başına DB Gidiş-Dönüşü | 1 Tekil SQL (0 N+1) | 1 Tekil SQL (Grafast) | 26 SQL (Ağır N+1) |
| Ortalama Yanıt Gecikmesi | ~4.2 ms | ~5.6 ms | ~51.5 ms |
| Motor Bellek Ayak İzi (RAM) | ~280 MB | ~140 MB | ~650 MB+ |
| Yetkilendirme (RBAC / RLS) | Dahili Rol & Session Değişkenleri | PostgreSQL RLS (Row Level Security) | Manuel Middleware & Kod |
| Abonelikler (Live Subscriptions) | Evet (Canlı Multiplexed SQL) | Evet (PostgreSQL LISTEN/NOTIFY) | Redis Pub/Sub & WebSocket Kodu |
| REST & OpenAPI Desteği | Dahili (REST Endpoints oluşturucu) | Eklenti gerektirir | Ayrı Express/Fastify rotaları |
# Hasura Community Edition + PostgreSQL 16 + PgBouncer Üretim Docker Stack
# Sıfır SaaS faturasıyla saniyede 8.000+ derlenmiş GraphQL/REST isteği
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: hasura_pg
restart: always
environment:
POSTGRES_DB: appdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: GuvenliDbSifresiBuraya123!
volumes:
- pg_data:/var/lib/postgresql/data
command:
- "postgres"
- "-c"
- "max_connections=200"
- "-c"
- "shared_buffers=1GB"
- "-c"
- "work_mem=32MB"
pgbouncer:
image: edoburu/pgbouncer:latest
container_name: hasura_pgbouncer
restart: always
environment:
DB_HOST: postgres
DB_USER: postgres
DB_PASSWORD: GuvenliDbSifresiBuraya123!
DB_NAME: appdb
POOL_MODE: transaction # Hasura için en ideal havuz modu
MAX_CLIENT_CONN: 1000
DEFAULT_POOL_SIZE: 30
depends_on:
- postgres
graphql-engine:
image: hasura/graphql-engine:v2.44.0
container_name: hasura_engine
restart: always
ports:
- "8080:8080"
environment:
HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://postgres:GuvenliDbSifresiBuraya123!@postgres:5432/appdb
HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:GuvenliDbSifresiBuraya123!@pgbouncer:5432/appdb
HASURA_GRAPHQL_ENABLE_CONSOLE: "false" # Üretimde konsolu kapatın
HASURA_GRAPHQL_ADMIN_SECRET: SuperGuvenliAdminSecretKey123!
HASURA_GRAPHQL_UNAUTHORIZED_ROLE: anonymous
HASURA_GRAPHQL_LIVE_QUERIES_MULTIPLEXED_REFRESH_INTERVAL: 1000
depends_on:
- pgbouncer
volumes:
pg_data:Geleneksel Node.js ORM'leri (Prisma, TypeORM, Sequelize) veya manuel GraphQL resolver'ları kullandığınızda, istemcinin tek bir sorguda talep ettiği ilişkili veriler (örneğin: 1 Kullanıcı → 10 Sipariş → her siparişte 3 Ürün) veritabanına sırayla 1 + 10 + 30 = 41 ayrı SQL sorgusu olarak iletilir. Bu duruma N+1 sorgu problemi denir. Trafik arttığında veritabanı CPU'su %100'e kilitlenir ve PostgreSQL bağlantı havuzu çöker.
Hasura Cloud bu sorunu çözse de ayda 10 milyon istek alan bir sistemde taban fiyatlar ve kota aşımlarıyla ayda $200 ile $600+ arasında fatura çıkarır. Oysa açık kaynaklı Hasura Community Edition (CE) tamamen ücretsizdir; Haskell/C++ ile yazılmış JIT derleyicisi sayesinde tüm GraphQL soyut sözdizim ağacını (AST) PostgreSQL'in yerel json_agg() ve json_build_object() fonksiyonlarını kullanan tek bir SQL sorgusuna dönüştürür.
Hasura, GraphQL sorgusunu çalıştırmak için birden fazla SQL atmaz. Tüm ilişkileri tek bir SQL cümlesinde birleştirir; veritabanı JSON yanıtını doğrudan kendisi paketler. Node.js katmanında JSON serileştirme ek yükü oluşmaz.
JWT token içerisindeki x-hasura-user-id ve roller doğrudan SQL sorgusunun WHERE koşuluna otomatik olarak eklenir. API seviyesinde tek satır güvenlik kodu yazmadan kurumsal yetkilendirme sağlanır.
Hasura, binlerce WebSocket istemcisine her saniye ayrı sorgu atmaz. Benzer izinlere sahip istemcileri tek bir multiplexed (çoğullanmış) SQL sorgusunda birleştirerek minimum veritabanı yüküyle canlı veri akışı sağlar.
Açık kaynak dünyasında iki büyük oyuncu öne çıkar:
Saniyede 500 ila 2.000 GraphQL isteği işleyen orta ve büyük ölçekli uygulamalarda, 4 vCPU ve 8 GB RAM'e sahip standart bir VDS ($24/ay) fazlasıyla yeterlidir. Hasura CE'nin önüne PgBouncer (Transaction Pooling) koyarak veritabanı bağlantı havuzunu 30 seviyesinde sabitleyip binlerce eşzamanlı istemciyi kilitlenmesiz yönetebilirsiniz.