בדף הזה מוסבר איך מתבצעות חיפושים וקטוריים במופעים של Cloud SQL ל-MySQL. ב-Cloud SQL אפשר לאחסן הטבעות וקטוריות, ליצור אינדקסים וקטוריים ולבצע חיפושים וקטוריים בשילוב עם נתונים מאוחסנים אחרים.
אחסון של הטמעת וקטורים
אתם מאחסנים את ההטמעות הווקטוריות בטבלה שעומדת בדרישות של מאפייני אטומיות, עקביות, בידוד ועמידות (ACID). כמו נתונים יחסיים אחרים בטבלה, אפשר לגשת להטמעות וקטוריות בטבלה באמצעות סמנטיקה טרנזקציונלית קיימת.
כדי ליצור מיפוי בין שורות בטבלה לבין ייצוגים וקטוריים, צריך ליצור עמודה בטבלה כדי לאחסן את הטמעות הווקטורים. העמודה חייבת להשתמש בסוג הנתונים VECTOR של Cloud SQL, וחייב להיות בה ציון של מספר הממדים שההטמעה דורשת. בעמודה של הטמעת וקטורים אפשר לאחסן רק הטמעות וקטורים שמשתמשות בדיוק באותם מאפיינים שציינתם כשאתם מגדירים את העמודה.
בטבלה יכולה להיות רק עמודה אחת של הטבעת וקטורים. אין הגבלות על מספר השורות בטבלה.
כדי להבחין בין עמודת הטמעת וקטורים לבין עמודות אחרות, Cloud SQL מוסיף לעמודה את התווים המיוחדים COMMENT ו-CONSTRAINT.
האילוץ נדרש לאימות הקלט, וההערה של עמודת הטמעת הווקטור גלויה כCOMMENT. אי אפשר לשנות או למחוק את התגובה או את האילוץ.
אם יש לכם מספיק נפח אחסון וזיכרון שזמינים במופע Cloud SQL, אתם יכולים להשתמש בכמה טבלאות עם עמודות הטמעה וקטוריות משלהן.
שכפול נתונים פועל באותו אופן בעמודת הטמעת וקטורים כמו בעמודות אחרות של MySQL InnoDB.
רשימה של מגבלות על טבלאות של הטמעת וקטורים, על עמודות ועל הצהרות DML מופיעה במאמר מגבלות.
אינדקסים של וקטורים
כדי לבצע חיפושי דמיון של ANN בהטמעות הווקטוריות, צריך להשתמש באינדקס וקטורי. Cloud SQL יוצר אינדקסים של וקטורים באמצעות האלגוריתם Scalable Nearest Neighbors (ScANN).
יש דרישות מסוימות לגבי אינדקסים של וקטורים:
- אפשר ליצור רק אינדקס וקטורי אחד לכל טבלה.
- אם יש לכם כמה טבלאות עם הטמעות וקטוריות במופע, אתם יכולים ליצור אינדקסים וקטוריים לכל אחת מהן.
- אם יוצרים אינדקס וקטורי, אי אפשר להוסיף אילוץ למפתח הראשי של הטבלה המאונדקסת.
כדי לשפר את איכות החיפוש, כדאי ליצור אינדקס וקטורי רק אחרי שמעלים את רוב הנתונים לטבלת הבסיס. אם יש לכם פחות מ-1,000 הטמעות בטבלת הבסיס, יצירת האינדקס תיכשל.
כשאתם מחליטים אם ליצור אינדקס וקטורי, אם יש לכם מספר קטן של שורות, כדאי לשקול אם אפשר לבצע במקום זאת חיפוש KNN. ההחלטה אם להשתמש בחיפוש KNN או בחיפוש ANN תלויה גם במספר הממדים בהטמעת הווקטור. יכול להיות שמספר גדול יותר של הטמעות יצריך אינדקס וקטורי.
רשימת המגבלות וההגבלות על אינדקסים של וקטורים מופיעה בקטע מגבלות. מידע על יצירת אינדקס וקטורי זמין במאמר יצירה וניהול של אינדקסים וקטוריים.
עדכונים באינדקס הווקטורים
מערכת Cloud SQL מעדכנת את מדדי הווקטור בזמן אמת. כל טרנזקציה שמבצעת פעולות של שפת טיפול בנתונים (DML) בטבלת הבסיס גם מעבירה שינויים לאינדקסים של הווקטורים המשויכים. התנהגות של אינדקסים וקטוריים זהה להתנהגות של כל אינדקס משני אחר בטבלה. אינדקסי הווקטורים עקביים לחלוטין מבחינת עסקאות ועומדים בדרישות ACID. אם מבצעים החזרה לאחור של טרנזקציה, השינויים התואמים של ההחזרה לאחור מתרחשים גם באינדקס הווקטורי.
שכפול של אינדקסים של וקטורים
Cloud SQL משכפל אינדקסים של וקטורים לכל העותקים לקריאה, כולל שכפול מדורג. כשיוצרים העתק לקריאה ממופע ראשי שיש בו הטבעת וקטורים, העותק לקריאה מקבל בירושה את הגדרות הטבעת הווקטורים מהמופע הראשי. במקרה של רפליקות קיימות לקריאה, צריך להפעיל תמיכה בהטמעת וקטורים בכל אחת מהן.
מבחינת ההשפעה על השהיית השכפול, יצירה ותחזוקה של אינדקסים וקטוריים פועלות באותו אופן כמו אינדקסים רגילים של MySQL.
התמדה, כיבוי והשפעה על תחזוקה
אינדקסים של וקטורים נשמרים באותו אופן כמו טבלאות בסיס, עם תמיכה מלאה ב-ACID. אינדקסים של וקטורים תמיד מסונכרנים עם נתוני טבלת הבסיס שלהם, ויש להם את אותה רמת נראות, בידוד ובטיחות במקרה של קריסה. אין השפעה על אינדקס הווקטורים כשהמופע מושבת או עובר תחזוקה.
תחזוקת האינדקס
אחרי שמבצעים פעולות DML נרחבות בטבלת הבסיס, יכול להיות שמדד הווקטור שאומן על הנתונים הראשוניים (בזמן יצירת המדד) לא ישקף את המצב החדש. זה יכול להשפיע על איכות החיפוש.
האינדקס מורכב משני חלקים:
- עץ האינדקס. התכונה הזו נוצרת על ידי אימון על נתונים קיימים. הוא לא משתנה במהלך חיי האינדקס.
- האינדקס נעלם. הם מכילים את כל שורות הנתונים. אינדקס העלים אף פעם לא יוצא מסנכרון.
יכול להיות שהיעילות של עץ האינדקס תרד אחרי שמריצים מספר גדול של הצהרות DML, כי השורות עוברות מעלה אחת לעלה אחר. כדי לרענן את עץ האינדקס, צריך לבנות מחדש את האינדקס.
פעולות DDL שלא נתמכות בטבלאות עם אינדקסים של וקטורים
- פעולות לשינוי טבלה שדורשות אלגוריתם העתקה.
- שינוי פעולות בטבלה שמחייב בנייה מחדש של הטבלה.
- מחיקה או שינוי של המפתח הראשי.
- מעבירים את הטבלה למרחב טבלאות כללי.
חיפוש וקטורי
Cloud SQL מספק פונקציות של מרחק וקטורי שבהן אתם יכולים להשתמש כדי לבצע חיפושים של דמיון וקטורי של השכן הקרוב המשוער (ANN) והשכנים הקרובים ביותר (KNN) במופע שלכם. כשמריצים שאילתה, הווקטור של השאילתה מושווה לווקטורים במערך הנתונים. פונקציות המרחק מחשבות את המרחק בין הווקטורים באמצעות מדד דמיון כמו קוסינוס. הווקטורים עם המרחק הקצר ביותר ביניהם הם הדומים ביותר ומוחזרים בתוצאות החיפוש.
Cloud SQL משתמש בפונקציות הבאות כדי למדוד את המרחק בין וקטורים בחיפושי וקטורים כשמבצעים חיפושי וקטורים של ANN ו-KNN:
- Cosine: מחשב את הקוסינוס של הזווית בין שני וקטורים. ערך קטן יותר מצביע על דמיון רב יותר בין הווקטורים.
- מכפלה סקלרית: חישוב הקוסינוס של הזווית כפול מכפלת הגדלים של הווקטורים התואמים.
- L2 squared distance: מחשב את המרחק האוקלידי בין שני וקטורים על ידי הוספת המרחק בריבוע בכל מימד.
חיפוש KNN
חיפוש וקטורי של KNN הוא שיטת החיפוש המועדפת כשצריך תוצאות מדויקות או כשרוצים להוסיף סינון סלקטיבי. בחיפוש KNN מחושב המרחק של וקטור השאילתה מכל הטמעה בקבוצת הנתונים, כדי למצוא את השכן הקרוב ביותר. חיפושי KNN ב-Cloud SQL מספקים היזכרות מושלמת. חיפושי KNN לא משתמשים באינדקס וקטורי, ולכן הם אפשרות טובה כשעובדים עם מערכי נתונים קטנים יותר.
כדי לבצע חיפוש KNN, משתמשים בפונקציה vector_distance שמקבלת שני וקטורים כקלט: וקטור השאילתה (מה שמחפשים) ווקטור מועמד ממערך הנתונים. הפונקציה מחשבת את המרחק בין שני הווקטורים האלה.
משתמשים ב-vector_distance בהצהרת SELECT. מידע נוסף זמין במאמר חיפוש של K-nearest neighbors (KNN).
אם תגלו ש-KNN לא מניב ביצועים טובים, תוכלו ליצור אינדקס וקטורי בהמשך ולהמשיך להשתמש ב-approx_distance באפליקציה שלכם לחיפושי ANN.
חיפוש ANN
חיפוש וקטורי של ANN הוא סוג החיפוש המועדף כשחשוב לשפר את יעילות השאילתה. הוא מאיץ את החיפושים של דמיון על ידי חישוב המרחק בין וקטור השאילתה לבין חלק קטן בלבד מהווקטורים בקבוצת הנתונים. כדי לעשות את זה, Cloud SQL מארגן את הנתונים באשכולות או במחיצות, ואז ממקד את החיפוש באשכולות שהכי קרובים לשאילתה. חיפושים ב-ANN דורשים אינדקסים של וקטורים. האינדקסים האלה נותנים עדיפות למהירות החיפוש על פני שליפה מושלמת. ב-Cloud SQL, סוג האינדקס TREE_SQ משמש לחיפושי ANN.
כדי לבצע חיפוש ANN, משתמשים בפונקציה approx_distance עם אפשרות למדידת מרחק. אפשר להשתמש ב-approx_distance ברשימה ORDER BY או SELECT, ומותר להשתמש בסעיף LIMIT כדי לצמצם את תוצאות החיפוש. אפשר גם להוסיף פסקה של WHERE כדי לבצע סינון של תוצאות החיפוש.
אם אתם רוצים לקבל יותר שליטה על מספר התוצאות שמוחזרות כשמבצעים חיפוש ANN עם מסננים, אתם יכולים להשתמש בסינון איטרטיבי. בעזרת סינון איטרטיבי, שאילתת החיפוש יכולה להחזיר יותר תוצאות חיפוש על ידי סריקה של יותר מהאינדקס הווקטורי עד שנמצא מספר השכנים המועדף.
כדי להפעיל סינון איטרטיבי בשאילתת החיפוש, צריך להגדיר את הדגל cloudsql_vector_iterative_filtering לערך ON ברמת הסשן עבור לקוחות ספציפיים או ברמה הגלובלית עבור כל הלקוחות שמתחברים למופע.
מידע נוסף מפורט במאמר חיפוש של שכנים קרובים משוערים (ANN).
יש מקרים שבהם חיפוש ANN חוזר לחיפוש KNN. מידע נוסף זמין במאמר בנושא בדיקת סטטוס החזרה לערך ברירת המחדל בחיפושים של ANN.
דרישות
כדי להוסיף הטמעות וקטוריות ב-Cloud SQL, צריך להפעיל אותן במופע באמצעות הדגל cloudsql_vector. מידע נוסף זמין במאמר הפעלה והשבתה של הטמעות וקטוריות במופע.
מגבלות
אלה המגבלות שחלות על טבלאות עם עמודת הטמעה של וקטורים:
- כל טבלה יכולה לכלול רק עמודה אחת של הטבעת וקטור.
- לכל טבלה יכול להיות רק אינדקס וקטורי אחד.
- הטמעת וקטור מוגבלת ל-16,000 ממדים.
- עמודת הטמעת וקטורים לא יכולה להיות עמודה שנוצרה.
- אין תמיכה בחלוקה למחיצות ברמת הטבלה בטבלאות עם עמודות של הטמעת וקטורים.
- לא ניתן להשתמש באינדקסים וקטוריים במפתחות ראשיים שמשתמשים בסוגי הנתונים
BIT,BINARY,VARBINARY,JSON,BLOB,TEXTאו בנתונים מרחביים. גם מפתחות ראשיים מורכבים לא יכולים לכלול אף אחד מהסוגים האלה. - אם יש אינדקס וקטורי, אי אפשר להוסיף אילוץ למפתח הראשי של טבלת הבסיס.
- כשקיים אינדקס וקטורי בטבלה, יש כמה פעולות DDL שלא ניתן לבצע. מידע נוסף זמין במאמר בנושא פעולות DDL שלא נתמכות בטבלאות עם אינדקסים של וקטורים.
ההגבלות הבאות חלות על שאילתות חיפוש וקטורי:
- אפשר להשתמש בפונקציה
approx_distanceרק ברשימהORDER BYאוSELECT. - אפשר להשתמש בפרדיקטים שכוללים את טבלת הבסיס בתנאי
WHEREבשילוב עם ביטוייapprox_distanceברשימהORDER BYאוSELECT. הערכת התנאיםWHEREמתבצעת אחרי הערכת פונקציות הווקטורapprox_distance.
שיטות מומלצות לעבודה עם אינדקסים של וקטורים
בקטע הזה מפורטות שיטות מומלצות לעבודה עם אינדקסים של וקטורים. כל עומס עבודה שונה, ולכן יכול להיות שתצטרכו לבצע התאמות בהתאם.
- אחרי פעולות DML גדולות, מומלץ לבנות מחדש את האינדקס.
- בדרך כלל, אפשר לאפשר ל-Cloud SQL לחשב את מספר העלים שבהם צריך להשתמש. אם יש לכם תרחיש לדוגמה שבו אתם רוצים לציין את מספר העלים, מומלץ להשתמש ב-100 וקטורים לפחות לכל עלה כדי לקבל את התוצאות הכי טובות.
המאמרים הבאים
- מומלץ לקרוא את הסקירה הכללית על חיפוש וקטורים ב-Cloud SQL.
- איך יוצרים הטמעות וקטוריות
- איך יוצרים אינדקסים של וקטורים
- איך מבצעים חיפושים בהטמעות וקטוריות