7 puan yazan GN⁺ 2024-11-13 | 2 yorum | WhatsApp'ta paylaş

Postgres hakkında bilseydim iyi olurdu diyeceğim şeyler

  • Postgres belgelerinin kapsamı: Postgres’in resmi belgeleri çok iyidir, ancak hacmi o kadar büyüktür ki başlangıç seviyesindeki bir mühendisin baştan sona okuması zordur.

Veri normalizasyonu

  • Veri normalizasyonu: Veritabanı şemasında yinelenen verileri kaldırma sürecidir. Örneğin, documents tablosunda user_email sütunu bulundurmak yerine bunu users tablosuna yabancı anahtarla bağlamak daha iyidir.
  • Denormalizasyon ihtiyacı: Belirli verileri daha hızlı okumak için bazen denormalizasyon gerekebilir. Ancak denormalize edilmiş veriler, veri tutarsızlığı veya artan yazma karmaşıklığı gibi maliyetler doğurur.

Postgres yaratıcılarının tavsiyelerine uyun

  • Postgres Wiki’deki "yapılmaması gerekenler": Resmi Postgres Wiki’de bir "yapılmaması gerekenler" listesi vardır. Tam olarak anlamasanız bile hatalardan kaçınmanıza yardımcı olabilir.
  • Öneriler: Tüm metinleri saklamak için text tipini kullanın, tüm zaman damgalarını saklamak için timestampz/time with time zone tipini kullanın, tablo adlarını snake_case ile yazın.

Yaygın SQL tuhaflıkları

  • SQL büyük/küçük harfe duyarlı değildir: SQL anahtar sözcükleri büyük/küçük harfe duyarlı değildir. Bu sadece Postgres’e özgü değildir.
  • NULL değerinin tuhaflığı: SQL’deki NULL, "bilinmiyor" anlamına gelir ve çoğu operatörle birleştiğinde sonuç NULL olur. IS NULL, IS NOT NULL gibi operatörlerle NULL karşılaştırılabilir.

psql'i daha kullanışlı hale getirmek

  • Çıktı okunabilirliğini artırma: Uzun çıktıları daha rahat görebilmek için terminal pager ayarlanabilir. Pager olarak less kullanılabilir.
  • Belirsiz NULL değerlerini netleştirme: psql içinde NULL değerini gösterecek bir dize ayarlayarak çıktıda NULL daha açık hale getirilebilir.
  • Otomatik tamamlama kullanımı: psql, SQL anahtar sözcüklerini veya tablo adlarını kolayca girmek için otomatik tamamlamayı destekler.

İndeks eklemenin etkisi

  • İndeksin tanımı: İndeks, verilerin hızlı sorgulanmasına yardımcı olan bir veri yapısıdır.
  • İndeksin sınırları: Yerel veritabanında neredeyse hiç satır yoksa indeks yararlı olmayabilir. Birden fazla sütun indekslenirken sıra önemlidir.

JSONB kullanımı

  • JSONB’nin avantajları ve dezavantajları: Postgres, JSON’u verimli biçimde depolama ve sorgulama özellikleri sunar; ancak yanlış kullanılırsa performans düşebilir.
  • JSONB’nin yapısal sınırlamaları: JSONB sütunları yapı garantisi vermez; bu nedenle standart tablo şemaları kadar kendi kendini belgeleyen bir yapıya sahip değildir.

Diğer faydalı ipuçları

  • Uzun transaction’ların sorunları: Bir transaction çok uzun sürerse diğer istemcilerin veritabanına erişmesini engelleyebilir.
  • Postgres’in güçlü özellikleri: Postgres, doküman odaklı veritabanlarının güçlü yanlarını sunar ve JSONB üzerinden verileri verimli biçimde depolayıp sorgulayabilir.

2 yorum

 
bbulbum 2024-11-19

Yapılmaması gerekenler; bir gün mutlaka okuyacağım.

 
GN⁺ 2024-11-13
Hacker News görüşü
  • Postgres büyük/küçük harfe duyarlıdır, ancak sorgularda anahtar kelimeleri büyük harfle yazmak okunabilirliği artırmak içindir. Bu zorunlu değildir ama hata ayıklama sırasında sorguyu görsel olarak daha anlaşılır hale getirmek faydalıdır

    • Diğer dillerde kod biçimlendirmeye benzer şekilde, tutarlı girintileme vb. şeyler anlama süresini kısaltır ve önemli kısımlara odaklanmayı sağlar
    • actuallyUsingCaseInIdentifiers gibi tanımlayıcılarda büyük harf kullanmaktan kaçınmak isterim
  • "Don't Do This" wiki maddesini ilk kez keşfettim ve çok faydalı buldum

  • İçeriğin büyük kısmı Postgres'e özgü değil (ör. null'ın tuhaflığı, indeks sütun sırası vb.)

    • Örneğin, null'ın indeksler ve benzersiz kısıtlarla etkileşim biçimi MySQL'de de sezgisel değil
    • Kullanıcı tablosunda null kabul etmeyen bir e-posta sütunu ve null kabul eden bir kullanıcı adı sütunu varken, (email, username) gibi bir benzersiz kısıt varsa aynı e-postayı null kullanıcı adıyla birden fazla kez ekleyebilirsiniz
  • Veriyi normalize etme tavsiyesine temkinli yaklaşmak gerekir

    • Yazar 10 farklı normalizasyon türünden bahsetmiş, ancak çoğu insanın bunların 7'sini kullanmasına gerek yok
  • Keşke geliştiriciler normalizasyona daha fazla dikkat etse ve her şeyi JSON(b) sütunlarına koymayı bıraksa

  • "yolculuk" kelimesi aşırı kullanıldığı için bloglarda itici geliyor

  • Kod bölümleri mobilde neredeyse kaydırılamayacak kadar kullanışsız

  • JSON spesifikasyonunda null, sabit bir değerdir; SQL'deki NULL ile aynı şey değildir

  • İndeks eklemek hiçbir etki yaratmayabilir

    • Postgres'in yaklaşımının fazla katı ya da anlaşılması zor yanları var
    • Gelecek sürümlerde hint desteği eklenme ihtimali olduğu için umut verici
  • Bu tür yazıları okuyup %90'ını anlayabiliyor olmak, üstlendiğim işlerle ilgili gurur duymamı sağlıyor