בניית שאילתות קשרי וידאו מבוססות גרף באמצעות Apache AGE

השאילתה היקרה ביותר שלנו הייתה פאנל פשוט של "הצג סרטונים קשורים".

ב-ViralVidVault, אנחנו עוקבים אחר טרנדים של וידאו. גילינו שחיפוש סרטונים קשורים דרך ערוצים משותפים או סשנים של צפייה משותפת הרס לנו את ביצועי מסד הנתונים. ניסינו להשתמש ב-SQLite עם recursive joins. זה עבד עבור hop אחד. בשני hops, הנתונים התפוצצו. שאילתה אחת יצרה מאות אלפי שורות. ה-workers שלנו התחילו לקבל timeout.

הנתונים הם גרף. ניסינו לכפות אותם לתוך טבלאות ושילמנו את המחיר.

העברנו את שכבת הקשרים ל-Apache AGE. זהו extension של openCypher עבור PostgreSQL. שמרנו על אפליקציית ה-PHP 8.4 שלנו ועל מאגר ה-SQLite שלנו.

התוצאות: • השהיית (latency) הפאנל הקשור ירדה מ-900ms לפחות מ-40ms. • מעברים (traversals) מורכבים של שני hops לוקחים כעת מילישניות בודדות. • עומס העבודה התפעולי שלנו נשאר זהה מכיוון ש-AGE רץ בתוך Postgres.

למה להשתמש ב-Apache AGE במקום במסד נתונים גרפי עצמאי?

  1. פשטות תפעולית אין צורך במסד נתונים חדש לגיבוי או לאבטחה. AGE משתמש בהגדרות ה-Postgres הקיימות שלך, ב-connection pools ובכללי האבטחה שלך.

  2. שאילתות גרף טבעיות (Native) ב-SQL, נתיבים באורך משתנה דורשים recursion מורכב. ב-Cypher, כותבים אותם כדפוסים (patterns) פשוטים. בלוק SQL רקורסיבי של 40 שורות הפך לשאילתת Cypher של 6 שורות.

  3. ביצועים טובים יותר מנוע גרף מאנדקס סמיכות (adjacency). הוא מפסיק להרחיב נתיבים שאינם תואמים. זה מונע את ה-data fan-out שגרם לקריסה של המערכת הקודמת שלנו.

לקח מרכזי מההגירה שלנו: תמיד תאנדקסו את מאפייני נקודת הכניסה (entrypoint properties) שלכם. אם לא תאנדקסו את ה-ID שבו אתם משתמשים כדי להתחיל traversal, AGE יבצע full scan. זה הופך אפילו את שאילתת הגרף הטובה ביותר לאיטית.

אנחנו משתמשים בגרף כמודל קריאה (read model). הנתונים הגולמיים שלנו נשארים ב-SQLite. אנחנו משתמשים בסקריפט Python כדי לסנכרן בין השניים. זה שומר על הגרף שלנו מהיר, קל וקל לשחזור.

אם שאילתות ה-SQL הרקורסיביות שלכם הופכות למורכבות מדי, אל תילחמו במודל היחסים (relational model). בנו graph projection קטן לצד המאגר הנוכחי שלכם.

מקור: https://dev.to/ahmet_gedik778845/building-graph-based-video-relationship-queries-with-apache-age-2p12