Sobes.tech
Junior — Middle

Sistemde iç içe işlemler uygulanabilir mi ve hangi durumlarda bu kabul edilebilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'nun standart kütüphanesinde (database/sql paketi) iç içe işlemler doğrudan desteklenmemektedir, çünkü çoğu veritabanı yönetim sistemi (DBMS) tam anlamıyla iç içe işlemleri uygulamamaktadır. Bunun yerine, genellikle kaydetme noktaları (savepoints) kullanılır; bu, işlemin belirli bir noktasına geri dönmeyi sağlar.

Olası seçenekler:

  • DBMS bunları destekliyorsa savepoints kullanmak (örneğin, PostgreSQL, MySQL). Go'da, SQL komutları SAVEPOINT, ROLLBACK TO SAVEPOINT çalıştırılarak yapılabilir.
  • İç içe işlemleri taklit etmek için ayrı işlemler kullanmak, ancak bu her zaman iş mantığı açısından doğru olmayabilir.

Ne zaman izin verilir:

  • Büyük bir işlem içinde kısmi değişiklikleri geri almak istiyorsanız, tüm işlemi geri almadan.
  • Birden fazla aşaması olan karmaşık işlemlerde, her aşama ayrı ayrı geri alınabilir.

Go'da savepoints kullanımı örneği:

trx, err := db.Begin()
if err != nil {
    // hata işleme
}
_, err = trx.Exec("SAVEPOINT sp1")
if err != nil {
    trx.Rollback()
    return err
}
// İşlemleri gerçekleştir
// Hata durumunda:
_, err = trx.Exec("ROLLBACK TO SAVEPOINT sp1")
// Devam et veya tam commit yap
err = trx.Commit()

Bu şekilde, iç içe işlemler savepoints aracılığıyla gerçekleştirilir, iç içe Begin/Commit çağrılarıyla değil.