Kujenga Maswali ya Uhusiano wa Video Yanayotegemea Grafu kwa Kutumia Apache AGE

Swali letu lililotumia rasilimali nyingi zaidi lilikuwa jopo rahisi la "onyesha video zinazohusiana".

Katika ViralVidVault, tunafuatilia mienendo ya video. Tuligundua kuwa kutafuta video zinazohusiana kupitia chaneli zinazoshirikiwa au vikao vilivyoangaliwa pamoja kuliharibu utendaji wa hifadhidata yetu. Tulijaribu kutumia SQLite kwa kutumia recursive joins. Ilifanya kazi kwa hatua moja (one hop). Katika hatua mbili, data ililipuka. Swali moja lilitengeneza mamia ya maelfu ya mistari. Wafanyakazi wetu (workers) walianza kukatika kwa muda (timing out).

Data hiyo ni grafu. Tulikuwa tukijaribu kuilazimisha kwenye majedwali na kulipia gharama hiyo.

Tulihamishia tabaka la uhusiano (relationship layer) kwenye Apache AGE. Hii ni kiongezeko (extension) cha openCypher kwa ajili ya PostgreSQL. Tulibakiza programu yetu ya PHP 8.4 na hifadhi yetu ya SQLite.

Matokeo: • Latensi ya jopo la video zinazohusiana ilishuka kutoka 900ms hadi chini ya 40ms. • Upitaji (traversals) tata wa hatua mbili sasa unachukua milisekunde za tarakimu moja. • Kazi yetu ya kiutendaji ilibaki vilevile kwa sababu AGE inafanya kazi ndani ya Postgres.

Kwa nini utumie Apache AGE badala ya hifadhasi ya grafu inayojitegemea?

  1. Urahisi wa Kiutendaji Huhitaji hifadhidata mpya ya kuhifadhi nakala (back up) au kulinda. AGE inatumia mipangilio yako iliyopo ya Postgres, mifumo ya muunganisho (connection pools), na sheria za usalama.

  2. Maswali ya Asili ya Grafu Katika SQL, njia zenye urefu unaobadilika zinahitaji recursion tata. Katika Cypher, unaziandika kama mifumo rahisi. Kifungu cha SQL cha mistari 40 cha recursive kiligeuka kuwa swali la Cypher la mistari 6.

  3. Utendaji Bora Injini ya grafu huweka kielelezo (index) cha ukaribu (adjacency). Inazuia upanuzi wa njia ambazo hazilingani. Hii inazuia upanuzi wa data (data fan-out) uliouangusha mfumo wetu wa awali.

Somo muhimu kutoka kwa uhamishaji wetu: Kila wakati weka kielelezo (index) kwenye sifa zako za kuanzia (entrypoint properties). Ikiwa hutaiweka kielelezo ID unayotumia kuanza upitaji (traversal), AGE itafanya ukaguzi kamili (full scan). Hii inafanya hata swali bora la grafu kuwa la polepole.

Tunatumia grafu kama modeli ya kusoma (read model). Data yetu ghafi inabaki kwenye SQLite. Tunatumia skripti ya Python kusawazisha (sync) hizi mbili. Hii inafanya grafu yetu kuwa ya haraka, nyepesi, na rahisi kujenga upya.

Ikiwa maswali yako ya SQL ya recursive yanazidi kuwa tata, usipambane na modeli ya uhusiano (relational model). Jenga mchoro mdogo wa grafu (graph projection) kando ya hifadhi yako ya sasa.

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