בדף הזה מוסבר איך ליצור ולנהל נקודות פיצול במסד הנתונים. כדי להתכונן לעלייה צפויה בתנועה, אתם יכולים ליצור נקודות פיצול כדי לפצל מראש את מסד הנתונים. למידע נוסף על פיצול מראש, קראו את הסקירה הכללית על פיצול מראש.
לפני שמתחילים
-
כדי לקבל את ההרשאה שנדרשת ליצירה ולניהול של נקודות פיצול, צריך לבקש מהאדמין להקצות לכם את התפקיד אדמין של מסד נתונים ב-Cloud Spanner (
roles/spanner.databaseAdmin) במכונה. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.התפקיד המוגדר מראש הזה מכיל את ההרשאה
spanner.databases.addSplitPoints, שנדרשת כדי ליצור ולנהל נקודות פיצול.יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים מוגדרים מראש.
הדוגמאות של Google Cloud CLI בדף הזה מבוססות על ההנחות הבאות:
- הגדרתם את ה-CLI של gcloud לשימוש עם Spanner. אם אתם משתמשים חדשים ב-CLI של gcloud עם Spanner, קראו את המאמר יצירה של מסד נתונים ושליחת שאילתות אליו באמצעות ה-CLI של gcloud.
הגדרתם את ה-CLI של gcloud בפרויקט. לדוגמה:
gcloud config set core/project PROJECT_ID
מוודאים שבמכונה של Spanner יש מספיק צמתים כדי לתמוך בעלייה הצפויה בתנועה. מידע נוסף זמין במאמר סקירה כללית על פיצול מראש.
יצירת נקודות פיצול
אפשר ליצור נקודות פיצול באמצעות ה-CLI של gcloud או ממשקי API בארכיטקטורת REST.
gcloud
כדי ליצור נקודות פיצול באמצעות ה-CLI של gcloud, צריך ליצור קובץ שמכיל את כל הפיצולים ולספק את הנתיב בפקודה של ה-CLI של gcloud. הקובץ לא יכול לחרוג ממגבלת ה-API של 100 נקודות לכל בקשת API. מידע נוסף זמין במאמר מכסות ומגבלות.
הקובץ צריך להיות בפורמט הבא כדי לציין את נקודות הפיצול:
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
כשיוצרים את הקובץ, מחליפים את המשתנים הבאים:
- ObjectType: סוג האובייקט שרוצים להוסיף בו פיצולים. הערכים המותרים הם
TABLEו-INDEX. - ObjectName: השם של הטבלה או האינדקס במסד הנתונים.
- SplitValue1..N: ערכי המפתחות של נקודות הפיצול שבהן רוצים לבצע את הפיצולים.
- IndexSplitValue1..N: ערכי מפתח האינדקס של נקודת פיצול באינדקס.
- TableSplitValue1..N: ערכי המפתחות בטבלה של נקודת פיצול באינדקס.
כשיוצרים את ערכי נקודות הפיצול בקובץ, צריך לפעול לפי הכללים הבאים:
- ערכי מחרוזת צריכים להיות במירכאות בודדות. לדוגמה,
'splitKeyPart' - ערכים בוליאניים צריכים להיות
trueאוfalse. - ערכים מסוג הנתונים
INT64ו-NUMERICב-Spanner צריכים להיות במירכאות בודדות. לדוגמה:'123'או'99.99'. - כל שאר הערכים המספריים צריכים להיכתב בלי מירכאות בודדות. לדוגמה,
1.287. - צריך לציין את ערכי חותמת הזמן בפורמט
'2020-06-18T17:24:53Z'במירכאות בודדות. - ערכי הפיצול צריכים להיות מוקפים בסוגריים.
- סדר הערכים של המפתחות המפוצלים צריך להיות זהה לסדר של המפתח הראשי.
- אם הערך המפוצל צריך להכיל פסיק, צריך להוסיף תו בריחה (escape) לפסיק באמצעות התו `\`.
- כדי לפצל אינדקסים, אפשר לספק את מפתח האינדקס או את האינדקס כולו ואת מפתח הטבלה המלא.
- כשמציינים את נקודת הפיצול, צריך תמיד להשתמש במפתח המלא.
הקובץ הבא הוא קובץ לדוגמה שמראה איך מציינים נקודות פיצול:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey (123,'ab\,c')
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- SPLITS_FILE: הנתיב לקובץ הפיצולים.
- INSTANCE_ID: מזהה המכונה.
- DATABASE_ID: מזהה מסד הנתונים.
-
EXPIRATION_DATE:
(אופציונלי) תאריך התפוגה של הנקודות שפוצלו. מקבל חותמת זמן בפורמט
'2020-06-18T17:24:53Z'. - INITIATOR: (אופציונלי) הגורם שיזם את חלוקת הנקודות.
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
אפשר להשתמש ב-method projects.instances.databases.addSplitPoints כדי ליצור נקודות פיצול.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט.
- INSTANCE_ID: מזהה המכונה.
- DATABASE_ID: מזהה מסד הנתונים.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
תוכן בקשת JSON:
{
"split_points": [
{
"table": "T1",
"index": "T1_IDX",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
3
]
}
},
{
"key_parts": {
"values": [
10
]
}
}
]
},
{
"table": "T2",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
50
]
}
}
]
}
]
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
ספריות לקוח
המשך
Java
Node.js
Python
תרחישי שגיאה אפשריים
התרחישים הבאים יכולים לגרום לשגיאה ביצירת נקודות פיצול:
- הזנתם שם טבלה שגוי ב-index level split.
- בנקודת הפיצול ברמת הטבלה יש יותר ממפתח אחד.
- בנקודת הפיצול ברמת האינדקס יש יותר משני מפתחות.
- נקודות הפיצול מוגדרות בטבלאות או באינדקסים שלא מוגדרים בסכימה של מסד הנתונים.
- הבקשה מכילה נקודות פיצול כפולות.
מידע נוסף על מכסות ומגבלות זמין במאמר מכסות ומגבלות.
הצגת נקודות הפיצול
אתם יכולים לראות את כל נקודות הפיצול שנוצרו במסד הנתונים באמצעות מסוףGoogle Cloud או ה-CLI של gcloud:
המסוף
כדי לקבל את מספר נקודות הפיצול, שולחים שאילתה לתצוגה SPANNER_SYS.USER_SPLIT_POINTS במסוף Google Cloud :
פותחים את הדף Spanner instances.
בוחרים את השמות של המכונה של Spanner ושל מסד הנתונים שרוצים לשלוח אליו שאילתה.
לוחצים על Spanner Studio בחלונית הניווט שמימין.
מקלידים את השאילתה הבאה בשדה הטקסט:
SELECT * FROM SPANNER_SYS.USER_SPLIT_POINTSלוחצים על Run query.
מופיעה תוצאה דומה לזו:
| TABLE_NAME | INDEX_NAME | INITIATOR | SPLIT_KEY | EXPIRE_TIME |
|---|---|---|---|---|
| T | CloudAddSplitPointsAPI | T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-06T09:58:58.007201Z | |
| T | T_IDX | CloudAddSplitPointsAPI | אינדקס: T_IDX ב-T, מפתח אינדקס: (10), מפתח טבלה ראשי: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>) | 2025-03-08T07:33:23.861682Z |
| T | T_IDX | CloudAddSplitPointsAPI | אינדקס: T_IDX ב-T, מפתח אינדקס: (9091), מפתח טבלה ראשי: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a) | 2025-03-08T07:35:25.990007Z |
gcloud
מריצים את הפקודה הבאה ב-CLI של gcloud כדי לראות את נקודות הפיצול במסד הנתונים:
gcloud spanner databases splits list DATABASE_ID \
--instance INSTANCE_ID
כשמריצים את הפקודה הזו, מחליפים את המשתנים הבאים:
- INSTANCE_ID: מזהה המכונה של Spanner.
- DATABASE_ID: מזהה מסד הנתונים של Spanner.
תופיע תגובה דומה לזו:
TABLE_NAME: T
INDEX_NAME:
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: T(90,153,4,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-06T09:58:58.007201Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (10), Primary Table Key: (<begin>,<begin>,<begin>,<begin>,<begin>,<begin>,<begin>)
EXPIRE_TIME: 2025-03-08T07:33:23.861682Z
TABLE_NAME: T
INDEX_NAME: T_IDX
INITIATOR: CloudAddSplitPointsAPI
SPLIT_KEY: Index: T_IDX on T, Index Key: (9091), Primary Table Key: (4567,123,4.2,2024-04-30T17:00:00-07:00,1,2024-05-01,a)
EXPIRE_TIME: 2025-03-08T07:35:25.990007Z
איך מגדירים תאריך תפוגה לנקודת פיצול
אפשר להגדיר זמן תפוגה לכל נקודת פיצול שיוצרים. מידע נוסף זמין במאמר תפוגה של נקודת פיצול. אפשר להגדיר תפוגה לנקודות הפיצול באמצעות ה-CLI של gcloud או ממשקי ה-API בארכיטקטורת REST.
gcloud
כדי להגדיר תפוגה לנקודות פיצול באמצעות ה-CLI של gcloud, צריך ליצור קובץ שמכיל את כל הפיצולים שרוצים להגדיר להם תפוגה, ולספק את הנתיב שלו באמצעות הפרמטר splits-file בפקודה של ה-CLI של gcloud. הקובץ לא יכול לחרוג ממגבלת ה-API של 100 נקודות לכל בקשת API. מידע נוסף זמין במאמר מכסות ומגבלות.
הקובץ צריך להיות בפורמט הבא כדי לציין את נקודות הפיצול:
ObjectType ObjectName (SplitValue1, SplitValue2, ...)
ObjectType ObjectName (IndexSplitValue1, ...) TableKey (TableSplitValue1, ...)
כשיוצרים את הקובץ, מחליפים את המשתנים הבאים:
- ObjectType: סוג האובייקט של הפיצול שרוצים שתוקפו יפוג. הערכים המותרים הם
TABLEו-INDEX. - ObjectName: השם של הטבלה או האינדקס במסד הנתונים.
- SplitValue1..N: ערכי המפתחות של נקודות הפיצול שרוצים שתוקפם יפוג.
- IndexSplitValue1..N: ערכי מפתח האינדקס של נקודת פיצול באינדקס.
- TableSplitValue1..N: ערכי המפתחות בטבלה של נקודת פיצול באינדקס.
כשיוצרים את ערכי נקודות הפיצול בקובץ, צריך לפעול לפי הכללים הבאים:
- ערכי מחרוזת צריכים להיות במירכאות בודדות. לדוגמה,
'splitKeyPart' - ערכים בוליאניים יכולים להיות
trueאוfalse. - ערכים מסוג הנתונים
INT64ו-NUMERICב-Spanner צריכים להיות במירכאות בודדות. לדוגמה:'123'או'99.99'. - כל שאר הערכים המספריים צריכים להיכתב בלי מירכאות בודדות. לדוגמה,
1.287. - צריך לציין את ערכי חותמת הזמן בפורמט
'2020-06-18T17:24:53Z'במירכאות בודדות. - ערכי הפיצול צריכים להיות מוקפים בסוגריים.
- סדר הערכים של המפתחות המפוצלים צריך להיות זהה לסדר של המפתח הראשי.
- אם הערך המפוצל צריך להכיל פסיק, צריך להוסיף תו בריחה (escape) לפסיק באמצעות התו `\`.
- כדי לפצל אינדקסים, אפשר לספק את מפתח האינדקס או את האינדקס כולו ואת מפתח הטבלה המלא.
- כשמציינים את נקודת הפיצול, צריך תמיד להשתמש במפתח המלא.
הקובץ הבא הוא קובץ לדוגמה שמראה איך מציינים נקודות פיצול:
TABLE Singers ('c32ca57a-786c-2268-09d4-95182a9930be')
TABLE Singers ('bb98c7e2-8240-b780-346d-c5d63886594a')
INDEX Order ('5b8bac71-0cb2-95e9-e1b0-89a027525460')
TABLE Payment ('6cf41f21-2d77-318f-c504-816f0068db8b')
INDEX Indx_A (2152120141932780000)
TABLE TableD (0,'7ef9db22-d0e5-6041-8937-4bc6a7ef9db2')
INDEX IndexXYZ ('8762203435012030000',NULL,NULL)
INDEX IndexABC (0, '2020-06-18T17:24:53Z', '2020-06-18T17:24:53Z') TableKey (123,'ab\,c')
לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:
- SPLITS_FILE: הנתיב לקובץ הפיצולים.
- INSTANCE_ID: מזהה המכונה.
- DATABASE_ID: מזהה מסד הנתונים.
-
EXPIRATION_DATE:
(אופציונלי) תאריך התפוגה של הנקודות שפוצלו. מקבל חותמת זמן בפורמט
'2020-06-18T17:24:53Z'. - INITIATOR: (אופציונלי) הגורם שיזם את חלוקת הנקודות.
מריצים את הפקודה הבאה:
Linux, macOS או Cloud Shell
gcloud spanner databases splits add DATABASE_ID \ --splits-file=SPLITS_FILE \ --instance=INSTANCE_ID \ --split-expiration-date=EXPIRATION_DATE \ --initiator=INITIATOR
Windows (PowerShell)
gcloud spanner databases splits add DATABASE_ID ` --splits-file=SPLITS_FILE ` --instance=INSTANCE_ID ` --split-expiration-date=EXPIRATION_DATE ` --initiator=INITIATOR
Windows (cmd.exe)
gcloud spanner databases splits add DATABASE_ID ^ --splits-file=SPLITS_FILE ^ --instance=INSTANCE_ID ^ --split-expiration-date=EXPIRATION_DATE ^ --initiator=INITIATOR
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט.
- INSTANCE_ID: מזהה המכונה.
- DATABASE_ID: מזהה מסד הנתונים.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://spanner.googleapis.com/v1/projects//instances/ /databases/ :addSplitPoints
תוכן בקשת JSON:
{
"split_points": [
{
"table": "T1",
"index": "T1_IDX",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
3
]
}
},
{
"key_parts": {
"values": [
10
]
}
}
]
},
{
"table": "T2",
"expire_time": "2023-04-22T10:00:20.021Z",
"keys": [
{
"key_parts": {
"values": [
50
]
}
}
]
}
]
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.