ویڈیو یو آر ایل کینونیکلائزیشن پائپ لائن بنانا

میں نے اپنے پروڈکشن SQLite ڈیٹا بیس پر ایک کوئری چلائی اور ایک بہت بڑا مسئلہ دریافت کیا۔

ویڈیوز ٹیبل میں 41,283 روز (rows) تھیں، لیکن صرف 29,000 منفرد عنوانات تھے۔ ہم ایک ہی ویڈیوز کو کئی بار اسٹور کر رہے تھے۔

یہ کیوں ہوا؟ ایک ہی یوٹیوب ویڈیو مختلف یو آر ایل فارمیٹس میں آ رہی تھی:

• شارٹ لنکس: youtu.be/ID • ڈیسک ٹاپ لنکس: youtube.com/watch?v=ID • موبائل لنکس: m.youtube.com/watch?v=ID • شارٹس: youtube.com/shorts/ID

ایک ویڈیو کا مطلب ڈیٹا بیس میں چار روز اور چار تقریباً ایک جیسی ویب پیجز تھے۔ اس سے میرا کرال بجٹ (crawl budget) ضائع ہوا اور گوگل سرچ کنسول میں غلطیاں (errors) ظاہر ہونے لگیں۔

میں TrendVidStream چلاتا ہوں۔ ہم آٹھ مختلف علاقوں سے ٹرینڈنگ ڈیٹا حاصل کرتے ہیں۔ ہر علاقہ مختلف یو آر ایل شکلوں کا استعمال کرتے ہوئے ایک ہی وائرل ویڈیو سامنے لا سکتا ہے۔

میں نے PHP 8.4 اور SQLite کا استعمال کرتے ہوئے اسے ٹھیک کرنے کے لیے ایک پائپ لائن بنائی۔

پائپ لائن اس طرح کام کرتی ہے:

  1. Extract: کسی بھی یو آر ایل کی قسم کو ایک مستحکم 11 حروف کے ویڈیو آئی ڈی میں تبدیل کریں۔
  2. Normalize: اس آئی ڈی سے ایک واحد کینونیکل یو آر ایل بنائیں۔
  3. Validate: ڈیٹا بیس کو چھونے سے پہلے فوری چیک چلائیں۔
  4. Upsert: نئی روز شامل کرنے کے بجائے ڈیٹا کو ضم کرنے کے لیے SQLite UPSERT کا استعمال کریں۔
  5. Emit: کینونیکل ٹیگز اور 301 ری ڈائریکٹس شامل کریں تاکہ سرچ انجن کو ایک ہی یو آر ایل ملے۔

اہم تکنیکی فیصلے:

• ایک درست ہوسٹ allowlist استعمال کریں۔ سرفکس میچنگ (suffix matching) کا استعمال نہ کریں۔ یہ سیکیورٹی خطرات سے بچاتا ہے۔ • آئی ڈیز کو کبھی بھی lowercase نہ کریں۔ یوٹیوب آئی ڈیز case-sensitive ہوتی ہیں۔ انہیں lowercase کرنے سے مختلف ویڈیوز آپس میں ضم ہو جاتی ہیں۔ • video_id پر UNIQUE constraint استعمال کریں۔ یہ ڈپلیکیٹس کے خلاف آپ کا مضبوط ترین دفاع ہے۔ • SQLite WAL mode استعمال کریں۔ یہ رائٹس (writes) کو تیز اور قابل اعتماد بناتا ہے۔

نتیجہ:

ہمارا ویڈیو ٹیبل 41,283 روز سے کم ہو کر 28,094 روز رہ گیا۔ ہم نے ایک بھی ویڈیو نہیں کھوئی۔ گوگل سرچ کنسول کی غلطیاں 412 سے کم ہو کر 9 رہ گئیں۔ سرچ کے نتائج زیادہ صاف ستھرے ہو گئے کیونکہ ہم نے ایک ہی ویڈیو کو چار بار دکھانا بند کر دیا۔

سبق سادہ ہے: جب آپ بہت سے ذرائع سے ڈیٹا اکٹھا کرتے ہیں، تو پہلے اپنے سسٹم میں شناخت (identity) کی بنیاد رکھیں۔ ایک مستحکم آئی ڈی نکالیں، اسے ڈیٹا بیس کے پابندیوں (constraints) کے ذریعے نافذ کریں، اور ہر رائٹ (write) کو idempotent بنائیں۔

آپ کو پیچیدہ ٹولز کی ضرورت نہیں ہے۔ PHP اور SQLite کافی ہیں۔

ماخذ: https://dev.to/ahmet_gedik778845/building-a-video-url-canonicalization-pipeline-in-php-84-with-sqlite-32ne