వీడియో URL కానానికలైజేషన్ పైప్‌లైన్‌ను నిర్మించడం

నేను నా ప్రొడక్షన్ SQLite డేటాబేస్‌పై ఒక క్వెరీని రన్ చేసినప్పుడు ఒక పెద్ద సమస్యను గుర్తించాను.

వీడియోల టేబుల్‌లో 41,283 రోస్ (rows) ఉన్నాయి, కానీ కేవలం 29,000 ప్రత్యేకమైన (unique) టైటిల్స్ మాత్రమే ఉన్నాయి. మేము ఒకే వీడియోలను పదేపదే స్టోర్ చేస్తున్నాము.

ఇది ఎందుకు జరిగింది? ఒకే YouTube వీడియో వివిధ URL ఫార్మాట్‌లలో వస్తోంది:

• షార్ట్ లింక్‌లు: youtu.be/ID • డెస్క్‌టాప్ లింక్‌లు: youtube.com/watch?v=ID • మొబైల్ లింక్‌లు: m.youtube.com/watch?v=ID • షార్ట్స్: youtube.com/shorts/ID

ఒక వీడియో అంటే నాలుగు డేటాబేస్ రోస్ మరియు నాలుగు దాదాపు ఒకేలా ఉండే వెబ్ పేజీలు అని అర్థం. దీనివల్ల నా క్రాల్ బడ్జెట్ వృథా అయ్యింది మరియు Google Search Consoleలో ఎర్రర్స్ (errors) కనిపించాయి.

నేను TrendVidStream నడుపుతున్నాను. మేము ఎనిమిది వేర్వేరు ప్రాంతాల నుండి ట్రెండింగ్ డేటాను సేకరిస్తాము. ప్రతి ప్రాంతం ఒకే వైరల్ వీడియోను వేర్వేరు URL రూపాల్లో చూపించవచ్చు.

దీనిని పరిష్కరించడానికి నేను PHP 8.4 మరియు SQLite ఉపయోగించి ఒక పైప్‌లైన్‌ను రూపొందించాను.

పైప్‌లైన్ ఎలా పనిచేస్తుందంటే:

  1. ఎక్స్‌ట్రాక్ట్ (Extract): ఏదైనా URL వేరియంట్‌ను స్థిరమైన 11-అక్షరాల వీడియో IDగా మార్చండి.
  2. నార్మలైజ్ (Normalize): ఆ ID నుండి ఒకే ఒక కానానికల్ (canonical) URLను సృష్టించండి.
  3. వాలిడేట్ (Validate): డేటాబేస్‌ను తాకకముందే త్వరిత తనిఖీలు చేయండి.
  4. అప్‌సర్ట్ (Upsert): కొత్త రోస్‌ను జోడించడానికి బదులుగా డేటాను విలీనం చేయడానికి SQLite UPSERTని ఉపయోగించండి.
  5. ఎమిట్ (Emit): సెర్చ్ ఇంజన్‌లు ఒకే URLను కనుగొనేలా కానానికల్ ట్యాగ్‌లు మరియు 301 రీడైరెక్ట్‌లను జోడించండి.

ముఖ్యమైన సాంకేతిక నిర్ణయాలు:

• ఖచ్చితమైన హోస్ట్ అలోలిస్ట్ (allowlist) ఉపయోగించండి. సఫిక్స్ మ్యాచింగ్ (suffix matching) ఉపయోగించవద్దు. ఇది భద్రతా ప్రమాదాలను నివారిస్తుంది. • IDలను ఎప్పుడూ లోయర్ కేస్ (lowercase) చేయవద్దు. YouTube IDలు కేస్-సెన్సిటివ్ (case-sensitive). వాటిని లోయర్ కేస్ చేయడం వల్ల వేర్వేరు వీడియోలు కలిసిపోతాయి. • video_id పై UNIQUE కన్‌స్ట్రైంట్ (constraint) ఉపయోగించండి. డూప్లికేట్‌లకు వ్యతిరేకంగా ఇది మీ అత్యంత బలమైన రక్షణ. • SQLite WAL మోడ్‌ని ఉపయోగించండి. ఇది రైట్‌లను (writes) వేగంగా మరియు నమ్మదగినవిగా చేస్తుంది.

ఫలితం:

మా వీడియో టేబుల్ 41,283 రోల నుండి 28,094 రోలకు తగ్గింది. మేము ఒక్క వీడియోను కూడా కోల్పోలేదు. Google Search Console ఎర్రర్స్ 412 నుండి 9కి తగ్గాయి. ఒకే వీడియోను నాలుగుసార్లు చూపించడం ఆపివేయడం వల్ల సెర్చ్ రిజల్ట్స్ మరింత స్పష్టంగా మారాయి.

పాఠం సరళమైనది: మీరు అనేక వనరుల నుండి డేటాను సేకరించినప్పుడు, మొదట మీ సిస్టమ్‌లో ఐడెంటిటీని (identity) నిర్మించండి. ఒక స్థిరమైన IDని ఎక్స్‌ట్రాక్ట్ చేయండి, దానిని డేటాబేస్ కన్‌స్ట్రైంట్‌లతో అమలు చేయండి మరియు ప్రతి రైట్‌ను ఐడెంపోటెంట్ (idempotent) గా చేయండి.

మీకు సంక్లిష్టమైన సాధనాలు అవసరం లేదు. PHP మరియు SQLite సరిపోతాయి.

మూలం: https://dev.to/ahmet_gedik778845/building-a-video-url-canonicalization-pipeline-in-php-84-with-sqlite-32ne