ಇನ್ಕ್ರಿಮೆಂಟಲ್ ಪ್ರೊಸೆಸಿಂಗ್: ವೇಗದ ಪೈಪ್ಲೈನ್ ಅಪ್ಡೇಟ್ಗಳು

ಈ ಲೇಖನವು 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: ವಾಕ್ಯಾಂಶ ಮ್ಯಾಪಿಂಗ್ ವಿಸ್ತರಣೆ

ಇನ್ಕ್ರಿಮೆಂಟಲ್: ಹೊಸ ವಾಕ್ಯಾಂಶಗಳನ್ನು ಮಾತ್ರ ಎಂಬೆಡ್ ಮಾಡಿ

ಚೆಕ್ಪಾಯಿಂಟಿಂಗ್: ಪ್ರತಿ 1,000 ವಾಕ್ಯಾಂಶಗಳಿಗೆ ಉಳಿಸಿ

ಬಿಟ್ಟುಬಿಡುವ ತರ್ಕ: ಔಟ್ಪುಟ್ < 7 ದಿನಗಳ ಹಳೆಯದು ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಬದಲಾಗದಿದ್ದರೆ ಬಿಟ್ಟುಬಿಡಿ

ನೋಡಿ: ವಾಕ್ಯಾಂಶ-ಟು-ಫಿಲ್ಟರ್ ಮ್ಯಾಪಿಂಗ್ಗಳು

ಹಂತ 6: ಉತ್ಪನ್ನ ಹೊಂದಾಣಿಕೆ

ಇನ್ಕ್ರಿಮೆಂಟಲ್: ಹೊಸ ಪ್ರಶ್ನೆಗಳನ್ನು ಮಾತ್ರ ಹೊಂದಿಸಿ