Update besar apk finance
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# Tahap 16 — Skalabilitas database dan performa
|
||||
|
||||
## Implementasi
|
||||
|
||||
- Migration `20260902000100` menambahkan indeks query transaksi, database session, dashboard summary, queue, dead-letter, dan metrik database.
|
||||
- Migration `20260902000200` menyediakan shared application cache.
|
||||
- Migration `20260902000300` menyediakan arsip activity log.
|
||||
- Session default menggunakan driver database (`ci_sessions`). Production dapat mengatur `SESSION_DRIVER=database`; Redis dapat dipilih setelah extension dan server Redis tersedia.
|
||||
- Dashboard summary di-cache 5 menit per company. Chart dapat dikembangkan dengan pola cache yang sama bila volume jurnal sudah besar.
|
||||
- Endpoint `lookups/search/{customer|item|account|employee|supplier}` memakai pencarian dan pagination maksimal 30 baris.
|
||||
- Form penerimaan pelanggan telah berhenti memuat seluruh customer dan menggunakan AJAX lookup.
|
||||
- Queue memiliki claim transaction/row lock, idempotency key, exponential retry, batas percobaan, dan dead-letter.
|
||||
- Handler tersedia untuk report PDF/Excel/CSV, email/reminder, penyusutan, dan payroll calculation.
|
||||
- Retention worker memindahkan activity log lama ke `activity_logs_archive` dalam batch, lalu membersihkan cache, session, dan completed job lama.
|
||||
- DB monitor menyimpan latency koneksi/query, threads, slow query counter, dan ukuran database.
|
||||
|
||||
## Perintah operasional
|
||||
|
||||
Jalankan dari folder aplikasi melalui Task Scheduler/cron:
|
||||
|
||||
```text
|
||||
php index.php queueworker run reports 20
|
||||
php index.php queueworker run default 20
|
||||
php index.php maintenanceworker retention 365 5000
|
||||
php index.php dbmonitor run
|
||||
php index.php scalabilitycheck index 20
|
||||
php index.php stage16check
|
||||
```
|
||||
|
||||
Saran jadwal: queue setiap menit, DB monitor setiap 5 menit, retention setiap malam, scalability check pada CI/staging.
|
||||
|
||||
## Baseline development 2 September 2026
|
||||
|
||||
- Database: 6.19 MB.
|
||||
- Journal: 123 header / 388 detail.
|
||||
- Activity log: 654.
|
||||
- Latency koneksi: 16.926 ms.
|
||||
- Latency query health check: 10.053 ms.
|
||||
- Dashboard summary p95: 11.046 ms.
|
||||
- Open receivables p95: 22.089 ms.
|
||||
- General ledger berada jauh di bawah target 2 detik.
|
||||
- Queue integration: idempotent dan berhasil menghasilkan file background.
|
||||
|
||||
Volume development masih kecil. Angka ini baseline fungsi, bukan bukti kapasitas production.
|
||||
|
||||
## Audit lanjutan untuk staging
|
||||
|
||||
- 29 view memakai DataTables; 13 sudah `serverSide:true`. Tabel master/transaksi yang tumbuh tanpa batas harus dimigrasikan bertahap ke server-side. Tabel referensi kecil boleh tetap client-side dengan hard limit.
|
||||
- Jalankan load test menggunakan salinan data yang sudah dianonimkan: minimal 100 ribu jurnal, 50 ribu invoice, 25 ribu item/barcode, dan 1 juta stock/activity ledger.
|
||||
- Uji 25, 50, lalu 100 virtual user untuk dashboard, pencarian, daftar transaksi, posting invoice, pembayaran, dan transfer stok.
|
||||
- Gunakan akun serta session khusus staging; jangan melakukan load test transaksi pada production.
|
||||
- Acceptance: daftar p95 <2 detik, dashboard p95 <3 detik, error <1%, tidak ada duplikasi nomor/stok/job.
|
||||
|
||||
## Catatan production
|
||||
|
||||
- Backup dan jalankan migration sampai `20260902000300`.
|
||||
- Perubahan file-session ke database-session akan meminta user login kembali saat deploy.
|
||||
- Jalankan worker hanya satu instance dahulu; tambah worker setelah memastikan locking MariaDB bekerja pada versi production.
|
||||
- Konfigurasikan SMTP sebelum mengaktifkan job email/reminder.
|
||||
- Pantau pertumbuhan `app_dead_letters`; setiap dead-letter harus mempunyai tindak lanjut dan mekanisme replay terkontrol.
|
||||
- Aktifkan slow query log pada database production dan review query di atas ambang 500 ms.
|
||||
Reference in New Issue
Block a user