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