ઇન્ક્રીમેન્ટલ પ્રોસેસિંગ: ફાસ્ટ પાઇપલાઇન અપડેટ્સ

આ લેખ સમજાવે છે કે કેવી રીતે 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: ફ્રેઝ મેપિંગ એક્સ