ఇన్క్రిమెంటల్ ప్రాసెసింగ్: ఫాస్ట్ పైప్లైన్ అప్డేట్స్
ఈ కథనం SEO పైప్లైన్ గంటలకు బదులు సెకన్లలో అమలు కావడానికి ఇన్క్రిమెంటల్ ప్రాసెసింగ్ను ఎలా ఉపయోగిస్తుందో వివరిస్తుంది.
సమస్య: పూర్తి పునఃప్రాసెసింగ్ నెమ్మదిగా ఉంటుంది
మొత్తం పైప్లైన్ను మొదటి నుండి అమలు చేయడానికి గంటలు పడుతుంది:
-
దశ 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):
# Check if output exists
if not os.path.exists(output_path):
# ... (implementation details omitted)
వాడుక
ప్రతి స్క్రిప్ట్ ప్రారంభంలో తనిఖీ చేస్తుంది:
from seo_common import should_skip_step
if should_skip_step(SEO_SOURCE_EMBEDDINGS_PATH, __file__):
print("✓ Skipping: Output is fresh and script unchanged")
return
ప్రయోజనాలు
వేగవంతమైన రోజువారీ రన్లు: డేటా మారకపోతే చాలా దశలు దాటవేయబడతాయి
స్వయంచాలక చెల్లుబాటు రద్దు: స్క్రిప్ట్ మార్పులు తిరిగి అమలును ప్రేరేపిస్తాయి
కాన్ఫిగర్ చేయగల తాజాదనం: ప్రతి దశకు days పారామీటర్ను సర్దుబాటు చేయండి
ఇన్క్రిమెంటల్ ఎంబెడ్డింగ్ వ్యూహం
ఇది ఎలా పని చేస్తుంది
అంశాలను (ఉత్పత్తులు, క్వెరీలు, ఫ్రేజ్లు) ఎంబెడ్ చేసేటప్పుడు:
కాష్ లోడ్ చేయండి: గతంలో ఎంబెడ్ చేసిన అంశాలు మరియు వాటి కీలను చదవండి
కీలను పోల్చండి: కొత్త, మారిన మరియు తొలగించిన అంశాలను గుర్తించండి
కొత్త వాటిని మాత్రమే ఎంబెడ్ చేయండి: కాష్లో లేని అంశాలను మాత్రమే ఎంబెడ్ చేయండి
విలీనం: కాష్ చేసిన ఎంబెడ్డింగ్లను కొత్త ఎంబెడ్డింగ్లతో సరైన క్రమంలో కలపండి
సేవ్: నవీకరించబడిన కాష్ను వ్రాయండి
అమలు
incremental_embed_with_keys ఫంక్షన్ దీనిని నిర్వహిస్తుంది:
def incremental_embed_with_keys(
items, # Current items to embed
keys, # Unique keys for items
# ... (implementation details omitted)
కాష్ హిట్ రేట్లు
మొదటి రన్ తర్వాత సాధారణ కాష్ హిట్ రేట్లు:
మూల డేటా (ఉత్పత్తులు, భాగాలు, కథనాలు):
-
మొదటి రన్: 0% (మొత్తం 65,000 అంశాలను ఎంబెడ్ చేయండి)
-
రోజువారీ రన్: 99.5% (కేవలం ~300 కొత్త/మారిన అంశాలు)
క్వెరీలు (GSC, Ads, లైవ్ నుండి):
-
మొదటి రన్: 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 # Save every 1,000 items
embeddings_list = []
# ... (implementation details omitted)
ప్రయోజనాలు
క్రాష్ రికవరీ: మొదటి నుండి ప్రారంభించకుండా చివరి చెక్పాయింట్ నుండి కొనసాగించండి
పురోగతి దృశ్యమానత: ప్రతి 1,000 అంశాలకు పురోగతిని చూడండి
మెమరీ సామర్థ్యం: బ్యాచ్లలో ప్రాసెస్ చేయండి, అన్నింటినీ ఒకేసారి లోడ్ చేయవద్దు
పైప్లైన్ అంతటా ఏకీకరణ
బహుళ దశలలో ఇన్క్రిమెంటల్ ప్రాసెసింగ్ ఉపయోగించబడుతుంది:
దశ 0: సోర్స్ డేటా ఎంబెడ్డింగ్
ఇన్క్రిమెంటల్: కొత్త/మారిన ఉత్పత్తులు, భాగాలు, కథనాలను మాత్రమే ఎంబెడ్ చేయండి
చెక్పాయింటింగ్: ప్రతి 1,000 అంశాలను సేవ్ చేయండి
స్కిప్ లాజిక్: అవుట్పుట్ 7 రోజుల కంటే తక్కువ ఉండి స్క్రిప్ట్ మారకపోతే దాటవేయండి
చూడండి: సోర్స్ డేటా ఎంబెడ్డింగ్
దశ 1: క్వెరీ ఫెచింగ్
ఇన్క్రిమెంటల్: API కాల్స్ కొత్త డేటాను మాత్రమే పొందుతాయి (చివరి రన్ నుండి)
స్కిప్ లాజిక్: అవుట్పుట్ 1 రోజు కంటే తక్కువ ఉంటే దాటవేయండి
చూడండి: క్వెరీ ఫెచింగ్
దశ 3బి: క్వెరీ ఎంబెడ్డింగ్
ఇన్క్రిమెంటల్: కొత్త క్వెరీలను మాత్రమే ఎంబెడ్ చేయండి
చెక్పాయింటింగ్: ప్రతి 1,000 క్వెరీలను సేవ్ చేయండి
స్కిప్ లాజిక్: అవుట్పుట్ 7 రోజుల కంటే తక్కువ ఉండి స్క్రిప్ట్ మారకపోతే దాటవేయండి
చూడండి: క్వెరీ ఎంబెడ్డింగ్
దశ 4: ఫ్రేజ్ మ్యాపింగ్ విస్తరణ
ఇన్క్రిమెంటల్: కొత్త ఫ్రేజ్లను మాత్రమే ఎంబెడ్ చేయండి
చెక్పాయింటింగ్: ప్రతి 1,000 ఫ్రేజ్లను సేవ్ చేయండి
స్కిప్ లాజిక్: అవుట్పుట్ 7 రోజుల కంటే తక్కువ ఉండి స్క్రిప్ట్ మారకపోతే దాటవేయండి
చూడండి: ఫ్రేజ్-టు-ఫిల్టర్ మ్యాపింగ్లు
దశ 6: ప్రొడక్ట్ మ్యాచింగ్
ఇన్క్రిమెంటల్: కొత్త క్వెరీలను మాత్రమే మ్యాచ్ చేయండి
స్కిప్ లాజిక్: అవుట్పుట్ 7 రోజుల కంటే తక్కువ ఉండి స్క్రిప్ట్ మారకపోతే దాటవేయండి
చూడండి: ప్రొడక్ట్ మ్యాచింగ్
కాన్ఫిగరేషన్
ఇన్క్రిమెంటల్ ప్రాసెసింగ్ ప్రతి దశకు కాన్ఫిగర్ చేయబడుతుంది:
తాజాదనం థ్రెషోల్డ్
# Skip if output < 7 days old (default)
should_skip_step(output_path, script_path, days=7)
# Skip if output < 1 day old (for frequently changing data)
should_skip_step(output_path, script_path, days=1)
చెక్పాయింట్ ఫ్రీక్వెన్సీ
# Save every 1,000 items (default)
incremental_embed_with_keys(..., checkpoint_every=1000)
# Save every 5,000 items (for faster processing, less safety)
incremental_embed_with_keys(..., checkpoint_every=5000)
బ్యాచ్ పరిమాణం
# Embed 32 items per batch (default, balanced)
incremental_embed_with_keys(..., batch_size=32)
# Embed 64 items per batch (faster on GPU, more memory)
incremental_embed_with_keys(..., batch_size=64)
పర్యవేక్షణ మరియు డీబగ్గింగ్
కాష్ గణాంకాలు
ప్రతి దశ కాష్ గణాంకాలను ముద్రిస్తుంది:
✓ Found existing cache, checking for changes...
Existing: 65,000 items
Current: 65,300 items
Reusing: 64,800 embeddings
New: 500 items to embed
స్కిప్ సందేశాలు
దశలు దాటవేయబడినప్పుడు:
✓ Skipping 0_embed_source_data.py: Output is fresh and script unchanged.
చెక్పాయింట్ సందేశాలు
సుదీర్ఘ కార్యకలాపాల సమయంలో:
Embedding 65,000 items (checkpointing every 1,000)...
Batch 0-1000...
✓ Checkpoint saved (1,000 total)
Batch 1000-2000...
✓ Checkpoint saved (2,000 total)
...
సూచనలు
సాంకేతిక భావనలు
-
ఇన్క్రిమెంటల్ లెర్నింగ్ - వికీపీడియా
-
చెక్పాయింటింగ్ - వికీపీడియా
-
కాషింగ్ - వికీపీడియా
సంబంధిత కథనాలు
-
SEO పైప్లైన్ అవలోకనం - పూర్తి పైప్లైన్ నిర్మాణం
-
సోర్స్ డేటా ఎంబెడ్డింగ్ - ఇన్క్రిమెంటల్ ప్రొడక్ట్ ఎంబెడ్డింగ్
-
క్వెరీ ఎంబెడ్డింగ్ - ఇన్క్రిమెంటల్ క్వెరీ ఎంబెడ్డింగ్
-
ఫ్రేజ్-టు-ఫిల్టర్ మ్యాపింగ్లు - ఇన్క్రిమెంటల్ ఫ్రేజ్ ఎంబెడ్డింగ్
సారాంశం
ఇన్క్రిమెంటల్ ప్రాసెసింగ్ పైప్లైన్ను 90-180× వేగవంతం చేస్తుంది:
మూడు-పొరల వ్యూహం:
-
✅ స్టెప్ స్కిప్పింగ్ (అవుట్పుట్ తాజాగా ఉంటే మొత్తం దశలను దాటవేయండి)
-
✅ ఇన్క్రిమెంటల్ ఎంబెడ్డింగ్ (కొత్త/మారిన అంశాలను మాత్రమే ఎంబెడ్ చేయండి)
-
✅ చెక్పాయింటింగ్ (పురోగతిని సేవ్ చేయండి, వైఫల్యంపై కొనసాగించండి)
పనితీరు:
-
✅ మొదటి రన్: ~2.5 గంటలు (పూర్తి పైప్లైన్)
-
✅ రోజువారీ రన్: ~5 నిమిషాలు (ఇన్క్రిమెంటల్ నవీకరణలు)
-
✅ కాష్ హిట్ రేట్లు: మొదటి రన్ తర్వాత 99%+
ప్రయోజనాలు:
-
✅ వేగవంతమైన రోజువారీ నవీకరణలు (గంటలకు బదులు నిమిషాలు)
-
✅ స్వయంచాలక చెల్లుబాటు రద్దు (స్క్రిప్ట్ మార్పులు తిరిగి అమలును ప్రేరేపిస్తాయి)
-
✅ క్రాష్ రికవరీ (చెక్పాయింట్ నుండి కొనసాగించండి)
-
✅ మెమరీ సామర్థ్యం (బ్యాచ్ ప్రాసెసింగ్)
ఈ వ్యూహం మారని డేటాపై కంప్యూట్ వృథా చేయకుండా రోజువారీ పైప్లైన్ రన్లను అనుమతిస్తుంది.