Breaking News

Pendekatan Arsitektur Data Hemat Biaya di SQL Azure

 Data arsitektur yang andal menjadi sangat penting pada saat transaksi data menjadi krusial dan menghadapi volume query yang besar, Hal yang dialami umumnya adalah: 

  • Performa: Tabel besar (ratusan ribu hingga jutaan baris) menyebabkan query/load data di aplikasi Web ASP.NET menjadi lambat (kemungkinan full table scan, I/O tinggi, atau lock contention).
  • Biaya: Semua data (termasuk data lama >90 hari) disimpan di storage mahal, padahal data lama jarang diakses.

Solusi yang diusulkan adalah pemisahan arsip (archive separation) dengan pendekatan Hot-Cold Data Architecture. Data “hot” (≤90 hari) tetap di database operasional yang cepat dan mahal, sedangkan data “cold” (>90 hari) dipindah ke database arsip yang lebih hemat biaya. Pendekatan ini memanfaatkan fitur native Azure SQL (table partitioning + partition switching) dan Azure Data Factory untuk automasi.

Komponen Utama:

  • Hot Database (Operational DB): Azure SQL Database (General Purpose / Business Critical tier, v Core atau DTU). Hanya menyimpan data terbaru.
  • Archive Database (Cold DB): Azure SQL Database terpisah (Serverless Compute tier – auto-pause setelah idle). Biaya sangat rendah karena bisa pause otomatis.
  • Archiving Pipeline: Azure Data Factory (ADF) + Stored Procedure / Partition Switch.
  • Opsional (Very Cold): Jika data arsip hampir tidak pernah dibaca, ekspor ke Azure Blob Storage (Cool/Archive tier) + External Table.
Mari kita bahas teknisnya!

Pertama kita harus membuat table partitioning di Hot Database
  • Partition berdasarkan kolom tanggal (misalnya CreatedDate atau TransactionDate). Ikuti langkah berikut
  • Range partition: harian/mingguan/bulan (contoh: partition untuk setiap 30 hari).
  • Manfaat:
    • Partition Elimination → query ASP.NET yang pakai filter tanggal otomatis hanya scan partition yang diperlukan (jauh lebih cepat).
    • Partition Switching → memindah data lama dalam hitungan detik (metadata operation, hampir tanpa lock).
  • Maintenance (index rebuild, stats update) bisa per-partition saja.

Kedua kita membuat Archive Database
  • Buat database terpisah di logical server yang sama (atau berbeda untuk isolasi).
  • Gunakan Serverless Tier (0.5–4 vCore, auto-pause 1–6 jam). Biaya compute hampir nol saat tidak dipakai.
  • Schema tabel identik dengan Hot DB.
  • Storage lebih murah karena tier rendah + data yang sudah dikompresi (page compression + columnstore index jika data analitik).
Kemudian kita lakukan otomasi pengarsipan pakai Azure Data Factory 
  • Azure Data Factory Pipeline (jadwal mingguan/bulanan):
    • Identify data >90 hari (WHERE CreatedDate < DATEADD(DAY, -90, GETUTCDATE())).
    • Preferred: Partition Switch ke staging table → insert ke Archive DB → drop staging.
    • Atau Copy Activity (parallel copy) + Delete (dengan batching agar tidak lock lama).
    • Logging + error handling + alert via Azure Monitor.
  • Keunggulan ADF: Scheduling, retry, monitoring, scalable, tidak perlu custom code di ASP.NET.
Terakhir kita optimasi kode ASP.NET ya
    • Semua query utama tambahkan filter tanggal (WHERE CreatedDate >= DATEADD(DAY, -90, GETDATE())).
    • Untuk data lama: tambah parameter IsArchive atau halaman terpisah yang mengarah ke Archive DB (connection string berbeda).
      • Gunakan Repository Pattern atau Entity Framework dengan dua DbContext (HotContext & ArchiveContext).
      • Paging & Indexing wajib (OFFSET-FETCH atau Keyset pagination) agar tidak load ratusan ribu baris sekaligus.
      • Opsional: Buat Synonym atau View di Hot DB yang UNION ALL ke Archive DB (jika akses arsip sering).
    Kalau mau lebih ngirit bisa coba ini
    • Very Cold Storage: Setelah 1 tahun → ekspor ke Azure Blob Storage (Archive tier) + query via External Table (PolyBase) di Archive DB.
    • Hyperscale Tier di Hot DB jika data tetap besar tapi ingin storage terpisah.
    • Elastic Pool jika ada banyak database kecil.
    Yuk kita buat timelinenya. 

    • Assessment (1–2 minggu)
      • Identifikasi tabel besar & kolom date.
      • Analisis query ASP.NET (Query Store + Azure SQL Insights).
    • Setup Hot DB Partitioning (1 minggu)
      • Tambah partition function/scheme + rebuild clustered index.
    • Buat Archive DB & Pipeline ADF (1–2 minggu)
      • Deploy Serverless DB.
      • Buat pipeline + stored procedure archiving.
    • Migrasi Awal Data Lama
      • Jalankan sekali untuk pindah data existing >90 hari.
    • Update & Deploy ASP.NET
      • Ubah query, tambah logic archive access.
      • Test load testing.
    • Monitoring & Optimization
      • Azure Monitor + Cost Management.
      • Review setiap 3 bulan (sliding window 90 hari).


    Tidak ada komentar