Skip to content

Entity Framework - Bulk Operations

Giriş

Entity Framework'te Bulk Operations (Toplu İşlemler), büyük veri setleri üzerinde verimli bir şekilde toplu ekleme, güncelleme ve silme işlemleri yapmayı sağlayan tekniklerdir. Mid-level geliştiriciler için bu tekniklerin anlaşılması ve etkin kullanımı kritik öneme sahiptir.

Bulk Operations'ın Önemi

  1. Performans
  2. Daha hızlı işlem süreleri
  3. Daha az veritabanı yükü
  4. Daha az network trafiği
  5. Daha iyi kaynak kullanımı

  6. Ölçeklenebilirlik

  7. Büyük veri setleriyle çalışma
  8. Yüksek hacimli işlemler
  9. Batch processing
  10. Paralel işlemler

  11. Bakım

  12. Daha az kod
  13. Daha kolay debug
  14. Daha iyi test edilebilirlik
  15. Daha kolay bakım

Bulk Operations Teknikleri

  1. Bulk Insert

    // Temel bulk insert
    var blogs = new List<Blog>();
    for (int i = 0; i < 1000; i++)
    {
        blogs.Add(new Blog { Title = $"Blog {i}" });
    }
    
    // 1. Yöntem: AddRange
    _context.Blogs.AddRange(blogs);
    await _context.SaveChangesAsync();
    
    // 2. Yöntem: BulkExtensions
    await _context.BulkInsertAsync(blogs);
    
    // 3. Yöntem: ExecuteSqlRaw
    var sql = "INSERT INTO Blogs (Title) VALUES (@p0)";
    var parameters = blogs.Select(b => new SqlParameter("@p0", b.Title)).ToArray();
    await _context.Database.ExecuteSqlRawAsync(sql, parameters);
    

  2. Bulk Update

    // Temel bulk update
    var blogs = await _context.Blogs.ToListAsync();
    foreach (var blog in blogs)
    {
        blog.Rating += 1;
    }
    
    // 1. Yöntem: UpdateRange
    _context.Blogs.UpdateRange(blogs);
    await _context.SaveChangesAsync();
    
    // 2. Yöntem: BulkExtensions
    await _context.BulkUpdateAsync(blogs);
    
    // 3. Yöntem: ExecuteSqlRaw
    var sql = "UPDATE Blogs SET Rating = Rating + 1";
    await _context.Database.ExecuteSqlRawAsync(sql);
    

  3. Bulk Delete

    // Temel bulk delete
    var blogs = await _context.Blogs
        .Where(b => b.Rating < 3)
        .ToListAsync();
    
    // 1. Yöntem: RemoveRange
    _context.Blogs.RemoveRange(blogs);
    await _context.SaveChangesAsync();
    
    // 2. Yöntem: BulkExtensions
    await _context.BulkDeleteAsync(blogs);
    
    // 3. Yöntem: ExecuteSqlRaw
    var sql = "DELETE FROM Blogs WHERE Rating < 3";
    await _context.Database.ExecuteSqlRawAsync(sql);
    

  4. Batch Processing

    // Batch işleme
    public async Task ProcessInBatches<T>(List<T> items, int batchSize, Func<List<T>, Task> processBatch)
    {
        for (int i = 0; i < items.Count; i += batchSize)
        {
            var batch = items.Skip(i).Take(batchSize).ToList();
            await processBatch(batch);
        }
    }
    
    // Kullanımı
    var blogs = new List<Blog>();
    // ... blogs doldurulur
    
    await ProcessInBatches(blogs, 100, async batch =>
    {
        _context.Blogs.AddRange(batch);
        await _context.SaveChangesAsync();
    });
    

  5. Bulk Operations Optimizasyonu

    // Change tracking optimizasyonu
    _context.ChangeTracker.AutoDetectChangesEnabled = false;
    try
    {
        // Bulk işlemler
        await _context.SaveChangesAsync();
    }
    finally
    {
        _context.ChangeTracker.AutoDetectChangesEnabled = true;
    }
    
    // Transaction optimizasyonu
    using var transaction = await _context.Database.BeginTransactionAsync();
    try
    {
        // Bulk işlemler
        await transaction.CommitAsync();
    }
    catch
    {
        await transaction.RollbackAsync();
        throw;
    }
    
    // Batch size optimizasyonu
    var batchSize = 1000; // Veritabanı ve network kapasitesine göre ayarlanır
    

Best Practices

  1. Bulk Operations Tasarımı
  2. Uygun batch size seçimi
  3. Transaction yönetimi
  4. Error handling
  5. Retry mekanizmaları

  6. Performans

  7. Batch size optimizasyonu
  8. Change tracking optimizasyonu
  9. Index kullanımı
  10. Resource yönetimi

  11. Güvenlik

  12. SQL injection önleme
  13. Parametre kullanımı
  14. Access control
  15. Audit logging

  16. Bakım

  17. Kod organizasyonu
  18. Documentation
  19. Testing
  20. Monitoring

Mülakat Soruları

Temel Sorular

  1. Entity Framework'te Bulk Operations nedir?
  2. Cevap: Bulk Operations, büyük veri setleri üzerinde verimli bir şekilde toplu ekleme, güncelleme ve silme işlemleri yapmayı sağlayan tekniklerdir.

  3. Entity Framework'te bulk insert nasıl yapılır?

  4. Cevap: AddRange, BulkExtensions veya ExecuteSqlRaw kullanılarak yapılabilir.

  5. Entity Framework'te bulk update nasıl yapılır?

  6. Cevap: UpdateRange, BulkExtensions veya ExecuteSqlRaw kullanılarak yapılabilir.

  7. Entity Framework'te bulk delete nasıl yapılır?

  8. Cevap: RemoveRange, BulkExtensions veya ExecuteSqlRaw kullanılarak yapılabilir.

  9. Entity Framework'te batch processing nedir?

  10. Cevap: Büyük veri setlerini daha küçük parçalara bölerek işleme tekniğidir.

Teknik Sorular

  1. Bulk insert nasıl optimize edilir?
  2. Cevap:

    _context.ChangeTracker.AutoDetectChangesEnabled = false;
    try
    {
        _context.Blogs.AddRange(blogs);
        await _context.SaveChangesAsync();
    }
    finally
    {
        _context.ChangeTracker.AutoDetectChangesEnabled = true;
    }
    

  3. Batch processing nasıl implemente edilir?

  4. Cevap:

    public async Task ProcessInBatches<T>(List<T> items, int batchSize, Func<List<T>, Task> processBatch)
    {
        for (int i = 0; i < items.Count; i += batchSize)
        {
            var batch = items.Skip(i).Take(batchSize).ToList();
            await processBatch(batch);
        }
    }
    

  5. Transaction yönetimi nasıl yapılır?

  6. Cevap:

    using var transaction = await _context.Database.BeginTransactionAsync();
    try
    {
        // Bulk işlemler
        await transaction.CommitAsync();
    }
    catch
    {
        await transaction.RollbackAsync();
        throw;
    }
    

  7. Bulk operations'da error handling nasıl yapılır?

  8. Cevap:

    try
    {
        // Bulk işlemler
    }
    catch (DbUpdateException ex)
    {
        // Hata yönetimi
    }
    catch (Exception ex)
    {
        // Genel hata yönetimi
    }
    

  9. Bulk operations'da retry mekanizması nasıl implemente edilir?

  10. Cevap:
    public async Task RetryBulkOperation<T>(Func<Task> operation, int maxRetries = 3)
    {
        for (int i = 0; i < maxRetries; i++)
        {
            try
            {
                await operation();
                return;
            }
            catch (Exception ex)
            {
                if (i == maxRetries - 1) throw;
                await Task.Delay(1000 * (i + 1));
            }
        }
    }
    

İleri Seviye Sorular

  1. Entity Framework'te bulk operations performansı nasıl optimize edilir?
  2. Cevap:

    • Batch size optimizasyonu
    • Change tracking optimizasyonu
    • Index kullanımı
    • Resource yönetimi
    • Parallel processing
  3. Entity Framework'te distributed sistemlerde bulk operations nasıl yönetilir?

  4. Cevap:

    • Distributed transactions
    • Data partitioning
    • Replication
    • Consistency
    • Conflict resolution
  5. Entity Framework'te high concurrency senaryolarında bulk operations nasıl yönetilir?

  6. Cevap:

    • Optimistic concurrency
    • Pessimistic concurrency
    • Retry mekanizmaları
    • Queue yönetimi
    • Batch processing
  7. Entity Framework'te bulk operations monitoring ve profiling nasıl yapılır?

  8. Cevap:

    • Performance metrics
    • Resource monitoring
    • Profiling tools
    • Health checks
    • Logging
  9. Entity Framework'te custom bulk operations stratejileri nasıl geliştirilir?

  10. Cevap:
    • Custom batch processing
    • Custom error handling
    • Custom retry mekanizmaları
    • Custom monitoring
    • Custom optimization