ઇન્ક્રીમેન્ટલ પ્રોસેસિંગ: ફાસ્ટ પાઇપલાઇન અપડેટ્સ
આ લેખ સમજાવે છે કે કેવી રીતે 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 દિવસ જૂની અને સ્ક્રિપ્ટ અપરિવર્તિત હોય તો છોડી દો
જુઓ: ક્વેરી એમ્બેડિંગ