יצירה וניהול של מיקומי נתונים

בדף הזה מוסבר איך ליצור ולנהל מיקומי נתונים ב-Spanner.

מידע נוסף על אופן הפעולה של חלוקה גיאוגרפית למחיצות זמין במאמר סקירה כללית על חלוקה גיאוגרפית למחיצות.

ניהול מטא-נתונים של ניתוב

כשהאפליקציה צריכה לקרוא או לכתוב נתונים, Spanner משתמש במטא-נתונים של ניתוב כדי למצוא את השרתים שמכילים את השורות הספציפיות שנדרשות.

הבחירה של המיקום שבו יאוחסנו מטא-נתונים של ניתוב תלויה בשאלה אם רוב הבקשות של הלקוח הן לנתונים שנמצאים באותו אזור או מחוץ לאזור, ובשאלה אם אתם משתמשים בהגדרה של כמה אזורים. ההגדרות של מטא-נתונים לניתוב משפיעות על זמן האחזור, ואי אפשר לשנות אותן אחרי שיוצרים מיקומי מודעות.

האפשרות per_placement_routing_metadata קובעת איפה יאוחסנו מטא-נתונים של ניתוב, בהתאם להגדרות הבאות:

  • TRUE: אם הערך הוא TRUE, מטא-נתוני הניתוב נמצאים באותו מחיצת מופע כמו הנתונים. מטא-נתוני הניתוב מחולקים לפי אזור. הדבר מקטין את זמן האחזור של בקשות לנתונים באזור (כלומר, הלקוח ונתוני המשתמש המבוקשים נמצאים באותו אזור), כך ש-Spanner לא צריך לבצע קריאות מחוץ לאזור כדי לנתב מטא-נתונים. עם זאת, ההגדרה הזו עלולה להגדיל את זמן האחזור של בקשות מחוץ לאזור, של חיפושים שליליים שבהם לא קיימות שורות מיקום ושל שאילתות שדורשות אינדקס גלובלי.

    מומלץ להשתמש בהגדרה הזו אם אתם מצפים שרוב הבקשות יתייחסו לנתוני משתמשים באותו אזור כמו הלקוח, ולמחיצה שמוגדרת כברירת מחדל אין אזורים עם הרשאות קריאה וכתיבה או קריאה בלבד שנמצאים באותו מיקום עם כל מחיצות המופעים.

  • FALSE: המטא-נתונים של הניתוב מרוכזים במחיצה שמוגדרת כברירת מחדל.

    מומלץ להשתמש בהגדרה הזו אם אתם מצפים שלקוחות יחפשו לעיתים קרובות נתונים מחוץ לאזור; לדוגמה, לקוח באזור האיחוד האירופי שמחפש נתונים של משתמשים בארה"ב.

    כדאי לשקול את ההגדרה הזו גם אם מחיצת ברירת המחדל של המכונה משתמשת בהגדרה של מספר אזורים, שמספקת אזורים לקריאה ולכתיבה או לקריאה בלבד, שנמצאים באותו מיקום עם כל מחיצות המכונה. בהגדרה הזו, עותק של המטא-נתונים המלאים של הניתוב מאוחסן בכל עותק של מחיצת מופע ברירת המחדל. לכן, בכל האזורים עם מחיצות של מופעים יש עותק של מטא-נתוני הניתוב. כך אפשר לבצע בדיקה של מטא-נתוני הניתוב באופן מקומי גם לבקשות בתוך האזור וגם לבקשות מחוץ לאזור.

הגדרת האפשרות per_placement_routing_metadata

כדי להגדיר את per_placement_routing_metadata במסוף Google Cloud , צריך לעדכן את האפשרות הזו בסכימת מסד הנתונים. מידע על עדכון סכימה זמין במאמר ביצוע עדכונים בסכימה.

האפשרות per_placement_routing_metadata מקבלת ערכים בוליאניים. אם האפשרות הזו היא TRUE, המטא-נתונים של הניתוב נמצאים באותו מחיצת מופע כמו הנתונים. אם FALSE, המטא-נתונים של הניתוב נמצאים במחיצת ברירת המחדל של המופע.

בדוגמה הבאה מוצגת פקודת GoogleSQL ALTER DATABASE להגדרת האפשרות הזו:

ALTER DATABASE DATABASE_NAME SET OPTIONS ( per_placement_routing_metadata = METADATA_BOOLEAN)

מחליפים את מה שכתוב בשדות הבאים:

  • DATABASE_NAME: השם של מסד הנתונים.
  • METADATA_BOOLEAN: הערך של per_placement_routing_metadata. אם TRUE, אז מטא-נתוני הניתוב נמצאים באותו מחיצת מופע כמו הנתונים. אם FALSE, המטא-נתונים של הניתוב נמצאים במחיצת ברירת המחדל של המופע.

יצירת מיקום נתונים

אחרי שיוצרים מחיצות של מכונת Spanner ומסדי נתונים ומגדירים את האפשרות per_placement_routing_metadata, יוצרים את המיקום.

המסוף

  1. נכנסים לדף Instances במסוף Google Cloud .

    מכונות

  2. בוחרים את המכונה עם מחיצות המכונה שנוצרו על ידי המשתמשים.

  3. בוחרים את מסד הנתונים שרוצים לחלק את הנתונים שלו.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.

  6. מזינים את הצהרת ה-DDL‏ CREATE PLACEMENT (GoogleSQL, ‏ PostgreSQL) .

    לדוגמה, אפשר להריץ את הפקודה הבאה כדי ליצור טבלת מיקומים europeplacement במחיצת המופע europe-partition:

    GoogleSQL

    CREATE PLACEMENT europeplacement OPTIONS (instance_partition="europe-partition");
    

    PostgreSQL

    CREATE PLACEMENT europeplacement WITH (instance_partition='europe-partition');
    

    אופציונלי: אפשר גם להשתמש בחלונית Object Explorer כדי להציג, לחפש ולבצע פעולות באובייקטים של מיקומי המודעות. מידע נוסף מופיע במאמר עיון בנתונים.

  7. לוחצים על Run.

gcloud

כדי ליצור מיקום באמצעות פקודת Google Cloud CLI, משתמשים בפקודה gcloud spanner databases ddl update.

לדוגמה, יצירת מיקום במחיצת המופע europe-partition:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT europeplacement OPTIONS (instance_partition='europe-partition')"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT europeplacement WITH (instance_partition='europe-partition')"

הגדרת מנהיג ברירת מחדל למיקום

אפשר להגדיר את אזור ברירת המחדל של מיקום מודעה אם המיקום שלו נמצא באזור רב-אזורי. האזור הראשי החדש חייב להיות אחד משני האזורים עם הרשאות קריאה וכתיבה במיקום של האזור הגיאוגרפי הנרחב. מידע נוסף מופיע בטבלאות של תצורות זמינות של כמה אזורים.

אם לא מגדירים אזור מוביל, המיקום שלכם משתמש באזור המוביל שמוגדר כברירת מחדל לפי המיקום שלו. בטבלאות ההגדרות הזמינות של מספר אזורים מופיעה רשימה של האזור הראשי לכל מיקום של מספר אזורים. אזור ברירת המחדל לניהול מנהיגות מסומן באות L. לדוגמה, אזור ברירת המחדל של nam8 הוא לוס אנג'לס(us-west2). בהוראות הבאות מוסבר איך להגדיר אותו לאורגון(us-west1).

המסוף

  1. נכנסים לדף Instances במסוף Google Cloud .

    מכונות

  2. בוחרים את המכונה עם מחיצות המכונה שנוצרו על ידי המשתמשים.

  3. בוחרים את מסד הנתונים שרוצים לחלק את הנתונים שלו.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.

  6. מזינים את הצהרת ה-DDL‏ CREATE PLACEMENT (GoogleSQL, ‏ PostgreSQL) .

    לדוגמה, אפשר להריץ את הפקודה הבאה כדי ליצור טבלת מיקום nam8placement במחיצת המופע nam8-partition עם מיקום ברירת המחדל של הלידר שמוגדר כ-us-west1:

    GoogleSQL

    CREATE PLACEMENT `nam8placement`
      OPTIONS (instance_partition="nam8-partition", default_leader="us-west1");
    

    PostgreSQL

    CREATE PLACEMENT nam8placement WITH (instance_partition='nam8-partition', default_leader='us-west1');
    

    אופציונלי: אפשר גם להשתמש בחלונית Object Explorer כדי להציג, לחפש ולבצע פעולות באובייקטים של מיקומי המודעות. מידע נוסף מופיע במאמר עיון בנתונים.

  7. לוחצים על Run.

gcloud

כדי ליצור מיקום באמצעות פקודת ה-CLI של gcloud, משתמשים בפקודה gcloud spanner databases ddl update.

לדוגמה, כדי ליצור טבלת מיקום nam8placement במחיצת המכונה nam8-partition עם מיקום ברירת המחדל של הלידר שמוגדר כ-us-west1:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT nam8placement \
     OPTIONS (instance_partition='nam8-partition', default_leader='us-west1')"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE PLACEMENT nam8placement WITH (instance_partition='nam8-partition', default_leader='us-west1')"

הוספת מיקום להצגת נתונים

לפני שמסירים מיקום מודעה, צריך להסיר ממנו את כל נתוני השורות. אחרי שמבצעים את הפעולה הזו, אפשר להשתמש במסוף Google Cloud או ב-CLI של gcloud כדי להסיר את המיקום.

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. מזינים את הצהרת ה-DDL‏ DROP PLACEMENT(GoogleSQL,‏ PostgreSQL).

    לדוגמה, אפשר להריץ את הפקודה הבאה כדי להסיר את טבלת המיקומים europeplacement:

    GoogleSQL

    DROP PLACEMENT europeplacement;
    

    PostgreSQL

    DROP PLACEMENT europeplacement;
    

gcloud

כדי להסיר מיקום באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud spanner databases ddl update.

לדוגמה, מיקום של טיפה europeplacement:

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="DROP PLACEMENT europeplacement"

שגיאות בהצבת טיפות

אם מיקום המודעה נמצא בשימוש, הפעולה DROP PLACEMENT נכשלת ומוצגת הודעת שגיאה כמו: "Statement failed: Placement PLACEMENT_NAME can't be dropped because it is in use by placement table PLACEMENT_TABLE_NAME.". אם השגיאה הזו מופיעה, צריך לבצע את השלבים הבאים:

  1. משנים את האפליקציה כדי להפסיק להוסיף או לעדכן שורות עם מיקום המודעה שרוצים להסיר.
  2. אחת מהאפשרויות הבאות:

    • מעבירים שורות קיימות של מיקומי מודעות שמשתמשות במיקום המודעה שרוצים למחוק למיקום מודעה אחר באמצעות הצהרת DML עם חלוקה למחיצות כמו זו שבהמשך:

      UPDATE PLACEMENT_TABLE_NAME SET LOCATION = NEW_PLACEMENT_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      
    • מוחקים את השורות של מיקום המודעה באמצעות פקודת DML מחולקת למחיצות, כמו הפקודה הבאה:

      DELETE FROM PLACEMENT_TABLE_NAME
      WHERE LOCATION = ORIGINAL_PLACEMENT_NAME;
      

      פקודות ה-DML הקודמות שספציפיות למיקום המודעה פועלות רק עם DML מחולק. הן ייכשלו כפקודות DML רגילות. מידע נוסף מופיע בקטע מגבלות. אפשר גם להשתמש ב-Mutation API כדי להעביר או להשמיט שורות של מיקומי מודעות.

ביטול פעולה של DROP PLACEMENT

אפשר לבטל פעולת DROP PLACEMENT בכל שלב לפני שהפעולה ארוכת הטווח מוחקת לחלוטין את מיקום המודעה מסכימת מסד הנתונים. במאמר ניהול פעולות ממושכות ומעקב אחריהן מוסבר איך מקבלים את מזהה הפעולה הממושכת כדי לבדוק את הסטטוס או לבטל את הפעולה.

יצירת טבלה עם מפתח מיקום

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. מזינים את הצהרת ה-DDL‏ CREATE TABLE (GoogleSQL,‏ PostgreSQL).

    לדוגמה, אפשר ליצור טבלה Singers שמשתמשת במפתח מיקום כדי לחלק את נתוני הזמרים:

    GoogleSQL

    CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      SingerName STRING(MAX) NOT NULL,
      ...
      Location STRING(MAX) NOT NULL PLACEMENT KEY
    ) PRIMARY KEY (SingerId);
    

    PostgreSQL

    CREATE TABLE Singers (
      SingerId bigint PRIMARY KEY,
      SingerName varchar(1024),
      ...
      Location varchar(1024) NOT NULL PLACEMENT KEY
    );
    

gcloud

כדי ליצור טבלה, משתמשים בפקודה gcloud spanner databases ddl update.

לדוגמה, אפשר ליצור טבלה Singers שמשתמשת במפתח מיקום כדי לחלק את נתוני הזמרים:

GoogleSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE TABLE Singers ( SingerId INT64 NOT NULL, SingerName STRING(MAX) NOT NULL, Location STRING(MAX) NOT NULL PLACEMENT KEY ) PRIMARY KEY (SingerId);"

PostgreSQL

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="CREATE TABLE Singers ( SingerId bigint PRIMARY KEY, SingerName varchar(1024), Location varchar(1024) NOT NULL PLACEMENT KEY );"

עריכת טבלה באמצעות מפתח מיקום

אי אפשר להסיר מפתח מיקום מטבלה. בנוסף, אי אפשר להוסיף מפתח מיקום מודעה לטבלה אחרי שהיא נוצרה. עם זאת, אפשר להשתמש בהצהרת DDL‏ ALTER TABLE (GoogleSQL,‏ PostgreSQL) כדי לשנות שדות אחרים בטבלה, למשל, על ידי הוספה והסרה של עמודות מפתח שאינן עמודות מיקום.

מחיקת טבלה עם מפתח מיקום

לפני שמוחקים טבלה עם מפתח מיקום, צריך קודם:

  1. מחיקת כל השורות בטבלת המיקומים.
  2. ממתינים עד שהבדיקה של מסד הנתונים תסתיים בהצלחה.version_retention_period מידע נוסף זמין במאמר בנושא שחזור מערכת מנקודה מסוימת בזמן (PITR). לאחר מכן, פועלים לפי השלבים הבאים:

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. מזינים את הצהרת ה-DDL‏ DROP TABLE (GoogleSQL,‏ PostgreSQL).

    לדוגמה, כדי להשליך את הטבלה Singers:

    DROP TABLE Singers;
    

gcloud

כדי להפיל טבלה, משתמשים ב-gcloud spanner databases ddl update.

לדוגמה, כדי להשליך את הטבלה Singers:

gcloud spanner databases ddl update example-db \
  --instance=test-instance \
  --ddl="DROP TABLE Singers"

הוספת שורה לטבלת מיקומים

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. מזינים את הצהרת ה-DDL‏ INSERT INTO (GoogleSQL,‏ PostgreSQL).

    לדוגמה, מוסיפים את הזמר מארק ריצ'רדס לטבלה Singers ומחלקים אותה למחיצות ב-europeplacement:

    INSERT INTO Singers(SingerId, SingerName, Location)
    VALUES (1, 'Marc Richards', 'europeplacement')
    

gcloud

כדי לכתוב נתונים לטבלה, משתמשים ב-gcloud spanner rows insert.

לדוגמה, מוסיפים את הזמר מארק ריצ'רדס לטבלה Singers ומחלקים אותה למחיצות ב-europeplacement:

gcloud spanner rows insert --table=Singers --database=example-db \
  --instance=test-instance --data=SingerId=1,SingerName='Marc Richards',Location='europeplacement'

עדכון שורה בטבלת מיקומים

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. כדי לעדכן נתונים בטבלת מיקומי מודעות, משתמשים ב-DML או במוטציות.

    לדוגמה, כדי לעדכן את השם singerid=1 בטבלה Singers ל-Catalina Smith:

    UPDATE Singers s
    SET s.name='Catalina Smith'
    WHERE s.id=1;
    

gcloud

כדי לעדכן נתונים בטבלת מיקומים, משתמשים ב-gcloud spanner rows update.

לדוגמה, כדי לעדכן את השם singerid=1 בטבלה Singers ל-Catalina Smith:

gcloud spanner rows update --table=Singers --database=example-db \
  --instance=test-instance --data=SingerId=1,SingerName='Catalina Smith'

העברת שורה בטבלת מיקומים

המסוף

  1. אם עדיין לא עשיתם זאת, צרו מחיצה חדשה של מופע ומיקום.
  2. בתפריט הניווט, לוחצים על Spanner Studio.
  3. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  4. כדי להעביר נתונים למחיצת המופע החדשה, משתמשים ב-DML או בשינויים.

    לדוגמה, מעבירים את singerid=1 בטבלה Singers אל asiaplacement:

    UPDATE Singers s
    SET s.location='asiaplacement'
    WHERE s.id=1;
    

gcloud

אחרי שיוצרים את מחיצת המופע ואת המיקום שאליו רוצים להעביר את הנתונים, משתמשים ב-gcloud spanner rows update.

לדוגמה, מעבירים את singerid=1 בטבלה Singers אל asiaplacement:

gcloud spanner rows update --table=Singers --database=example-db \
  --instance=test-instance --data=SingerId=1,Location='asiaplacement'

מחיקת שורה בטבלת מיקומים

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. כדי למחוק נתונים, משתמשים ב-DML או בשינויים.

    לדוגמה, כדי למחוק את singerid=1 בטבלה Singers:

    DELETE FROM Singers s
    WHERE s.id=1;
    

gcloud

כדי למחוק נתונים, משתמשים בסמל gcloud spanner rows delete.

לדוגמה, כדי למחוק את singerid=1 בטבלה Singers:

gcloud spanner rows delete --table=Singers --database=example-db \
  --instance=test-instance --keys=1

שליחת שאילתות לנתונים בטבלת מיקומי מודעות

המסוף

  1. בתפריט הניווט, לוחצים על Spanner Studio.
  2. בדף Spanner Studio, לוחצים על New tab או משתמשים בכרטיסיית העריכה הריקה.
  3. מריצים את השאילתה.

    לדוגמה, אפשר להריץ שאילתה בטבלה Singers:

    SELECT * FROM Singers s WHERE s.SingerId=1;
    

gcloud

כדי להריץ שאילתות על נתונים, משתמשים ב-gcloud spanner databases execute-sql.

לדוגמה, אפשר להריץ שאילתה בטבלה Singers:

gcloud spanner databases execute-sql example-db \
  --instance=test-instance \
  --sql='SELECT * FROM Singers s WHERE s.SingerId=1'

המאמרים הבאים