בדף הזה מוסבר איך להוסיף, לעדכן ולמחוק נתונים באמצעות מוטציות. מוטציה מייצגת רצף של הוספות, עדכונים ומחיקות ש-Spanner מחיל באופן אטומי על שורות וטבלאות שונות במסד נתונים. המוטציות מיועדות לכתיבת נתונים. הם לא יכולים לקרוא נתונים מהטבלאות שלכם. בפעולות עדכון רבות, המערכת צריכה לקרוא נתונים קיימים לפני שהיא מבצעת שינויים. בתרחישי השימוש האלה, צריך להשתמש בטרנזקציה עם הרשאות קריאה וכתיבה, שמאפשרת ל-Spanner לקרוא שורות ואז להחיל שינויים באותה פעולה אטומית.
אפשר לבצע שינויים באמצעות gRPC או REST, אבל בדרך כלל ניגשים לממשקי ה-API דרך ספריות הלקוח.
אם אתם צריכים לבצע כמות גדולה של כתיבות עיוורות, אבל לא נדרשת טרנזקציה אטומית, אתם יכולים לבצע שינויים בכמות גדולה בטבלאות Spanner באמצעות כתיבה באצווה. מידע נוסף מופיע במאמר שינוי נתונים באמצעות כתיבה באצווה.
הוספת שורות חדשות לטבלה
C++
כדי לכתוב נתונים, משתמשים בפונקציה InsertMutationBuilder().
Client::Commit() מוסיף שורות חדשות לטבלה. כל ההוספות בקבוצה אחת מוחלות באופן אטומי.
הקוד הזה מראה איך לכתוב את הנתונים:
C#
אפשר להוסיף נתונים באמצעות השיטה connection.CreateInsertCommand(), שיוצרת SpannerCommand חדש כדי להוסיף שורות לטבלה. השיטה
SpannerCommand.ExecuteNonQueryAsync() מוסיפה שורות חדשות לטבלה.
בדוגמת הקוד הבאה אפשר לראות איך להוסיף נתונים:
Go
אתם כותבים נתונים באמצעות Mutation. Mutation הוא מאגר לפעולות שינוי. Mutation מייצג רצף של פעולות הוספה, עדכון או מחיקה שאפשר להחיל באופן אטומי על שורות וטבלאות שונות במסד נתונים של Spanner.
משתמשים ב-Mutation.InsertOrUpdate()
כדי ליצור מוטציה של INSERT_OR_UPDATE, שמוסיפה שורה חדשה או מעדכנת את ערכי העמודות אם השורה כבר קיימת. אפשר גם להשתמש בשיטה Mutation.Insert() כדי ליצור מוטציה של INSERT, שמוסיפה שורה חדשה.
Client.Apply() מחיל מוטציות באופן אטומי על מסד נתונים.
הקוד הזה מראה איך לכתוב את הנתונים:
Java
כותבים נתונים באמצעות אובייקט Mutation. אובייקט Mutation הוא מאגר לפעולות שינוי. Mutation מייצג רצף של פעולות הוספה, עדכון ומחיקה ש-Spanner מבצע באופן אטומי בשורות ובטבלאות שונות במסד נתונים של Spanner.
השיטה newInsertBuilder() במחלקה Mutation יוצרת מוטציה INSERT, שמוסיפה שורה חדשה לטבלה. אם השורה כבר קיימת, הכתיבה נכשלת. לחלופין, אפשר להשתמש בשיטה newInsertOrUpdateBuilder כדי ליצור מוטציה מסוג INSERT_OR_UPDATE, שמעדכנת את ערכי העמודות אם השורה כבר קיימת.
השיטה write() במחלקה DatabaseClient כותבת את המוטציות. כל השינויים בחבילה אחת מוחלים באופן אטומי.
הקוד הזה מראה איך לכתוב את הנתונים:
Node.js
כותבים נתונים באמצעות אובייקט Table. השיטה
Table.insert()
מוסיפה שורות חדשות לטבלה. כל ההוספות באותו אצווה מוחלות באופן אטומי.
הקוד הזה מראה איך לכתוב את הנתונים:
PHP
כדי לכתוב נתונים, משתמשים ב-method Database::insertBatch. insertBatch מוסיף שורות חדשות לטבלה. כל ההוספות בחבילה אחת מוחלות באופן אטומי.
הקוד הזה מראה איך לכתוב את הנתונים:
Python
כותבים נתונים באמצעות אובייקט Batch. אובייקט Batch הוא קונטיינר לפעולות שינוי. מוטציה מייצגת רצף של הוספות, עדכונים או מחיקות שאפשר להחיל באופן אטומי על שורות וטבלאות שונות במסד נתונים של Spanner.
השיטה insert() במחלקה Batch משמשת להוספה של מוטציות של הוספה לקבוצה. כל השינויים בחבילה אחת מוחלים באופן אטומי.
הקוד הזה מראה איך לכתוב את הנתונים:
Ruby
כותבים נתונים באמצעות אובייקט Client. השיטה
Client#commit
יוצרת טרנזקציה ומבצעת אותה לכתיבות שמתבצעות באופן אטומי
בנקודה לוגית אחת בזמן בעמודות, בשורות ובטבלאות במסד נתונים.
הקוד הזה מראה איך לכתוב את הנתונים:
עדכון שורות בטבלה
נניח שהמכירות של Albums(1, 1) נמוכות מהצפוי. לכן, אתם רוצים להעביר 200,000 $מתקציב השיווק של Albums(2, 2) אל Albums(1, 1), אבל רק אם הסכום הזה זמין בתקציב של Albums(2, 2).
C++
אפשר להשתמש בפונקציה Transaction() כדי להפעיל טרנזקציה עבור לקוח.
הנה הקוד להרצת העסקה:
C#
ב- .NET Standard 2.0 (או .NET 4.5) ובגרסאות חדשות יותר, אפשר להשתמש ב-
TransactionScope() של .NET framework כדי להריץ טרנזקציה. בכל הגרסאות הנתמכות של .NET, אפשר ליצור עסקה על ידי הגדרת התוצאה של SpannerConnection.BeginTransactionAsync כמאפיין Transaction של SpannerCommand.
אלה שתי הדרכים להפעלת העסקה:
.NET Standard 2.0
.NET Standard 1.5
Go
משתמשים בסוג ReadWriteTransaction
כדי לבצע קבוצת פעולות בהקשר של טרנזקציה לקריאה ולכתיבה.
Client.ReadWriteTransaction()
מחזירה אובייקט ReadWriteTransaction.
בדוגמה נעשה שימוש ב-ReadWriteTransaction.ReadRow() כדי לאחזר שורה של נתונים.
בדוגמה נעשה גם שימוש ב-ReadWriteTransaction.BufferWrite(), שמוסיף רשימה של שינויים לקבוצת העדכונים שיוחלו כשהטרנזקציה תאושר.
בדוגמה נעשה שימוש גם בסוג Key, שמייצג מפתח שורה בטבלה או באינדקס של Spanner.
Java
משתמשים בממשק TransactionRunner כדי לבצע גוף עבודה בהקשר של טרנזקציה לקריאה ולכתיבה. הממשק הזה
כולל את השיטה run(), שמשמשת להפעלת טרנזקציה של קריאה-כתיבה, עם ניסיונות חוזרים לפי הצורך. השיטה readWriteTransaction של המחלקה DatabaseClient מחזירה אובייקט TransactionRunner לביצוע טרנזקציה לוגית יחידה.
הקלאס TransactionRunner.TransactionCallable מכיל את ה-method run() לביצוע ניסיון יחיד של טרנזקציה. run() מקבלת אובייקט TransactionContext, שהוא הקשר של העסקה.
בדוגמה נעשה שימוש במחלקה Struct, שנוחה לאחסון התוצאות של קריאות readRow(). בדוגמה נעשה שימוש גם במחלקה Key, שמייצגת מפתח שורה בטבלה או באינדקס של Spanner.
הנה הקוד להרצת העסקה:
Node.js
משתמשים ב-Database.runTransaction() כדי להריץ טרנזקציה.
הנה הקוד להרצת העסקה:
PHP
משתמשים ב-Database::runTransaction כדי להריץ טרנזקציה.
הנה הקוד להרצת העסקה:
Python
משתמשים בשיטה run_in_transaction() של המחלקה Database כדי להריץ טרנזקציה.
הנה הקוד להרצת העסקה:
Ruby
משתמשים בשיטה transaction של המחלקה Client כדי להריץ טרנזקציה.
הנה הקוד להרצת העסקה:
מחיקת שורות בטבלה
כל ספריית לקוח מספקת כמה דרכים למחיקת שורות:
- מחיקת כל השורות בטבלה.
- מחיקת שורה אחת על ידי ציון הערכים של עמודת המפתח בשורה.
- מחיקה של קבוצת שורות על ידי יצירת טווח מפתחות.
- כדי למחוק שורות בטבלה משולבת, צריך למחוק את שורות האב, אם הטבלה המשולבת כוללת
ON DELETE CASCADEבהגדרת הסכימה שלה.
C++
מחיקת שורות באמצעות הפונקציה DeleteMutationBuilder() עבור לקוח.
הקוד הבא מראה איך למחוק את הנתונים:
C#
מוחקים שורות באמצעות השיטה connection.CreateDeleteCommand(), שיוצרת SpannerCommand חדש כדי למחוק שורות. השיטה SpannerCommand.ExecuteNonQueryAsync() מוחקת את השורות מהטבלה.
בדוגמה הזו נמחקות השורות בטבלה Singers בנפרד. השורות בטבלה Albums נמחקות כי הטבלה Albums משולבת בטבלה Singers ומוגדרת עם ON DELETE CASCADE.
Go
מחיקת שורות באמצעות Mutation. כדי ליצור מוטציה של DELETE שמוחקת שורה, משתמשים בשיטה Mutation.Delete(). שיטת Client.Apply() מחילה שינויים באופן אטומי על מסד הנתונים.
בדוגמה הזו, השורות בטבלה Albums נמחקות בנפרד, ואז כל השורות בטבלה Singers נמחקות באמצעות KeyRange.
Java
מוחקים שורות באמצעות השיטה Mutation.delete().
בדוגמה הזו אנחנו משתמשים בשיטה KeySet.all() כדי למחוק את כל השורות בטבלה Albums. אחרי מחיקת השורות בטבלה Albums, הדוגמה מוחקת את השורות בטבלה Singers בנפרד באמצעות מפתחות שנוצרו באמצעות השיטה KeySet.singleKey().
Node.js
מוחקים שורות באמצעות השיטה table.deleteRows().
בדוגמה הזו נעשה שימוש בשיטה table.deleteRows() כדי למחוק את כל השורות מהטבלה Singers. השורות בטבלה Albums נמחקות כי הטבלה Albums משולבת בטבלה Singers ומוגדרת עם ON
DELETE CASCADE.
PHP
כדי למחוק שורות, לוחצים על Database::delete() method. הדף Database::delete() method כולל דוגמה.
Python
מוחקים שורות באמצעות השיטה Batch.delete().
בדוגמה הזו, כל השורות בטבלאות Albums ו-Singers נמחקות בנפרד באמצעות אובייקט KeySet.
Ruby
מוחקים שורות באמצעות השיטה Client#delete. בדף Client#delete יש דוגמה.