Побудова запитів зв'язків між відео на основі графів за допомогою Apache AGE

Нашим найдорожчим запитом була проста панель «показати схожі відео».

У ViralVidVault ми відстежуємо відеотренди. Ми виявили, що пошук пов'язаних відео через спільні канали або спільні сесії перегляду критично знижував продуктивність нашої бази даних. Ми пробували використовувати SQLite з рекурсивними об'єднаннями (joins). Це працювало для одного кроку (hop). На двох кроках обсяг даних вибухнув. Один запит створював сотні тисяч рядків. Наші воркери почали завершуватися за тайм-аутом.

Дані — це граф. Ми намагалися втиснути їх у таблиці й розплачувалися за це.

Ми перенесли рівень зв'язків в Apache AGE. Це розширення openCypher для PostgreSQL. Ми зберегли наш додаток на PHP 8.4 та сховище SQLite.

Результати: • Затримка панелі схожих відео впала з 900 мс до менш ніж 40 мс. • Складні двокрокові обходи (traversals) тепер займають лічені мілісекунди. • Наше операційне навантаження залишилося незмінним, оскільки AGE працює всередині Postgres.

Чому варто використовувати Apache AGE замість окремої графової бази даних?

  1. Операційна простота Вам не потрібна нова база даних для резервного копіювання чи забезпечення безпеки. AGE використовує вашу існуючу конфігурацію Postgres, пули з'єднань та правила безпеки.

  2. Нативні графові запити У SQL шляхи змінної довжини потребують складної рекурсії. У Cypher ви описуєте їх як прості шаблони. 40-рядковий рекурсивний блок SQL перетворився на 6-рядковий запит Cypher.

  3. Краща продуктивність Графовий рушій індексує суміжність. Він припиняє розширення шляхів, які не відповідають умові. Це запобігає розростанню даних (fan-out), яке призводило до збоїв у нашій попередній системі.

Ключовий урок нашої міграції: Завжди індексуйте властивості точок входу. Якщо ви не проіндексуєте ID, який використовуєте для початку обходу, AGE виконає повне сканування. Це сповільнює навіть найкращий графовий запит.

Ми використовуємо граф як модель читання. Наші сирі дані залишаються в SQLite. Ми використовуємо Python-скрипт для синхронізації обох систем. Це дозволяє нашому графу залишатися швидким, легким і простим у відновленні.

Якщо ваші рекурсивні SQL-запити стають занадто складними, не намагайтеся боротися з реляційною моделлю. Побудуйте невелику графову проекцію поруч із вашим поточним сховищем.

Джерело: https://dev.to/ahmet_gedik778845/building-graph-based-video-relationship-queries-with-apache-age-2p12