הוספת וקטורים לאינדקס

בדף הזה נסביר איך לאחסן וקטורים בגיבובים. הגיבוב מספק דרך יעילה לאחסון וקטורים ב-Redis.

סריאליזציה של נתונים

לפני שמאחסנים וקטורים בסוג נתונים של hash, צריך להמיר אותם לפורמט שמערכת Memorystore for Redis מבינה. נדרשת סריאליזציה של וקטורים ל-blob בינארי, שגודלו שווה לגודל בבייט של סוג הנתונים (למשל, 4 עבור FLOAT32) כפול מספר המימדים של הווקטור. בחירה פופולרית לווקטורים מספריים היא ספריית NumPy של Python:

חיבור ל-Redis

לפני שמאחסנים את הווקטור בגיבוב, צריך ליצור חיבור למופע Memorystore for Redis באמצעות לקוח שתואם ל-OSS Redis, כמו redis-py:

שמירת הווקטור בגיבוב

ערכי Hash דומים למילונים, עם צמדי מפתח/ערך. משתמשים בפקודה HSET כדי לאחסן את הווקטור שעבר סריאליזציה:

import numpy as np
import redis

# Sample vector
vector = np.array([1.2, 3.5, -0.8], dtype=np.float32) # 3-dimensional vector

# Serialize to a binary blob
serialized_vector = vector.tobytes()

redis_client = redis.Redis(host='your_redis_host', port=6379)

redis_client.hset('vector_storage', 'vector_key', serialized_vector)  # 'vector_key' is a unique identifier
  • כדי שהאינדוקס יצליח, נתוני הווקטור צריכים להתאים למאפיינים ולסוג הנתונים שמוגדרים בסכימת האינדקס.

מילוי חוסרים באינדקסים

יכול להיות שתתבצע השלמה של אינדקסים באחד מהתרחישים הבאים:

  • אחרי שיוצרים אינדקס, תהליך מילוי החוסרים סורק את מרחב המפתחות כדי למצוא רשומות שעומדות בקריטריונים של מסנן האינדקס.
  • אינדקסים של וקטורים והנתונים שלהם נשמרים בתמונות מצב של RDB. כשמעלים קובץ RDB, מופעל תהליך אוטומטי של מילוי חוזר של האינדקס. במהלך התהליך הזה, המערכת מזהה באופן פעיל רשומות חדשות או רשומות שעברו שינוי, ומשלבת אותן באינדקס מאז שנוצר צילום המצב של ה-RDB. כך נשמרת שלמות האינדקס והתוצאות תמיד עדכניות.