# Log Eksekusi Optimasi Performa - Fase 3 (Concurrency & Neo4j Batching)

## Tanggal Eksekusi
4 Mei 2026

## Deskripsi Eksekusi
Telah dilakukan eksekusi Fase 3 berdasarkan dokumen rencana `ingestion_performance_plan.md`. Fase ini memfokuskan pada pemrosesan antrean *edge reasoning* secara paralel dan pengiriman data relasi ke *database* Neo4j secara rombongan (*batching*) untuk memaksimalkan efisiensi waktu komputasi.

## Langkah yang Dilakukan
1. **Penerapan Concurrency dengan ThreadPoolExecutor**:
   - Menghapus implementasi *single worker thread* manual dan `task_queue` di dalam `app/services/ingestion.py`.
   - Mengubah fungsi `worker_edge_generator` yang tadinya berupa *infinite loop* `while True` (yang terus memantau *queue*) menjadi sebuah *fungsi task tunggal* yang menerima satu parameter spesifik: `node_id`.
   - Di dalam blok eksekusi utama (`if __name__ == "__main__":`), *worker* kini dipanggil menggunakan `concurrent.futures.ThreadPoolExecutor` dengan kapasitas maksimal (3-5 pekerja / *workers*).
   - Setiap kali *Node* berhasil dibuat, sebuah *task future* di-_submit_ ke dalam *executor* untuk segera mengolah *edge reasoning*-nya. 

2. **Neo4j Edge Batching Transaction (UNWIND)**:
   - Membuat fungsi baru `create_lexicographical_edges_batch` untuk menggantikan fungsi lawas `create_lexicographical_edge`.
   - Fungsi baru ini mengumpulkan semua relasi valid (yang telah lolos *Quality Gate* dari pemanggilan LLM) ke dalam bentuk kumpulan memori lokal (`list` dari `dict`).
   - Kumpulan memori tersebut di kelompokkan berdasarkan tipe *Edge* (misalnya: `SIMILAR_GAP`, `SIMILAR_BACKGROUND`).
   - Setiap kelompok dieksekusi secara masal menggunakan *Cypher query* tunggal dengan klausul `UNWIND`. Pola ini mencegah pembuatan ratusan sesi *database round-trips* terpisah yang memakan waktu lama.

## Acceptance Criteria yang Terpenuhi
- Jurnal diproses untuk dicari kemiripannya secara paralel.
- Pembuatan garis relasi antar 1 Node baru ke beberapa kandidat dieksekusi dalam 1 kali kueri ke Neo4j menggunakan perintah *UNWIND*, menghemat koneksi I/O yang substansial.

## Status
Fase 3 dieksekusi dengan sukses.
