DailyWatch ನಲ್ಲಿ, ನಮ್ಮ "related videos" ಪ್ಯಾನಲ್ ಒಂದು ಸರಳ SQLite ಕ್ವೆರಿಯೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಯಿತು. ಇದು ಮೂರು ಟೇಬಲ್‌ಗಳನ್ನು ಜೋಡಿಸಿ (join), ಅತಿವ್ಯಾಪಕವಾದ ಟ್ಯಾಗ್‌ಗಳನ್ನು (overlapping tags) ಎಣಿಸಿ, ಒಂದು ರ‍್ಯಾಂಕ್ ಮಾಡಿದ ಪಟ್ಟಿಯನ್ನು ನೀಡುತ್ತಿತ್ತು. ಸಣ್ಣ ಕ್ಯಾಟಲಾಗ್‌ಗೆ ಅದು ಸಾಕಾಗಿತ್ತು. "italian" ಮತ್ತು "pasta" ಟ್ಯಾಗ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಅಡುಗೆ ವೀಡಿಯೊವು ಅದೇ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಇತರ ವೀಡಿಯೊಗಳನ್ನು ತೋರಿಸುತ್ತಿತ್ತು ಮತ್ತು ಬಳಕೆದಾರರು ಅವುಗಳನ್ನು ಕ್ಲಿಕ್ ಮಾಡುತ್ತಿದ್ದರು. ಮೆಟಾಡೇಟಾ (metadata) ಸ್ವಚ್ಛವಾಗಿದ್ದರಿಂದ ಮತ್ತು ಲೈಬ್ರರಿ ಚಿಕ್ಕದಾಗಿದ್ದರಿಂದ ಔಟ್‌ಪುಟ್ ಸೂಕ್ತವಾಗಿ ಕಾಣುತ್ತಿತ್ತು.

ನಂತರ ಕ್ಯಾಟಲಾಗ್ ಬೆಳೆಯಿತು ಮತ್ತು ಪ್ರೇಕ್ಷಕರ ನಿರೀಕ್ಷೆಗಳು ಬದಲಾದವು. ಜನರು ಕೇವಲ ಒಂದೇ ರೀತಿಯ ಟ್ಯಾಗ್‌ಗಳನ್ನು ಹೊಂದಿರುವ ಹೆಚ್ಚಿನ ವೀಡಿಯೊಗಳನ್ನು ಬಯಸುತ್ತಿರಲಿಲ್ಲ. ಪ್ರಸ್ತುತ ವೀಡಿಯೊ ನೋಡಿದ ತಕ್ಷಣ ಶೇಕಡಾ ನಲವತ್ತು ರಷ್ಟು ವೀಕ್ಷಕರು ನೋಡುವ ಕ್ಲಿಪ್ ಅನ್ನು ಅವರು ಬಯಸುತ್ತಿದ್ದರು. ತಡರಾತ್ರಿಯ ವೀಕ್ಷಣಾ ಅವಧಿಯಲ್ಲಿ ಪದೇ ಪದೇ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಆ ನಿಶ್ಚಿತ ಚಾನಲ್ ಅನ್ನು ಅವರು ಬಯಸುತ್ತಿದ್ದರು, ಅದರ ವಿವರಣೆಯಲ್ಲಿ ಪ್ರಾರಂಭದ ವೀಡಿಯೊದ ಬಗ್ಗೆ ಏನೂ ಉಲ್ಲೇಖವಿಲ್ಲದಿದ್ದರೂ ಮತ್ತು ಅದರ ಟ್ಯಾಗ್‌ಗಳು ಅಲ್ಪವಾಗಿದ್ದರೂ ಸಹ. ಇವು ವರ್ತನೆಯ ಮಾದರಿಗಳಾಗಿವೆ (behavioral patterns), ಮೆಟಾಡೇಟಾ ಹೊಂದಾಣಿಕೆಗಳಲ್ಲ. SQLite ಇದನ್ನು ನಿರ್ವಹಿಸಲು ಅಸಾಧ್ಯವಾದ self-joins ಮತ್ತು recursive common table expressions ಗಳ ಜಾಲವಾಗಿ ಪರಿವರ್ತಿಸದೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ನಾವು ಮಾಡೆಲ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿದ ಪ್ರತಿಯೊಂದು ಹೊಸ ಸಿಗ್ನಲ್ (signal), ಅದು co-viewership ಆಗಿರಲಿ ಅಥವಾ session adjacency ಆಗಿರಲಿ, ಅದು લેಟೆನ್ಸಿ (latency) ಮತ್ತು ಮಾನಸಿಕ ಹೊರೆಯನ್ನು ಹೆಚ್ಚಿಸುತ್ತಿತ್ತು. ನಾವು ರಿಲೇಶನಲ್ ಮಾದರಿಯಲ್ಲಿ ಅಡಕವಾಗಿದ್ದ ಗ್ರಾಫ್ ಸಮಸ್ಯೆಯನ್ನು ಎದುರಿಸುತ್ತಿದ್ದೆವು.

ನಾನು ರೆಕಮೆಂಡೇಶನ್ ಲೇಯರ್ ಅನ್ನು Apache AGE ಗೆ ವರ್ಗಾಯಿಸಿದೆ.

Apache AGE ಎಂಬುದು PostgreSQL ಎಕ್ಸ್‌ಟೆನ್ಶನ್ ಆಗಿದ್ದು, ನೀವು ಈಗಾಗಲೇ ಬಳಸುತ್ತಿರುವ ಡೇಟಾಬೇಸ್‌ಗೆ openCypher ಗ್ರಾಫ್ ಕ್ವೆರಿಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ. ಇದು ಪ್ರತ್ಯೇಕ ಸರ್ವರ್ ಅಲ್ಲ. ಇದು sidecar ಅಲ್ಲ. ಇದು Postgres ಒಳಗಡೆಯೇ ಚಲಿಸುತ್ತದೆ, ಇದರರ್ಥ ನಾವು ಪ್ರತ್ಯೇಕ Neo4j ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಸ್ಥಾಪಿಸದೆ ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿ ಹೊಸ ಆಪರೇಷನಲ್ ಪ್ಲೇಬುಕ್ ಅನ್ನು ಕಲಿಯದೆ ಒಂದು co-view ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ನಿರ್ಮಿಸಬಹುದು ಎಂದರ್ಥ. ಡೇಟಾಬೇಸ್ ರಿಲೈಬಿಲಿಟಿ ಇಂಜಿನಿಯರ್ ಇಲ್ಲದ ಸಣ್ಣ ತಂಡಕ್ಕೆ, ಈ ವ್ಯತ್ಯಾಸವು ಬಹಳ ಮುಖ್ಯವಾಗಿತ್ತು.

ಹೊಸ ಡೇಟಾಬೇಸ್‌ಗಿಂತ ಎಕ್ಸ್‌ಟೆನ್ಶನ್ ಏಕೆ ಉತ್ತಮ

ನಿಮ್ಮ ಸ್ಟ್ಯಾಕ್‌ಗೆ ಗ್ರಾಫ್ ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸೇರಿಸುವುದು ವೈಟ್‌ಬೋರ್ಡ್ ಮೇಲೆ ಸುಲಭ ಮತ್ತು ಪ್ರೊಡಕ್ಷನ್‌ನಲ್ಲಿ ದುಬಾರಿ. ನಿಮಗೆ ಹೊಸ ಮಾನಿಟರಿಂಗ್ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳು, ಹೊಸ ಬ್ಯಾಕಪ್ ಪ್ರಕ್ರಿಯೆಗಳು, ಹೊಸ ಕನೆಕ್ಷನ್ ಪೂಲ್‌ಗಳು ಮತ್ತು ಹೊಸ ಫೇಲ್‌ಓವರ್ ಲಾಜಿಕ್ ಅಗತ್ಯವಿರುತ್ತದೆ. AGE ಇವೆಲ್ಲವನ್ನೂ ತಪ್ಪಿಸುತ್ತದೆ ಏಕೆಂದರೆ ಅದು ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ Postgres ಇನ್‌ಸ್ಟೆನ್ಸ್‌ನ ಒಳಗೇ ಇರುತ್ತದೆ.

ಇದು ನಮಗೆ ಕೆಲಸ ಮಾಡಲು ಸಹಾಯ ಮಾಡಿದ ನಾಲ್ಕು ಪ್ರಾಯೋಗಿಕ ಕಾರಣಗಳಿವೆ.

  • ಹೊಸ ಮೂಲಸೌಕರ್ಯ ಬೇಕಿಲ್ಲ. AGE ಒಂದು ಎಕ್ಸ್‌ಟೆನ್ಶನ್ ಆಗಿರುವುದರಿಂದ, ನಿಮ್ಮ ಪ್ರಸ್ತುತ pg_dump ವೇಳಾಪಟ್ಟಿ, ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ರೆಪ್ಲಿಕಾಗಳು ಮತ್ತು ನಿಮ್ಮ ಸ್ಟ್ಯಾಂಡರ್ಡ್ Postgres ಹೆಲ್ತ್ ಚೆಕ್‌ಗಳು ಎಲ್ಲವೂ ಕೆಲಸ ಮಾಡುತ್ತಲೇ ಇರುತ್ತವೆ. ಮತ್ತೊಂದು ಡೇಟಾ ಸ್ಟೋರ್ ಅನ್ನು ನೋಡಿಕೊಳ್ಳಲು ನೀವು ಆಪರೇಷನ್ಸ್ ತಂಡವನ್ನು ಒಪ್ಪಿಸುವ ಅಗತ್ಯವಿಲ್ಲ.
  • ಒಂದೇ ಕ್ವೆರಿಯಲ್ಲಿ ಮಿಶ್ರಿತ ವರ್ಕ್‌ಲೋಡ್‌ಗಳು. AGE ನಿಮಗೆ SQL ಒಳಗಡೆ Cypher ಬರೆಯಲು ಅನುಮತಿಸುತ್ತದೆ. ನೀವು ಅಭ್ಯರ್ಥಿ ವೀಡಿಯೊಗಳನ್ನು ಕಂಡುಹಿಡಿಯಲು ಗ್ರಾಫ್ ಟ್ರಾವರ್ಸಲ್ (graph traversal) ನಡೆಸಬಹುದು, ನಂತರ ಪ್ರಾದೇಶಿಕ ಕಂಟೆಂಟ್ ನಿರ್ಬಂಧಗಳನ್ನು ಜಾರಿಗೆ ತರಲು ಅದನ್ನು ನಿಮ್ಮ ರಿಲೇಶನಲ್ users ಟೇಬಲ್ ಜೊತೆಗೆ ಅಥವಾ ಕೆಲವು ಚಾನಲ್‌ಗಳಿಗೆ ಆದ್ಯತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ರಿಲೇಶನಲ್ sponsorships ಟೇಬಲ್ ಜೊತೆಗೆ ಜೋಡಿಸಬಹುದು (join). ಒಂದೇ ರೌಂಡ್-ಟ್ರಿಪ್. ಎರಡು ಕ್ವೆರಿ ಭಾಷೆಗಳು ಸಹಕರಿಸುತ್ತವೆ.
  • ಪೋರ್ಟಬಿಲಿಟಿ (Portability). Cypher ಎಂಬುದು ಮುಕ್ತವಾದ ಮತ್ತು ಉತ್ತಮವಾಗಿ ದಾಖಲಾದ ಗ್ರಾಫ್ ಕ್ವೆರಿ ಭಾಷೆಯಾಗಿದೆ. ಒಂದು ವೇಳೆ DailyWatch ಬೆಳೆದ ನಂತರ AGE ಯಿಂದ ಹೊರಬಂದು Neo4j ಅಥವಾ Memgraph ಗೆ ಮMigrate ಆಗಬೇಕಾದಲ್ಲಿ, ಕನಿಷ್ಠ ಮರು-ಬರವಣಿಗೆಯೊಂದಿಗೆ ಕ್ವೆರಿ ಲಾಜಿಕ್ ವರ್ಗಾವಣೆಯಾಗುತ್ತದೆ. ನೀವು ಯಾವುದೇ ಪ್ರೊಪ್ರೈಟರಿ ಡೈಲೆಕ್ಟ್‌ಗೆ ಕಟ್ಟುಬಿದ್ದಿರುವುದಿಲ್ಲ.
  • ಕಾಂಪ್ಯಾಟಿಬಿಲಿಟಿ (Compatibility). ಡೇಟಾ ಅಂತಿಮವಾಗಿ PostgreSQL ನಲ್ಲಿ ಇರುವುದರಿಂದ, ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ PHP ಅಥವಾ Python ಟೂಲಿಂಗ್ ಬದಲಾಗುವುದಿಲ್ಲ. ನೀವು ಅದೇ ಡ್ರೈವರ್‌ನೊಂದಿಗೆ ಕನೆಕ್ಟ್ ಆಗುತ್ತೀರಿ, ಅದೇ ಕನೆಕ್ಷನ್ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತೀರಿ ಮತ್ತು ಅದೇ ರೀತಿಯಲ್ಲಿ ರೋಗಳನ್ನು ಪಡೆಯುತ್ತೀರಿ. ಗ್ರಾಫ್ ಲಾಜಿಕ್ ಅಪ್ಲಿಕೇಶನ್ ಲೇಯರ್‌ನಲ್ಲಿಲ್ಲ, ಕ್ವೆರಿ ಲೇಯರ್‌ನಲ್ಲಿ ಇರುತ್ತದೆ.

Co-Viewership ಮಾಡೆಲಿಂಗ್

ಇದರ ಅನುಷ್ಠಾನವು ಸರಳವಾಗಿದೆ. ನಾವು ಕಾಳಜಿ ವಹಿಸುವ ಎಂಟಿಟಿಗಳಿಗಾಗಿ (entities) Video ಮತ್ತು Channel ಎಂಬ ನೋಡ್‌ಗಳನ್ನು (nodes) ವ್ಯಾಖ್ಯಾನಿಸಿದೆವು. ನಂತರ ಅವುಗಳ ನಡುವಿನ ಸಂಬಂಧಗಳಿಗಾಗಿ ಎಡ್ಜ್‌ಗಳನ್ನು (edges) ವ್ಯಾಖ್ಯಾನಿಸಿದೆವು. ಒಂದು PUBLISHED ಎಡ್ಜ್ ಒಂದು Channel ಅನ್ನು Video ಗೆ ಜೋಡಿಸುತ್ತದೆ. ಒಂದು CO_VIEWED ಎಡ್ಜ್ ಒಂದು Video ಅನ್ನು ಇನ್ನೊಂದಕ್ಕೆ ಜೋಡಿಸುತ್ತದೆ, ಇದು ಆ ಎರಡು ವೀಡಿಯೊಗಳು ಒಂದೇ ವೀಕ್ಷಣಾ ಅವಧಿಯಲ್ಲಿ ಎಷ್ಟು ಬಾರಿ ಕಾಣಿಸಿಕೊಂಡವು ಎಂಬುದನ್ನು ಪ್ರತಿನಿಧಿಸುವ weight ಪ್ರಾಪರ್ಟಿಯನ್ನು ಹೊಂದಿರುತ್ತದೆ.

ಈ ಮಾಡೆಲ್ ಟ್ಯಾಗ್-ಆಧಾರಿತ SQL ಗೆ ಸಾಧ್ಯವಾಗದ ಒಂದು ವಿಷಯವನ್ನು ಸೆರೆಹಿಡಿಯುತ್ತದೆ: ಅಂದರೆ ಅಸ್ಪಷ್ಟವಾದ ರಚನೆ (implicit structure)