Hızlı ve arama yapılabilir bir platforma binlerce kayıt organize ederken öğrenilen dersler.
Giriş
Giriş
Büyük bir içerik platformu geliştirmeye başladığımda, en büyük zorluğun kod yazmak değil, bilgiyi organize etmek olduğunu hızlıca fark ettim.
Başlangıçta her şey tek bir listede bulunuyordu. Veritabanı büyüdükçe, navigasyon yavaşladı, arama sonuçları tutarsız hale geldi ve yeni içerik eklemek giderek daha karmaşık bir mantık gerektirdi.
Problemleri geçici çözümlerle düzeltmek yerine, platformu kategoriler, temiz URL’ler, veritabanı ilişkileri ve verimli indeksleme etrafında yeniden tasarladım.
Bu makalede, iyi çalışan mimariyi, yaptığım hataları ve ölçeklenebilirliği artıran mühendislik kararlarını paylaşıyorum.
Problem
Problem
Pek çok içerik web sitesi organik olarak büyür.
Birkaç sayfa, yüzlerce hale gelir.
Yüzlerce sayfa, binlerce hale gelir.
Planlama olmadan, sonunda şunlarla karşılaşacaksınız:
- Yinelenen içerik
- Yavaş arama sorguları
- Zorlayıcı navigasyon
- Kötü URL yapısı
- Büyük veritabanı birleştirmeleri
- Zayıf iç keşfedilebilirlik
Bu problemler yalnızca oyun web sitelerine özgü değildir; dokümantasyon portalları, bilgi tabanları, bloglar, pazar yerleri ve geliştirici kaynakları için de geçerlidir.
Kod Yazmadan Önce Bilgi Mimarisi
Kod Yazmadan Önce Bilgi Mimarisi
Erken öğrendiğim bir ders:
Kötü bir veritabanı genellikle düzeltilebilir.
Kötü bir bilgi mimarisi, pahalı hale gelir.
Sayfalar üzerinde düşünmek yerine, ilişkileri düşünmeye başladım.
Game
│
├── Category
│ │
│ ├── Scripts
│ ├── Features
│ └── Metadata
│
└── Related Games
Öncelikle hiyerarşiyi tanımladıktan sonra her şey daha kolay hale geldi.
Veritabanı Tasarımı
Veritabanı Tasarımı
Basitleştirilmiş bir şema şöyle görünüyordu:
games
-----
id
name
slug
categories
----------
id
game_id
title
slug
scripts
-------
id
category_id
title
slug
description
created_at
features
--------
id
script_id
feature
Tekrar eden bilgileri depolamak yerine, ilişkiler her şeyi doğal olarak yönetti.
Faydaları:
- Daha küçük tablolar
- Kolay güncellemeler
- Daha iyi bakım
- Daha temiz sorgular
URL Tasarımı
URL Tasarımı
Okunabilir URL’ler, hem kullanıcılar hem de bakım yapanlar için önemlidir.
Şöyle bir yapı tercih ettim:
/categories/scripts/example-game
ve
/items/example-script/1253
Faydaları:
- Kolay hata ayıklama
- Daha iyi navigasyon
- Öngörülebilir yönlendirme
- Daha temiz analitik
Laravel Yönlendirme Örneği
Laravel Yönlendirme Örneği
Route::get('/categories/{slug}', [CategoryController::class, 'show']);
Route::get('/items/{slug}/{id}', [ScriptController::class, 'show']);
Basit yönlendirmeler bakımını azaltır ve okunabilirliği artırır.
Arama Mimarisi
Arama Mimarisi
Erken yaptığım hatalardan biri aramayı basit bir SQL sorgusu gibi ele almaktı.
SELECT *
FROM scripts
WHERE title LIKE '%fruit%';
Bu hızla verimsiz hale geldi.
Bunun yerine:
- indekslenmiş sütunlar
- normalleştirilmiş slug’lar
- arama yapılabilir meta veriler
- kategori filtreleme
gerekli taramaları azaltmak için birleştirildi.
Bilgi Keşfi Olarak İç Bağlantılar
Bilgi Keşfi Olarak İç Bağlantılar
Pek çok geliştirici iç bağlantıların yalnızca SEO için önemli olduğunu düşünür.
Ben onları farklı bir şekilde incelemeye başladım.
Her iç bağlantı, başka bir navigasyon yolu haline geldi.
Örnek:
Homepage
│
├── Categories
│ │
│ ├── Scripts
│ │ │
│ │ └── Related Scripts
│ │
│ └── Featured Items
│
└── Search
Kullanıcılar, içerikleri doğal olarak daha fazla keşfetti.
Önbellekleme
Önbellekleme
Önbellekleme olmadan, her sayfa birçok veritabanı sorgusuna ihtiyaç duyar.
Laravel optimizasyonu kolay hale getirdi.
$categories = Cache::remember(
'categories',
now()->addHours(6),
fn() => Category::all()
);
Basit önbellekleme, tekrar eden veritabanı işlemlerini azaltır ve yanıt sürelerini artırır.
Pagination
Pagination
Büyük veri setleri bir defada yüklenmemelidir.
Onun yerine:
$items = Script::paginate(20);
Pagination, şunları iyileştirdi:
- hafıza kullanımı
- yanıt hızı
- veritabanı verimliliği
İndeksleme Stratejisi
İndeksleme Stratejisi
İndeksler, çoğu geliştiricinin fark ettiğinden daha önemlidir.
Sık filtrelenen sütunlar indekslenmelidir.
Örnekler:
- slug
- game_id
- category_id
- created_at
Doğru indeksleme, veritabanı büyüdükçe sorgu süresini önemli ölçüde azaltır.
Öğrenilen Dersler
Öğrenilen Dersler
Yazılım geliştirmek, nadiren daha fazla kod yazmakla ilgilidir.
Çoğunlukla karmaşıklığı azaltmakla ilgilidir.
En büyük iyileştirmeler:
- ilişkileri basitleştirmek
- yinelenen verileri azaltmak
- navigasyonu iyileştirmek
- ölçeklenmeden önce içeriği düzenlemek
Son Düşünceler
Son Düşünceler
Dokümantasyon portali, pazar yeri, blog veya arama yapılabilir içerik platformu oluştursanız da, erken yapılan mimari kararlar projenin daha sonra nasıl kolayca ölçekleneceğini belirleyecektir.
Bu fikirleri kendi Laravel tabanlı projem olan BloxScriptsDB’yi yaratırken uyguladım. Burada amaç, sayfaların devasa bir listesi yerine yapılandırılmış, arama yapılabilir bir içerik deneyimi oluşturmaktı.
Proje, iyi mimarinin daha fazla teknoloji kullanmaktan çok, bilgiyi düzenlemeyi, sürdürmeyi ve keşfetmeyi kolaylaştırmakla ilgili olduğunu hatırlatan pratik bir örnek haline geldi.
Çevrimiçi çıktısı: https://bloxscriptsdb.net
Kaynak: Orijinal Makale


