ఇంక్రిమెంటల్ ప్రాసెసింగ్: ఫాస్ట్ పైప్లైన్ అప్డేట్లు
ఈ వ్యాసం 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 రోజు పాతది అయితే దాటవేయండి
చూడండి: క్వెరీ ఫెచ్చింగ్
స్టెప్ 3b: క్వెరీ ఎంబెడింగ్
ఇంక్రిమెంటల్: కేవలం కొత్త క్వెరీలను ఎంబెడ్ చేయండి
చెక్పాయింటింగ్: ప్రతి 1,000 క్వెరీలను సేవ్ చేయండి
స్కిప్ లాజిక్: అవుట్పుట్ < 7 రోజుల పాతది మరియు స్క్రిప్ట్ మారకపోతే దాటవేయండి
చూడండి: క్వెరీ ఎంబెడింగ్
స్టెప్ 4: ఫ్రేజ్ మ్యాపింగ్ విస్తరణ
ఇంక్రిమెంటల్: కేవలం కొత్త పద