Veritabanı sorgularının nasıl çekileceği konusunda doğru yaklaşım, uygulamanızın hızını belirleyebilir. Laravel'de Eager Loading ve Lazy Loading arasındaki farkları anlamak çok önemlidir.
- Eager Loading, ilişkili verileri tek bir sorgu ile yükler. Bu, özellikle çok sayıda ilişkiyi olan veritabanı modellerinde performans kazancı sağlar. Örneğin, kullanıcıların ve onların yazılarının listelendiği bir uygulamada, `User::with('posts')->get()` kullanarak ilişkili tüm veriler bir arada çekilebilir.
```php
$users = User::with('posts')->get();
```
- Lazy Loading ise her ilişkili veri için ayrı sorgular gönderir. Bu, küçük veri setlerinde kullanışlı olabilir, ancak büyük veritabanlarında performansı ciddi şekilde etkileyebilir.
Performans iyileştirmesi için Eager Loading'i tercih etmeniz genellikle daha verimli olacaktır.
Veritabanınızda indeksleme yapmak, sorgu sürelerini önemli ölçüde kısaltabilir. Laravel'de migration dosyalarınızı kullanarak veritabanı indeksleri eklemek oldukça kolaydır.
Örneğin, bir unique index eklemek için şu kodu kullanabilirsiniz:
```php
Schema::table('users', function (Blueprint $table) {
$table->index('email');
});
```
Bu, email adresi üzerinde yapılacak aramalarda önemli performans artışı sağlar.
Cache, sık kullanılan verilerin hızlı bir şekilde sunulmasını sağlar. Laravel, veritabanı sorgularını önbelleğe alarak, aynı veriye her erişimde yeniden sorgu yapılmasını engeller.
Örneğin, veritabanındaki kullanıcı verilerini önbelleğe almak için şu kodu kullanabilirsiniz:
```php
$users = Cache::remember('users', 60, function () {
return User::all();
});
```
Bu, 60 dakika boyunca users verisini önbellekten çeker.
Migrations, veritabanı yapısını değiştiren Laravel araçlarıdır. Ancak, veritabanı yapısını çok sık değiştirmek performans sorunlarına yol açabilir. Migrations'ı verimli kullanmak için, sadece gerçekten gerekli olduğunda yeni indeksler veya tablolar eklemeli, eski verileri düzenli olarak temizlemelisiniz.
Veritabanı üzerinde toplu işlemler yapmak, özellikle büyük veri kümeleriyle çalışırken zaman kazandırır. Laravel, batch update ve bulk insert işlemleri için bazı fonksiyonlar sunar.
Örneğin, çok sayıda kullanıcıyı güncellemek için `update` fonksiyonunu kullanabilirsiniz:
```php
User::whereIn('id', $userIds)->update(['status' => 'active']);
```
Bu tarz toplu işlemler, her kullanıcıyı ayrı ayrı güncellemeye göre çok daha hızlıdır.
Laravel Queue, veritabanı bağlantıları üzerinde yoğun yük oluşturduğunda arka planda işlemleri çalıştırarak uygulamanın hızını artırır. Özellikle yüksek trafikli uygulamalarda, Redis gibi kuyruk sistemlerini kullanarak veri işleme ve sorgulama işlemlerini daha verimli hale getirebilirsiniz.
```php
dispatch(new SendEmail($user));
```
Yukarıdaki kod örneği, bir e-posta gönderme işlemini kuyruğa atarak, kullanıcıya hemen cevap dönebilir.
Veritabanı performansını artırmak kadar, güvenliği sağlamak da önemlidir. Laravel, SQL Injection saldırılarına karşı güçlü korumalar sunar. Veritabanı sorgularınızı Eloquent ORM veya Query Builder ile yazdığınızda, bu saldırılara karşı korunmuş olursunuz.
```php
$users = DB::table('users')->where('email', $email)->get();
```
Bu, doğrudan kullanıcı verilerini alırken güvenliği sağlamanın en iyi yoludur.
Veritabanı tasarımını doğru yapmak, performansı artırmak için kritik öneme sahiptir. Normalizasyon, veritabanındaki veri tekrarlarını azaltarak sorguları daha hızlı hale getirebilir.
Laravel, normalizasyon işlemleri için migration araçları sunar ve veritabanı ilişkilerini kolayca yönetmenizi sağlar.
Laravel Telescope, uygulamanızın tüm sorgu işlemlerini, hataları ve performans verilerini izlemenizi sağlar. Bu araç, uygulamanızın darboğazlarını tespit etmenize yardımcı olur.
```php
Telescope::filter(function ($entry) {
return $entry->type === 'query';
});
```
Bu şekilde, yalnızca veritabanı sorguları üzerinde yoğunlaşarak performansınızı iyileştirebilirsiniz.
Veritabanı yedekleme, büyük veritabanlarına sahip uygulamalarda önemlidir. Laravel, veritabanı yedekleme işlemleri için birçok paket sunar. Bunları kullanarak düzenli yedekler alabilir ve performansın bozulmasını engelleyebilirsiniz.
```bash
php artisan db:backup
```
Bu komut, veritabanınızın tam yedeğini alır.