בדף הזה מוסבר איך מתבצעות חיפושי וקטורים במופעי Cloud SQL ל-MySQL. בעזרת Cloud SQL אפשר לאחסן הטבעות וקטוריות, ליצור אינדקסים וקטוריים ולבצע חיפושים וקטוריים בשילוב עם נתונים מאוחסנים אחרים.
אחסון הטמעת וקטורים
הטמעות וקטוריות מאוחסנות בטבלה שעומדת בדרישות של מאפייני אטומיות, עקביות, בידוד ועמידות (ACID). כמו נתונים יחסיים אחרים בטבלה, אפשר לגשת להטמעות וקטוריות בטבלה באמצעות סמנטיקה טרנזקציונלית קיימת.
כדי ליצור מיפוי בין שורות בטבלה לבין ייצוגים וקטוריים, צריך ליצור עמודה בטבלה לאחסון הטמעות וקטוריות. העמודה צריכה להשתמש בסוג הנתונים VECTOR. בעמודה של הטמעת וקטורים אפשר לאחסן רק הטמעות וקטורים שמשתמשות בדיוק באותם מאפיינים שאתם מציינים כשאתם מגדירים את העמודה. אין הגבלות על מספר השורות בטבלה שבה מאחסנים את הטמעות הווקטורים.
אם יש לכם מספיק נפח אחסון וזיכרון שזמינים במופע 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 שלא נתמכות בטבלאות עם אינדקסים של וקטורים
הפעולות הבאות בשפת הגדרת נתונים (DDL) לא נתמכות בטבלאות עם אינדקסים של וקטורים.
- שינוי פעולות בטבלה שדורשות את אלגוריתם ההעתקה
- שינוי פעולות בטבלה שמחייבות בנייה מחדש של הטבלה
- הסרה או שינוי של המפתח הראשי
- העברת הטבלה למרחב טבלאות כללי
חיפוש וקטורי
Cloud SQL מספק פונקציות של מרחק וקטורי שבהן אפשר להשתמש כדי לבצע חיפושים של דמיון וקטורי של שכנים קרובים משוערים (ANN) ושכנים קרובים K (KNN) במופע. כשמריצים שאילתה, הווקטור של השאילתה מושווה לווקטורים במערך הנתונים. פונקציות המרחק מחשבות את המרחק בין הווקטורים באמצעות מדד דמיון כמו קוסינוס. הווקטורים עם המרחק הקצר ביותר ביניהם הם הדומים ביותר ומוחזרים בתוצאות החיפוש.
Cloud SQL משתמש בפונקציות הבאות כדי למדוד את המרחק בין וקטורים בחיפושי וקטורים כשמבצעים חיפושי וקטורים של ANN ו-KNN:
- Cosine: מחשב את הקוסינוס של הזווית בין שני וקטורים. ערך קטן יותר מצביע על דמיון רב יותר בין הווקטורים.
- מכפלה סקלרית: חישוב הקוסינוס של הזווית כפול מכפלת הגדלים של הווקטורים התואמים.
- L2 squared distance: מחשבת את המרחק האוקלידי בין שני וקטורים על ידי הוספת המרחק בריבוע בכל מימד.
חיפוש KNN
חיפוש וקטורי של KNN הוא שיטת החיפוש המועדפת כשצריך תוצאות מדויקות או כשרוצים להוסיף סינון סלקטיבי. חיפוש KNN מבצע חישוב מרחק של וקטור השאילתה עם כל הטמעה בקבוצת הנתונים כדי למצוא את השכן הקרוב ביותר. חיפושי KNN ב-Cloud SQL מספקים היזכרות מושלמת. חיפושי KNN לא משתמשים באינדקס וקטורי, ולכן הם אפשרות טובה כשעובדים עם מערכי נתונים קטנים יותר.
כדי לבצע חיפוש KNN, משתמשים בפונקציה vector_distance שמקבלת שני וקטורים כקלט: וקטור השאילתה (מה שמחפשים) ווקטור מועמד ממערך הנתונים. הפונקציה מחשבת את המרחק בין שני הווקטורים האלה.
משתמשים ב-vector_distance בהצהרת SELECT. מידע נוסף זמין במאמר בנושא חיפוש של השכנים הקרובים ביותר (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. מידע נוסף זמין במאמר בנושא בדיקת סטטוס החזרה לערך ברירת המחדל בחיפושים של רשת AdSense לרכיבי תוכן.
הבדלים בתמיכה בווקטורים בגרסאות של Cloud SQL ל-MySQL
ב-Cloud SQL ל-MySQL נוספה תמיכה בחיפוש וקטורים בגרסה 8.0.36 ואילך. החל מגרסה 9.7 של Cloud SQL ל-MySQL, Cloud SQL שינה יכולות ספציפיות של חיפוש וקטורים כדי לשפר את השילוב עם תמיכה בווקטורים ופונקציות אחסון שפותחו על ידי הקהילה, שהוצגו ב-MySQL 9.0 שפותח על ידי הקהילה.
בטבלה הבאה מוצגת השוואה בין גרסאות של Cloud SQL ל-MySQL, שממחישה איך ההבדלים בין הגרסאות יכולים להשפיע על השימוש בחיפוש וקטורי ב-Cloud ל-MySQL.
| אזור תמיכה | Cloud SQL ל-MySQL 8.4 וגרסאות קודמות | Cloud SQL ל-MySQL מגרסה 9.7 ואילך |
|---|---|---|
| הפעלת וקטורים | כדי להוסיף הטמעות וקטורים למסד הנתונים של MySQL ולהשתמש בחיפוש וקטורים, צריך להגדיר את הדגל cloudsql_vector לערך on במופע Cloud SQL.
|
אם רוצים ליצור אינדקסים של וקטורים ולבצע חיפוש ANN, צריך להגדיר את הדגל cloudsql_vector
לערך on. |
| עמודות של הטמעת וקטורים בטבלה | בטבלה יכולה להיות רק עמודה אחת של הטמעת וקטורים. | אם יוצרים אינדקס בטבלה, אפשר להוסיף לטבלה רק עמודה אחת של הטבעת וקטורים. אם לא יוצרים אינדקס בטבלה, יכולות להיות בטבלה כמה עמודות של הטמעת וקטורים. |
שימוש ב-COMMENT וב-CONSTRAINT כדי לזהות עמודות של הטמעת וקטורים
|
כדי להבדיל בין עמודת הטמעת הווקטור לבין עמודות אחרות, Cloud SQL מוסיף לעמודה את ההערה המיוחדת COMMENT ואת הכלל CONSTRAINT.
האילוץ נדרש לאימות הקלט, וההערה של עמודת הטמעת הווקטור גלויה כהערה. אי אפשר לשנות או למחוק את התגובה או את ההגבלה.
|
ההערה COMMENT והכלל CONSTRAINT לא משמשים יותר לזיהוי עמודות של הטמעות וקטורים ב-Cloud SQL ל-MySQL 9.7.
|
| מגבלת המאפיינים | הטמעה וקטורית מוגבלת ל-16,000 ממדים ללא ברירת מחדל. | הטמעת וקטור מוגבלת ל-16,383 ממדים, וכברירת מחדל היא מוגדרת ל-2,048. |
| פורמט אחסון וקטורים |
פורמט VARBINARY
|
פורמט אחסון מבוסס-קהילה |
| תחביר להצהרה על סוג הנתונים vector |
VECTOR(VECTOR_DIMENSIONS)
|
VECTOR(VECTOR_DIMENSIONS)
|
| הבדלים בפונקציות של המרות | הפלט של הפונקציה vector_to_string מודפס כערך כולו.
|
הפלט של הפונקציה vector_to_string מוצג בסימון מדעי, שהוא התקן המקובל בקהילה.
|
מגבלות
המגבלות הבאות חלות על כל הגרסאות של Cloud SQL שתומכות בווקטורים:
- לכל טבלה יכול להיות רק אינדקס וקטורי אחד.
- עמודת הטמעת וקטורים לא יכולה להיות עמודה שנוצרה.
- אין תמיכה בחלוקה למחיצות ברמת הטבלה בטבלאות עם עמודות של הטבעת וקטורים.
- לא ניתן להשתמש באינדקסים וקטוריים במפתחות ראשיים שמשתמשים בסוגי הנתונים
BIT,BINARY,VARBINARY,JSON,BLOB,TEXTאו בנתונים מרחביים. מפתחות ראשיים מורכבים גם לא יכולים לכלול אף אחד מהסוגים האלה. - אם יש אינדקס וקטורי, אי אפשר להוסיף אילוץ למפתח הראשי של מסד נתונים טבלאי.
- כשאינדקס וקטורי קיים בטבלה, יש פעולות DDL שלא ניתן לבצע. מידע נוסף זמין במאמר בנושא פעולות DDL שלא נתמכות בטבלאות עם אינדקסים של וקטורים.
ההגבלות הבאות רלוונטיות לשאילתות חיפוש וקטורי:
- אפשר להשתמש בפונקציה
approx_distanceרק ברשימהORDER BYאוSELECT. - אפשר להשתמש בפרדיקטים שכוללים את מסד נתונים טבלאי בתנאי
WHEREבשילוב עם ביטוייapprox_distanceברשימהORDER BYאוSELECT. הערכת התנאיםWHEREמתבצעת אחרי הערכת פונקציות הווקטורapprox_distance.
המאמרים הבאים
- מומלץ לקרוא את הסקירה הכללית על חיפוש וקטורים ב-Cloud SQL.
- איך יוצרים הטמעות וקטוריות
- איך יוצרים אינדקסים של וקטורים
- איך מבצעים חיפושים בהטמעות וקטוריות