انکریمینٹل پروسیسنگ: فاسٹ پائپ لائن اپ ڈیٹس

یہ آرٹیکل بتاتا ہے کہ ایس ای او پائپ لائن انکریمینٹل پروسیسنگ کا استعمال کرتے ہوئے گھنٹوں کی بجائے سیکنڈز میں کیسے چلتی ہے۔

مسئلہ: مکمل ری پروسیسنگ سست ہے

پوری پائپ لائن کو ابتدا سے چلانے میں گھنٹے لگتے ہیں:

  • مرحلہ 0 (سورس ایمبیڈنگ): 15 منٹ (65,000 پروڈکٹس)

  • مرحلہ 1 (کوئری حاصل کرنا): 10 منٹ (API کالز)

  • مرحلہ 2 (کوئری کلسٹرنگ): 30 منٹ (65K×65K مماثلت)

  • مرحلہ 3 (فریز میپنگز): 20 منٹ (ایمبیڈنگ + میچنگ)

  • مرحلہ 4 (پروڈکٹ میچنگ): 45 منٹ (کوئریز × پروڈکٹس)

  • مرحلہ 5 (متعلقہ سرچز): 25 منٹ (کوئری × کوئری مماثلت)

کل: ~2.5 گھنٹے مکمل پائپ لائن کے لیے

مسئلہ: روزانہ اپ ڈیٹس 2.5 گھنٹے غیر تبدیل شدہ ڈیٹا کی دوبارہ گنتی میں ضائع کر دیں گی۔

حل: تین پرت انکریمینٹل اسٹریٹجی

ہم غیر ضروری کام چھوڑنے کے لیے تین تکنیک استعمال کرتے ہیں:

1. مرحلہ چھوڑنا (کورس-گرینڈ)

پورے مراحل چھوڑ دیں اگر آؤٹ پٹ تازہ ہے اور سکرپٹ غیر تبدیل شدہ ہے۔

2. انکریمینٹل ایمبیڈنگ (میڈیم-گرینڈ)

صرف نئی/تبدیل شدہ آئٹمز ایمبیڈ کریں، کیچڈ ایمبیڈنگز دوبارہ استعمال کریں۔

3. چیک پوائنٹنگ (فائن-گرینڈ)

طویل آپریشنز کے دوران ترقی محفوظ کریں، ناکامی پر چیک پوائنٹ سے دوبارہ شروع کریں۔

مرحلہ چھوڑنے کی اسٹریٹجی

یہ کیسے کام کرتی ہے

ہر مرحلے سے پہلے، چیک کریں:

آؤٹ پٹ موجود ہے؟ اگر نہیں، تو مرحلہ چلائیں۔

آؤٹ پٹ کی عمر: اگر 7 دن سے زیادہ پرانی ہے، تو مرحلہ چلائیں۔

سکرپٹ تبدیل ہوا؟ اگر سکرپٹ آؤٹ پٹ بننے کے بعد سے تبدیل ہوا ہے، تو مرحلہ چلائیں۔

تمام چیک پاس ہوئے؟ مرحلہ چھوڑ دیں۔

نفاذ

def should_skip_step(output_path, script_path, days=7):
    # چیک کریں کہ آیا آؤٹ پٹ موجود ہے
    if not os.path.exists(output_path):
# ... (نفاذ کی تفصیلات چھوڑی گئی ہیں)

استعمال

ہر سکرپٹ شروع ہونے پر چیک کرتا ہے:

from seo_common import should_skip_step

if should_skip_step(SEO_SOURCE_EMBEDDINGS_PATH, __file__):
    print("✓ چھوڑا جا رہا ہے: آؤٹ پٹ تازہ ہے اور سکرپٹ غیر تبدیل شدہ ہے")
    return

فوائد

روزانہ رنز تیز: زیادہ تر مراحل چھوڑ دیے جاتے ہیں اگر ڈیٹا غیر تبدیل شدہ ہو

خودکار ناجائز قرار دینا: سکرپٹ تبدیلیاں دوبارہ رن کو متحرک کرتی ہیں

تشکیل پذیر تازگی: فی مرحلہ days پیرامیٹر ایڈجسٹ کریں

انکریمینٹل ایمبیڈنگ اسٹریٹجی

یہ کیسے کام کرتی ہے

جب آئٹمز ایمبیڈ کر رہے ہوں (پروڈکٹس، کوئریز، فریزز):

کیچ لوڈ کریں: پہلے ایمبیڈ کی گئی آئٹمز اور ان کی چابیاں پڑھیں

چابیاں موازنہ کریں: نئی، تبدیل شدہ، اور حذف شدہ آئٹمز کی شناخت کریں

صرف نئی ایمبیڈ کریں: صرف وہ آئٹمز ایمبیڈ کریں جو کیچ میں نہ ہوں

ضم کریں: کیچڈ ایمبیڈنگز کو نئی ایمبیڈنگز کے ساتھ صحیح ترتیب میں ملا دیں

محفوظ کریں: اپ ڈیٹ شدہ کیچ لکھیں

نفاذ

incremental_embed_with_keys فنکشن اس کو ہینڈل کرتی ہے:

def incremental_embed_with_keys(
    items,           # ایمبیڈ کرنے کے لیے موجودہ آئٹمز
    keys,            # آئٹمز کے لیے منفرد چابیاں
# ... (نفاذ کی تفصیلات چھوڑی گئی ہیں)

کیچ ہٹ ریٹس

پہلے رن کے بعد عام کیچ ہٹ ریٹس:

سورس ڈیٹا (پروڈکٹس، پارٹس، آرٹیکلز):

  • پہلا رن: 0% (تمام 65,000 آئٹمز ایمبیڈ کریں)

  • روزانہ رن: 99.5% (صرف ~300 نئی/تبدیل شدہ آئٹمز)

کوئریز (GSC، ایڈز، لائیو سے):

  • پہلا رن: 0% (تمام 65,000 کوئریز ایمبیڈ کریں)

  • روزانہ رن: 99.2% (صرف ~500 نئی کوئریز)

فریز میپنگز:

  • پہلا رن: 0% (تمام 5,000 فریزز ایمبیڈ کریں)

  • روزانہ رن: 99.8% (صرف ~10 نئی فریزز)

کارکردگی پر اثر

پہلا رن (ٹھنڈا کیچ):

  • سورس ایمبیڈنگ: 15 منٹ (65,000 آئٹمز)

  • کوئری ایمبیڈنگ: 10 منٹ (65,000 کوئریز)

  • فریز ایمبیڈنگ: 2 منٹ (5,000 فریزز)

روزانہ رن (گرم کیچ):

  • سورس ایمبیڈنگ: 10 سیکنڈ (300 آئٹمز، 99.5% ہٹ ریٹ)

  • کوئری ایمبیڈنگ: 5 سیکنڈ (500 کوئریز، 99.2% ہٹ ریٹ)

  • فریز ایمبیڈنگ: 1 سیکنڈ (10 فریزز، 99.8% ہٹ ریٹ)

اسپیڈ اپ: 90-180× تیز

چیک پوائنٹنگ اسٹریٹجی

یہ کیسے کام کرتی ہے

طویل چلنے والی آپریشنز کے لیے (65,000 آئٹمز ایمبیڈ کرنا):

بیچ پروسیسنگ: آئٹمز کو بیچز میں پروسیس کریں (مثلاً، 1,000 آئٹمز)

چیک پوائنٹ محفوظ کریں: ہر بیچ کے بعد، جمع شدہ نتائج محفوظ کریں

ناکامی پر دوبارہ شروع کریں: اگر پروسیس کریش ہو جائے، تو آخری چیک پوائنٹ سے دوبارہ شروع کریں

حتمی محفوظ کریں: تمام بیچز کے بعد، مکمل نتائج محفوظ کریں

نفاذ

چیک پوائنٹنگ incremental_embed_with_keys میں بنائی گئی ہے:

checkpoint_every = 1000  # ہر 1,000 آئٹمز پر محفوظ کریں

embeddings_list = []
# ... (نفاذ کی تفصیلات چھوڑی گئی ہیں)

فوائد

کریش ریکوری: دوبارہ شروع کرنے کی بجائے آخری چیک پوائنٹ سے دوبارہ شروع کریں

ترقی کی مرئیت: ہر 1,000 آئٹمز پر ترقی دیکھیں

میموری کی کارکردگی: بیچز میں پروسیس کریں، ایک ساتھ تمام نہ لوڈ کریں

پائپ لائن میں انضمام

انکریمینٹل پروسیسنگ کا استعمال متعدد مراحل میں کیا جاتا ہے:

مرحلہ 0: سورس ڈیٹا ایمبیڈنگ

انکریمینٹل: صرف نئی/تبدیل شدہ پروڈکٹس، پارٹس، آرٹیکلز ایمبیڈ کریں

چیک پوائنٹنگ: ہر 1,000 آئٹمز پر محفوظ کریں

سکپ لاجک: چھوڑ دیں اگر آؤٹ پٹ 7 دن سے کم پرانا ہے اور سکرپٹ غیر تبدیل شدہ ہے

دیکھیں: سورس ڈیٹا ایمبیڈنگ

مرحلہ 1: کوئری حاصل کرنا

انکریمینٹل: API کالز صرف نیا ڈیٹا حاصل کرتی ہیں (آخری رن کے بعد سے)

سکپ لاجک: چھوڑ دیں اگر آؤٹ پٹ 1 دن سے کم پرانا ہے

دیکھیں: کوئری حاصل کرنا

مرحلہ 3b: کوئری ایمبیڈنگ

انکریمینٹل: صرف نئی کوئریز ایمبیڈ کریں

چیک پوائنٹنگ: ہر 1,000 کوئریز پر محفوظ کریں

سکپ لاجک: چھوڑ دیں اگر آؤٹ پٹ 7 دن سے کم پرانا ہے اور سکرپٹ غیر تبدیل شدہ ہے

دیکھیں: کوئری ایمبیڈنگ

مرحلہ 4: فریز میپنگ ایکسپینشن

انکریمینٹل: صرف نئی فریزز ایمبیڈ کریں

چیک پوائنٹنگ: ہر 1,000 فریزز پر محفوظ کریں

سکپ لاجک: چھوڑ دیں اگر آؤٹ پٹ 7 دن سے کم پرانا ہے اور سکرپٹ غیر تبدیل شدہ ہے

دیکھیں: فریز-ٹو-فلٹر میپنگز

مرحلہ 6: پروڈکٹ میچنگ

انکریمینٹل: صرف نئی کوئریز میچ کریں

سکپ لاجک: چھوڑ دیں اگر آؤٹ پٹ 7 دن سے کم پرانا ہے اور سکرپٹ غیر تبدیل شدہ ہے

دیکھیں: پروڈکٹ میچنگ

تشکیل

انکریمینٹل پروسیسنگ فی مرحلہ تشکیل دی جاتی ہے:

تازگی کی حد

# چھوڑ دیں اگر آؤٹ پٹ 7 دن سے کم پرانا ہے (ڈیفالٹ)
should_skip_step(output_path, script_path, days=7)

# چھوڑ دیں اگر آؤٹ پٹ 1 دن سے کم پرانا ہے (اکثر تبدیل ہونے والے ڈیٹا کے لیے)
should_skip_step(output_path, script_path, days=1)

چیک پوائنٹ فریکوئنسی

# ہر 1,000 آئٹمز پر محفوظ کریں (ڈیفالٹ)
incremental_embed_with_keys(..., checkpoint_every=1000)

# ہر 5,000 آئٹمز پر محفوظ کریں (تیز پروسیسنگ کے لیے، کم حفاظت)
incremental_embed_with_keys(..., checkpoint_every=5000)

بیچ سائز

# فی بیچ 32 آئٹمز ایمبیڈ کریں (ڈیفالٹ، متوازن)
incremental_embed_with_keys(..., batch_size=32)

# فی بیچ 64 آئٹمز ایمبیڈ کریں (GPU پر تیز، زیادہ میموری)
incremental_embed_with_keys(..., batch_size=64)

مانیٹرنگ اور ڈیبگنگ

کیچ اعدادوشمار

ہر مرحلہ کیچ اعدادوشمار پرنٹ کرتا ہے:

✓ موجودہ کیچ ملا، تبدیلیوں کے لیے چیک کر رہا ہے...
  موجودہ: 65,000 آئٹمز
  حالیہ:  65,300 آئٹمز
  دوبارہ استعمال: 64,800 ایمبیڈنگز
  نئی:     500 ایمبیڈ کرنے کے لیے آئٹمز

سکپ میسجز

جب مراحل چھوڑے جاتے ہیں:

✓ 0_embed_source_data.py چھوڑا جا رہا ہے: آؤٹ پٹ تازہ ہے اور سکرپٹ غیر تبدیل شدہ ہے۔

چیک پوائنٹ میسجز

طویل آپریشنز کے دوران:

65,000 آئٹمز ایمبیڈ کر رہا ہے (ہر 1,000 پر چیک پوائنٹنگ)...
  بیچ 0-1000...
    ✓ چیک پوائنٹ محفوظ ہو گیا (1,000 کل)
  بیچ 1000-2000...
    ✓ چیک پوائنٹ محفوظ ہو گیا (2,000 کل)
  ...

حوالہ جات

تکنیکی تصورات

متعلقہ مضامین

خلاصہ

انکریمینٹل پروسیسنگ پائپ لائن کو 90-180× تیز بناتی ہے:

تین پرت اسٹریٹجی:

  • ✅ مرحلہ چھوڑنا (پورے مراحل چھوڑ دیں اگر آؤٹ پٹ تازہ ہو)

  • ✅ انکریمینٹل ایمبیڈنگ (صرف نئی/تبدیل شدہ آئٹمز ایمبیڈ کریں)

  • ✅ چیک پوائنٹنگ (ترقی محفوظ کریں، ناکامی پر دوبارہ شروع کری