ഇൻക്രിമെന്റൽ പ്രോസസ്സിംഗ്: വേഗത്തിലുള്ള പൈപ്പ്ലൈൻ അപ്ഡേറ്റുകൾ

ഈ ലേഖനം 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 ഇനങ്ങളിലും പുരോഗതി കാണുക

മെമ്മറി കാര്യക്ഷമത: ബാച്ചുകളായി പ്രോസസ്സ് ചെയ്യുക, എല്ലാം ഒരുമിച്ച് ലോഡ് ചെയ്യരുത്

പൈപ്പ്ലൈനിലുടനീളം സംയോജനം

ഇൻക്രിമെന്റൽ പ്ര