Doküman menüsü

Sürüm 1.8.0-community

İş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ı

AyarAçıklamaZorunlu
root_tableİşin başladığı tabloEvet
primary_keyO tablonun primary key sütunuEvet
whereTaşınacak satırları seçen filtreEvet
relationsSatırları kök satırlara ait olan tablolarHayı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.

AyarAçıklamaZorunlu
tableİlişkili tabloEvet
primary_keyOnun primary key sütunuEvet
foreign_keyÜst kayda işaret eden sütunEvet
dependency_type1-1 veya 1-NHayır
relationsBu tabloya bağlı tablolarHayı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