בדף הזה נסביר איך לאחסן וקטורים בגיבובים. הגיבוב מספק דרך יעילה לאחסון וקטורים ב-Redis.
סריאליזציה של נתונים
לפני שמאחסנים וקטורים בגיבוב (hash) של Redis, צריך להמיר אותם לפורמט ש-Redis מבין. הוא דורש סריאליזציה של וקטורים ל-blob בינארי, שבו הגודל שווה לגודל הבייט של סוג הנתונים (למשל, 4 עבור FLOAT32) כפול מספר המימדים של הווקטור. אפשרות פופולרית לווקטורים מספריים היא ספריית NumPy של Python:
חיבור ל-Redis
לפני שמאחסנים את הווקטור בגיבוב, צריך ליצור חיבור למופע Redis באמצעות לקוח כמו redis-py:
שמירת הווקטור בגיבוב
פונקציות הגיבוב של Redis הן כמו מילונים, עם צמדים של מפתח-ערך. משתמשים בפקודה HSET של Redis כדי לאחסן את הווקטור שעבר סריאליזציה:
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.cluster.RedisCluster(host='your_redis_host', port=6379)
redis_client.hset('vector_storage', 'vector_key', serialized_vector) # 'vector_key' is a unique identifier
- כדי שהאינדוקס יצליח, נתוני הווקטור צריכים להתאים למאפיינים ולסוג הנתונים שמוגדרים בסכימת האינדקס.
מילוי חוסרים באינדקסים
יכול להיות שתתבצע השלמה של אינדקסים באחד מהתרחישים הבאים:
- אחרי שיוצרים אינדקס, תהליך מילוי החוסרים סורק את מרחב המפתחות של Redis כדי למצוא רשומות שעומדות בקריטריונים של מסנן האינדקס.
- אינדקסים של וקטורים והנתונים שלהם נשמרים בתמונות מצב של RDB. כשמעלים קובץ RDB, מופעל תהליך אוטומטי של מילוי חוזר של האינדקס. במהלך התהליך הזה, המערכת מזהה באופן פעיל רשומות חדשות או רשומות שעברו שינוי, ומשלבת אותן באינדקס מאז שנוצר צילום המצב של ה-RDB. כך נשמרת שלמות האינדקס והתוצאות תמיד עדכניות.