İşler ve İlişkiler
Neyin arşivleneceğini tanımlayın: kök tablo, satırları seçen filtre ve onlara ait ilişkili tablolar.
Bir iş, taşınacak tek bir veri kümesini tarif eder: nereden başladığını, hangi satırların uygun olduğunu ve onlara nelerin ait olduğunu.
jobs:
archive_old_orders:
root_table: orders
primary_key: id
where: "created_at < DATE_SUB(NOW(), INTERVAL 2 YEAR)"
relations:
- table: order_items
primary_key: id
foreign_key: order_id
dependency_type: "1-N"
İşin adı — burada archive_old_orders — komut satırında onu seçme biçiminizdir
ve GoArchive’in ilerlemesini izlerken kullandığı addır.
İş ayarları
| Ayar | Açıklama | Zorunlu |
|---|---|---|
root_table | İşin başladığı tablo | Evet |
primary_key | O tablonun primary key sütunu | Evet |
where | Taşınacak satırları seçen filtre | Evet |
relations | Satırları kök satırlara ait olan tablolar | Hayır |
Filtre
where, kök tabloya uygulanan bir SQL koşuludur. Zorunludur — örtük bir “her
şey” yoktur, dolayısıyla bir iş niyetini her zaman açıkça belirtir.
where: "created_at < DATE_SUB(NOW(), INTERVAL 2 YEAR)"
where: "status = 'closed' AND closed_at < '2024-01-01'"
where: "1=1" # bilerek, tablonun tamamı
Yalnızca kök tablo filtrelenir. İlişkili satırlar kendi filtreleriyle değil, eşleşen kök satırlarla olan ilişkileri üzerinden seçilir.
Primary key
primary_key, bir satırı tanımlayan sütunu belirtir. Tablonun gerçek primary
key’i olmalı ve veritabanındaki yazımıyla — büyük-küçük harf dâhil — birebir
aynı yazılmalıdır.
Kök tablonun anahtarı tam sayı türünde olmalıdır. İlişkili tablolar tek sütunlu her anahtar türünü kullanabilir.
İlişkiler
Her ilişki bir tabloyu, satırlarını tanımlayan sütunu ve üst kayda işaret eden sütunu belirtir.
| Ayar | Açıklama | Zorunlu |
|---|---|---|
table | İlişkili tablo | Evet |
primary_key | Onun primary key sütunu | Evet |
foreign_key | Üst kayda işaret eden sütun | Evet |
dependency_type | 1-1 veya 1-N | Hayır |
relations | Bu tabloya bağlı tablolar | Hayır |
İç içe ilişkiler
İlişkiler, verinizin gerektirdiği her derinlikte iç içe geçebilir. İç içe bir ilişki, köke değil, içinde bulunduğu tabloya aittir:
jobs:
archive_old_orders:
root_table: orders
primary_key: id
where: "created_at < DATE_SUB(NOW(), INTERVAL 2 YEAR)"
relations:
- table: order_items
primary_key: id
foreign_key: order_id
dependency_type: "1-N"
- table: shipments
primary_key: id
foreign_key: order_id
dependency_type: "1-1"
relations:
- table: shipment_items
primary_key: id
foreign_key: shipment_id
dependency_type: "1-N"
shipment_items, shipments tablosuna referans verir; bu yüzden onun içine
yerleşir. Bunu doğru kurmak önemlidir: iç içelik, tabloların hangi sırayla
yazılıp silineceğini belirler.
Çalıştırmadan önce yapıyı teyit edin:
goarchive plan -c archiver.yaml --job archive_old_orders
validate ayrıca tanımladığınız iç içeliğin, veritabanındaki gerçek ilişkilerle
örtüştüğünü denetler.
Adlandırma
Tablo ve sütun adları harf, rakam ve alt çizgi içerebilir. Adlar şema öneki
olmadan verilir — bir iş, source ve destination bloklarında belirtilen
veritabanları içinde çalışır.
Birden çok iş
jobs:
archive_old_orders:
root_table: orders
primary_key: id
where: "created_at < DATE_SUB(NOW(), INTERVAL 2 YEAR)"
archive_old_sessions:
root_table: sessions
primary_key: id
where: "last_seen_at < DATE_SUB(NOW(), INTERVAL 90 DAY)"
İşler teker teker, adlarıyla seçilerek çalışır:
goarchive archive -c archiver.yaml --job archive_old_sessions
