PostgreSQL veritabanı geliştirme

Şema tasarımı, migration ve raporlama sorguları: kendi ürünlerimizin verisini PostgreSQL’de tutuyoruz.

PostgreSQL ile şema tasarımı, migration ve raporlama sorguları yazıyoruz. Hippotenus, Logaritim ve Atölye Tasarım’ın verisi PostgreSQL’de duruyor.

Son güncelleme:

Bu teknolojiyle geliştirdiklerimiz

Hepsi yayında; mağaza sayfalarına ve ayrıntılara Ürünler sayfasından ulaşabilirsiniz.

Hippotenus

Eğitim kurumları platformu

NestJS API’nin veritabanı; şema Prisma ile alan alan ayrı dosyalarda, deneme ve karne raporları doğrudan SQL ile.

Ürünü incele

Logaritim

Soru havuzu ve sınav hazırlama

Soru havuzu ve müfredat PostgreSQL’de; benzer soru ve konu araması pgvector ile aynı veritabanında.

Ürünü incele

Atölye Tasarım

Web sitesi ve 3D atölye tasarlayıcısı

Kaydedilen 3D atölye tasarımları Drizzle ile PostgreSQL’de; tasarımın kendisi tipli bir JSONB alanında.

Ürünü incele

PostgreSQL ne zaman doğru seçim

PostgreSQL açık kaynaklı, ilişkisel bir veritabanı. Veriyi tablolarda tutar, tablolar arasındaki bağları (bir öğrencinin sınıfı, bir sınavın soruları, bir ödemenin faturası) veritabanının kendisi korur. Kayıtların birbirine bağlı olduğu ve aynı veriden farklı kişilere farklı raporlar çıkması gereken iş yazılımlarında varsayılan tercihimiz.

PostgreSQL’in iyi oturduğu durumlar

  • Kayıtlarınız birbirine bağlı: kullanıcı, sınıf, sınav, sipariş, ödeme gibi
  • Aynı veriden yöneticiye, öğretmene ya da müşteriye farklı raporlar çıkması gerekiyor
  • Para, stok ya da not gibi yarım yazılmaması gereken kayıtlar tutuyorsunuz
  • Yapay zekâ özelliği için benzerlik aramasını ayrı bir servise taşımadan yapmak istiyorsunuz

Başka bir araç önereceğimiz durumlar

  • Uygulamanın asıl ihtiyacı ekranlar arasında anlık eşitleme ve sunucuda karmaşık sorgu yok: burada Firebase gibi bir hizmet daha hızlı başlatır
  • İhtiyaç yalnızca önbellek ya da iş kuyruğu: bunun için Redis daha uygun; Hippotenus’ta da önbellek ve kuyruklar PostgreSQL’in yanında Redis’te
  • Sakladığınız şey ağırlıkla dosya, görsel ya da video: bunlar nesne depolamada durur, PostgreSQL’de yalnızca kayıtları tutulur

İlişkisel mi, doküman veritabanı mı

İki yaklaşımı da canlı ürünlerde kullanıyoruz. Hippotenus, Logaritim ve Atölye Tasarım PostgreSQL’de; SoruVerse’in verisi Firestore’da, Rigel’in arka ucu ise MongoDB kullanıyor. Seçimi verinin şekline ve sonradan sorulacak sorulara bakarak yapıyoruz.

PostgreSQL (ilişkisel)Doküman veritabanı (Firestore, MongoDB)
Veri modeliTablolar ve aralarındaki bağlar; kurallar veritabanındaKendi içinde bütün belgeler; kurallar uygulama kodunda
RaporlamaBirden çok tabloyu tek sorguda birleştirmek doğalBirleştirme çoğunlukla kodda ya da veriyi çoğaltarak yapılır
Şema değişikliğiMigration dosyalarıyla, kontrollüEsnek; tutarlılık uygulamanın sorumluluğunda
Esnek alanlarJSONB sütunu ile mümkünDoğal olarak
Bizim örneğimizHippotenus, Logaritim, Atölye TasarımSoruVerse (Firestore), Rigel’in arka ucu (MongoDB)

Çizgi her zaman kesin değil. Atölye Tasarım’da okulun 3D atölye tasarımı tek parça bir belge olarak JSONB sütununda duruyor; kayıt tarihi, şehir ve fiyat aralığı gibi sorgulanacak bilgiler ise normal sütunlarda. Böylece belgenin esnekliği ile tablonun sorgulanabilirliği aynı kayıtta birleşiyor.

Şema ve migration: veritabanını kodla birlikte değiştirmek

Veritabanı yapısındaki her değişiklik kod deposunda bir migration dosyası olarak duruyor ve uygulamayla birlikte sürümleniyor. Hippotenus’ta Prisma şeması akademik, finans, anket gibi alanlara göre ayrı dosyalara bölünmüş; API’nin Docker imajı açılırken bekleyen migration’ları uyguluyor, biri başarısız olursa yeni sürüm açılmıyor ve eski sürüm çalışmaya devam ediyor.

  • Logaritim’de migration’lar sıra numaralı SQL dosyaları; her biri bir işlem (transaction) içinde ve tekrar çalıştırıldığında zarar vermeyecek biçimde yazılmış, sunucu açılmadan önce uygulanıyor.
  • Bir müşteri projesinde Drizzle migration’larını ayrı bir “güncelleyici” servis çalıştırıyor; uygulama ancak bu servis başarıyla bittikten sonra açılıyor.
  • Aynı projede denetim kaydı tablosu bir tetikleyiciyle (trigger) yalnızca eklemeye açık: kayıtlar uygulama tarafından bile değiştirilemiyor ya da silinemiyor.
  • Hippotenus’ta birden fazla kurum aynı sistemde çalışıyor; kayıtlar kurum kimliği taşıyor ve sorgular buna göre süzülüyor. Silinen kayıtların çoğu gerçekten silinmiyor, silinme tarihiyle işaretleniyor.
  • Kısıtların (benzersizlik, yabancı anahtar) gerçekten çalıştığını Hippotenus’ta gerçek bir PostgreSQL’e karşı koşan entegrasyon testleriyle sınıyoruz.

Raporlama sorguları, vektör araması ve kullandığımız araçlar

Uygulamanın çoğunu ORM ile yazıyoruz, ama rapor ekranlarında doğrudan SQL’e geçiyoruz. Hippotenus’taki deneme analizi ve karne ekranları, öğrenci başına doğru, yanlış ve boş sayılarını sınav, soru, sınıf ve şube tablolarını birleştiren tek bir sorguyla hesaplıyor. Ham kullanım olaylarını tutan tablo tarihe göre bölümlenmiş (partitioning). Logaritim’de soruların vektör temsilleri pgvector ile aynı veritabanında; soru üretirken örnek seçmek ve farklı sınavların konularını eşleştirmek için benzerlik araması orada yapılıyor.

Prisma

Tip güvenli sorgular ve migration yönetimi. Hippotenus’un NestJS API’sinde kullanıyoruz.

Drizzle

SQL’e yakın, hafif bir TypeScript ORM’i. Atölye Tasarım’da ve bir müşteri projesinde kullanıyoruz.

pgvector

Vektör benzerlik araması veritabanının içinde, HNSW indeksiyle. Logaritim’de kullanıyoruz.

psycopg ve asyncpg

Python servislerinden PostgreSQL’e bağlantı. Logaritim’in FastAPI arka ucunda kullanıyoruz.

PostGIS

Konum ve bölge sınırı verisi için. Bir müşteri projesinde .NET ve Entity Framework Core ile kullanıyoruz.

Redis

PostgreSQL’in yanında önbellek ve iş kuyrukları için. Hippotenus’ta BullMQ ile kullanıyoruz.

PostgreSQL ile bir proje nasıl ilerliyor

  1. 01

    Ücretsiz keşif görüşmesi

    30 dk

    Hangi bilgileri tuttuğunuzu, kimin hangi raporu göreceğini ve elinizde hâlihazırda ne veri olduğunu (Excel, eski bir sistem) konuşuyoruz.

  2. 02

    Yazılı kapsam ve teklif

    Tabloları ve aralarındaki ilişkileri, çıkması gereken raporları ve kabul kriterlerini teklifle birlikte yazıya döküyoruz.

  3. 03

    Haftalık sürümler

    Her hafta çalışan sürümü örnek veriyle deniyorsunuz; şema değişiklikleri migration dosyası olarak o haftanın sürümüyle geliyor.

  4. 04

    Test ve yayın

    Senior QA sürümü yayından önce test ediyor; raporların verdiği sayılar örnek veri üzerinde kontrol ediliyor.

  5. 05

    Yayından sonraki 30 gün

    30 gün

    Bu sürede çıkan hataları ücretsiz düzeltiyoruz; sonrası için aylık bakımla devam edebilirsiniz.

Süre ve bütçe aralıklarını hizmet ve fiyatlar sayfalarımızda yayınlıyoruz; bu sayfadaki her şey aynı rakamlara bağlı.

PostgreSQL hakkında sık sorulanlar

PostgreSQL için lisans ücreti ödüyor muyum?

Hayır. PostgreSQL açık kaynaklı ve ücretsiz; maliyet onu çalıştıran sunucu ya da yönetilen hizmettir. Atölye Tasarım’da yönetilen, sunucusuz bir PostgreSQL hizmeti kullanıyoruz; Hippotenus’un veritabanı ise kendi sunucumuzda Docker içinde çalışıyor.

Excel’deki ya da eski sistemdeki verimi aktarabilir misiniz?

Evet. Aktarılacak verinin kapsamını keşif aşamasında netleştirip teklife yazıyoruz. Hippotenus’ta YÖK Atlas verisini ve soru havuzunu bu iş için yazdığımız içe aktarma betikleriyle yükledik.

Verilerimin yedeği alınıyor mu?

Yedekleme planını projeyle birlikte kuruyoruz. Hippotenus’ta veritabanları her gece yedekleniyor, yedekler şifrelenip Türkiye’deki ayrı bir depolama alanına kopyalanıyor ve geri yükleme denendi. Veritabanı internete açık değil; yalnızca uygulama erişiyor.

Proje bitince elimde ne kalır?

Yazılımı süresiz kullanma lisansı ve kullanım dokümantasyonu. Kaynak kodun, migration dosyalarıyla birlikte size devredilmesini isterseniz bu ek ücretle mümkündür ve teklifte ayrıca belirtilir.

İlgili hizmetler

Web uygulamasıÖzel yazılımVeri paneliERP, CRM & entegrasyon
İletişim

Verinizi nasıl tutacağınızı konuşalım

30 dakikalık ücretsiz keşif görüşmesinde verinizin yapısını, çıkması gereken raporları ve PostgreSQL’in size uyup uymadığını birlikte netleştirelim.