Membangun Query Relasi Video Berbasis Graf dengan Apache AGE

Query kami yang paling berat adalah panel sederhana "tampilkan video terkait".

Di ViralVidVault, kami melacak tren video. Kami menemukan bahwa mencari video terkait melalui saluran yang sama atau sesi tontonan bersama (co-viewed sessions) merusak performa database kami. Kami mencoba menggunakan SQLite dengan recursive joins. Itu berhasil untuk satu hop. Pada dua hop, datanya meledak. Satu query menghasilkan ratusan ribu baris. Worker kami mulai mengalami timeout.

Datanya adalah sebuah graf. Kami mencoba memaksanya masuk ke dalam tabel dan harus menanggung akibatnya.

Kami memindahkan lapisan relasi ke Apache AGE. Ini adalah ekstensi openCypher untuk PostgreSQL. Kami tetap menggunakan aplikasi PHP 8.4 dan penyimpanan SQLite kami.

Hasilnya: • Latensi panel terkait turun dari 900ms menjadi di bawah 40ms. • Traversal dua-hop yang kompleks kini hanya membutuhkan waktu satu digit milidetik. • Beban kerja operasional kami tetap sama karena AGE berjalan di dalam Postgres.

Mengapa menggunakan Apache AGE alih-alih database graf mandiri?

  1. Kesederhanaan Operasional Anda tidak memerlukan database baru untuk dicadangkan atau diamankan. AGE menggunakan pengaturan Postgres, connection pool, dan aturan keamanan Anda yang sudah ada.

  2. Query Graf Native Dalam SQL, jalur dengan panjang variabel memerlukan rekursi yang kompleks. Dalam Cypher, Anda menulisnya sebagai pola sederhana. Blok SQL rekursif sebanyak 40 baris berubah menjadi query Cypher sebanyak 6 baris.

  3. Performa Lebih Baik Mesin graf mengindeks adjacency. Ia menghentikan ekspansi jalur yang tidak cocok. Hal ini mencegah data fan-out yang merusak sistem kami sebelumnya.

Pelajaran utama dari migrasi kami: Selalu indeks properti entrypoint Anda. Jika Anda tidak mengindeks ID yang digunakan untuk memulai traversal, AGE akan melakukan full scan. Ini membuat query graf terbaik sekalipun menjadi lambat.

Kami menggunakan graf sebagai read model. Data mentah kami tetap di SQLite. Kami menggunakan skrip Python untuk menyinkronkan keduanya. Ini menjaga graf kami tetap cepat, ringan, dan mudah dibangun kembali.

Jika query SQL rekursif Anda menjadi terlalu kompleks, jangan melawan model relasional. Bangun proyeksi graf kecil di samping penyimpanan Anda saat ini.

Sumber: https://dev.to/ahmet_gedik778845/building-graph-based-video-relationship-queries-with-apache-age-2p12