יצירה וניהול של פידים לשינויים

בדף הזה מוסבר איך ליצור, לשנות ולהציג נתוני שינויים ב-Spanner עבור מסדי נתונים עם ניב GoogleSQL ומסדי נתונים עם ניב PostgreSQL. מידע נוסף על סנכרון שינויים בזרמי נתונים זמין במאמר מידע על סנכרון שינויים בזרמי נתונים.

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

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

יצירת שידור של שינויים

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

GoogleSQL

תחביר ה-DDL ליצירת שינוי בזרם באמצעות GoogleSQL נראה כך:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    OPTIONS (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

PostgreSQL

התחביר של DDL ליצירת זרם שינויים באמצעות PostgreSQL נראה כך:

CREATE CHANGE STREAM CHANGE_STREAM_NAME
  [FOR column_or_table_watching_definition[, ... ] ]
  [
    WITH (
      retention_period = timespan,
      value_capture_type = type,
      exclude_ttl_deletes = boolean,
      exclude_insert = boolean,
      exclude_update = boolean,
      exclude_delete = boolean,
      allow_txn_exclusion = boolean
    )
  ]

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

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

צפייה במסד נתונים שלם

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

CREATE CHANGE STREAM EverythingStream
FOR ALL;

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

צפייה בטבלאות ספציפיות

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

CREATE CHANGE STREAM SingerAlbumStream
FOR Singers, Albums;

‫Spanner מעדכן באופן אוטומטי את ה-change streams שעוקבים אחרי טבלאות שלמות, כדי לשקף שינויים בסכימה שמשפיעים על הטבלאות האלה, כמו עמודות שנוספו או הוסרו.

מעקב אחרי עמודות ספציפיות

משתמשים בתחביר table(column_1[, column_2, ...]) כדי לעקוב אחרי שינויים בעמודה ספציפית אחת או יותר, שאינן עמודות מפתח, בטבלאות שאתם מציינים:

CREATE CHANGE STREAM NamesAndTitles
FOR Singers(FirstName, LastName), Albums(Title);

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

צפייה בטבלאות ובעמודות בשידור אחד

אפשר לשלב בין התחביר של מעקב אחרי טבלה ומעקב אחרי עמודה משתי הדוגמאות הקודמות בזרם שינויים יחיד:

CREATE CHANGE STREAM NamesAndAlbums
FOR Singers(FirstName, LastName), Albums;

הגדרת תקופת שמירה ארוכה יותר

כדי לציין תקופה לשמירת נתונים בזרם שינויים ארוכה יותר מברירת המחדל של שבעה ימים, צריך להגדיר את retention_period לתקופה של עד שלושים ימים, בפורמט של שעות (h) או ימים (d).

שתי דוגמאות:

GoogleSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
OPTIONS ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
OPTIONS ( retention_period = '7d' );

PostgreSQL

CREATE CHANGE STREAM LongerDataRetention
FOR ALL
WITH ( retention_period = '36h' );
CREATE CHANGE STREAM MaximumDataRetention
FOR ALL
WITH ( retention_period = '7d' );

ציון סוג אחר של לכידת ערכים

כדי לציין סוג לכידת ערך של נתוני שינוי שאינו OLD_AND_NEW_VALUES, צריך להגדיר את value_capture_type לערך NEW_VALUES או NEW_ROW, כמו בדוגמאות הבאות:

GoogleSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

CREATE CHANGE STREAM NewRowChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_ROW' );
CREATE CHANGE STREAM NewValuesChangeStream
FOR ALL
WITH ( value_capture_type = 'NEW_VALUES' );

מחיקות שמבוססות על TTL של מסננים

אפשר לסנן מחיקות שמבוססות על TTL מהיקף השינויים באמצעות המסנן exclude_ttl_deletes.

מידע נוסף על אופן הפעולה של המסנן הזה זמין במאמר בנושא מסנן מחיקות שמבוסס על זמן החיים (TTL).

GoogleSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (exclude_ttl_deletes = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של שינויים

בדוגמה הבאה נוצר פיד שינויים בשם NewFilterChangeStream שמוציא מכלל אפשרות את כל המחיקות שמבוססות על TTL:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_ttl_deletes = true)

PostgreSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (exclude_ttl_deletes = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של השינויים

בדוגמה הבאה נוצר פיד שינויים בשם NewFilterChangeStream שמוציא מכלל אפשרות את כל המחיקות שמבוססות על TTL:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_ttl_deletes = true)

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

סינון לפי סוג השינוי בטבלה

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

  • exclude_insert: לא לכלול את כל השינויים בטבלה INSERT
  • exclude_update: לא לכלול את כל השינויים בטבלה UPDATE
  • exclude_delete: אי הכללה של כל השינויים בטבלה DELETE

מידע נוסף על אופן הפעולה של המסננים האלה זמין במאמר בנושא מסננים של סוגי שינויים בטבלה.

GoogleSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (MOD_TYPE_FILTER_NAME = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של שינויים
  • MOD_TYPE_FILTER_NAME: הפילטר שרוצים להוסיף: exclude_insert,‏ exclude_update או exclude_delete. אם מוסיפים יותר ממסנן אחד בכל פעם, צריך להפריד ביניהם באמצעות פסיק.

בדוגמה הבאה נוצר עדכון נתונים בשם NewFilterChangeStream שלא כולל את סוגי השינויים בטבלה INSERT ו-UPDATE:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
OPTIONS (exclude_insert = true, exclude_update = true)

PostgreSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (MOD_TYPE_FILTER_NAME = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של שינויים
  • MOD_TYPE_FILTER_NAME: הפילטר שרוצים להוסיף: exclude_insert,‏ exclude_update או exclude_delete. אם מוסיפים יותר ממסנן אחד בכל פעם, צריך להפריד ביניהם באמצעות פסיק.

בדוגמה הבאה נוצר עדכון נתונים בשם NewFilterChangeStream שלא כולל את סוגי השינויים בטבלה INSERT ו-UPDATE:

CREATE CHANGE STREAM NewFilterChangeStream FOR ALL
WITH (exclude_insert = true, exclude_update = true)

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

הפעלת החרגה של רשומות ברמת העסקה

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

מידע נוסף על החרגה של רשומות ברמת העסקה

GoogleSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
OPTIONS (allow_txn_exclusion = true)

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

  • CHANGE_STREAM_NAME: השם של שינוי הנתונים החדש

בדוגמה הבאה נוצר שינוי בשם NewChangeStream שמאפשר להחריג רשומות מעסקאות כתיבה שצוינו:

CREATE CHANGE STREAM NewChangeStream FOR ALL
OPTIONS (allow_txn_exclusion = true)

PostgreSQL

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

CREATE CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
WITH (allow_txn_exclusion = true)

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

  • CHANGE_STREAM_NAME: השם של שינוי הנתונים החדש

בדוגמה הבאה נוצר פיד שינויים בשם NewChangeStream שממנו אפשר להחריג רשומות מעסקאות כתיבה שצוינו,:

CREATE CHANGE STREAM NewChangeStream FOR ALL
WITH (allow_txn_exclusion = true)

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

ציון טרנזקציית כתיבה שתוחרג מסנכרון שינויים בזרמי נתונים

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

המשך


import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/spanner"
)

// readWriteTxnExcludedFromChangeStreams executes the insert and update DMLs on
// Singers table excluded from tracking change streams with ddl option
// allow_txn_exclusion = true.
func readWriteTxnExcludedFromChangeStreams(w io.Writer, db string) error {
	// db = `projects/<project>/instances/<instance-id>/database/<database-id>`
	ctx := context.Background()
	client, err := spanner.NewClient(ctx, db)
	if err != nil {
		return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.NewClient: %w", err)
	}
	defer client.Close()

	_, err = client.ReadWriteTransactionWithOptions(ctx, func(ctx context.Context, txn *spanner.ReadWriteTransaction) error {
		stmt := spanner.Statement{
			SQL: `INSERT Singers (SingerId, FirstName, LastName)
					VALUES (111, 'Virginia', 'Watson')`,
		}
		_, err := txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprintln(w, "New singer inserted.")
		stmt = spanner.Statement{
			SQL: `UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111`,
		}
		_, err = txn.Update(ctx, stmt)
		if err != nil {
			return fmt.Errorf("readWriteTxnExcludedFromChangeStreams.Update: %w", err)
		}
		fmt.Fprint(w, "Singer first name updated.")
		return nil
	}, spanner.TransactionOptions{ExcludeTxnFromChangeStreams: true})
	if err != nil {
		return err
	}
	return nil
}

Java

static void readWriteTxnExcludedFromChangeStreams(DatabaseClient client) {
  // Exclude the transaction from allowed tracking change streams with alloww_txn_exclusion=true.
  // This exclusion will be applied to all the individual operations inside this transaction.
  client
      .readWriteTransaction(Options.excludeTxnFromChangeStreams())
      .run(
          transaction -> {
            transaction.executeUpdate(
                Statement.of(
                    "INSERT Singers (SingerId, FirstName, LastName)\n"
                        + "VALUES (1341, 'Virginia', 'Watson')"));
            System.out.println("New singer inserted.");

            transaction.executeUpdate(
                Statement.of("UPDATE Singers SET FirstName = 'Hi' WHERE SingerId = 111"));
            System.out.println("Singer first name updated.");

            return null;
          });
}

שינוי של שידור שינויים

כדי לשנות את ההגדרות של שינוי נתונים, משתמשים בהצהרת ALTER CHANGE STREAM DDL. התחביר דומה לזה של CREATE CHANGE STREAM. אתם יכולים לשנות את העמודות שהזרם עוקב אחריהן או את משך תקופת שמירת הנתונים שלו. אפשר גם להשהות את הצפייה לגמרי, תוך שמירה על רשומות השינויים בנתונים.

שינוי של מה שמשתנה בשידור החי

בדוגמה הזו, מוסיפים את כל הטבלה Songs לזרם השינויים NamesAndAlbums שהוגדר קודם:

ALTER CHANGE STREAM NamesAndAlbums
SET FOR Singers(FirstName, LastName), Albums, Songs;

‫Spanner מחליף את ההתנהגות של מקור הנתונים לשינויים שנקרא בשם בהגדרה החדשה אחרי השלמת הפעולה הממושכת שמעדכנת את ההגדרה של מקור הנתונים לשינויים בסכימה של מסד הנתונים.

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

כדי לשנות את משך הזמן שבו נשמרים רשומות פנימיות בפיד שינויים, מגדירים את retention_period בהצהרת ALTER CHANGE STREAM DDL.

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

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( retention_period = '36h' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( retention_period = '36h' );

שינוי סוג לכידת הערכים של שינוי בנתונים

כדי לשנות את סוג לכידת הערכים של סנכרון שינויים בזרמי נתונים, צריך להגדיר את הפסוקית value_capture_type בהצהרת ALTER CHANGE STREAM DDL.

בדוגמה הזו, סוג הערך שמתועד הוא NEW_VALUES.

GoogleSQL

ALTER CHANGE STREAM NamesAndAlbums
SET OPTIONS ( value_capture_type = 'NEW_VALUES' );

PostgreSQL

ALTER CHANGE STREAM NamesAndAlbums
SET ( value_capture_type = 'NEW_VALUES' );

שינוי מסנן מחיקות שמבוסס על TTL

כדי לשנות את המסנן TTL-based deletes של שינוי נתונים, מגדירים את המסנן exclude_ttl_deletes בהצהרת ALTER CHANGE STREAM DDL. אפשר להשתמש באפשרות הזו כדי להוסיף את המסנן לזרמי השינויים הקיימים או להסיר אותו מהם.

מידע נוסף על אופן הפעולה של המסננים האלה זמין במאמר בנושא מסנן מחיקות לפי אורך חיים (TTL).

הוספת המסנן של מחיקות שמבוססות על TTL לזרם שינויים קיים

GoogleSQL

כדי להוסיף את המסנן של מחיקות שמבוססות על TTL ל-change stream קיים, מריצים את הפקודה הבאה כדי להגדיר את המסנן ל-true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם הקיים של השינויים

בדוגמה הבאה, המסנן exclude_ttl_deletes נוסף לזרם שינויים קיים בשם NewFilterChangeStream, שמוציא מכלל אפשרות את כל המחיקות שמבוססות על TTL:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = true)

הפעולה הזו תגרום לכך שכל המחיקות העתידיות שמבוססות על TTL לא יופיעו בזרם השינויים.

PostgreSQL

כדי להוסיף את המסנן של מחיקות שמבוססות על TTL ל-change stream קיים, מריצים את הפקודה הבאה כדי להגדיר את המסנן ל-true:

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם הקיים של השינויים

בדוגמה הבאה, המסנן exclude_ttl_deletes נוסף לזרם שינויים קיים בשם NewFilterChangeStream, שמוציא מכלל אפשרות את כל המחיקות שמבוססות על TTL:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = true)

הפעולה הזו תגרום לכך שכל המחיקות העתידיות שמבוססות על TTL לא יופיעו בזרם השינויים.

הסרת המסנן של מחיקות שמבוססות על TTL מזרם שינויים קיים

GoogleSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של שינויים

בדוגמה הבאה, המסנן exclude_ttl_deletes מוסר מזרם שינויים קיים בשם NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (exclude_ttl_deletes = false)

הפעולה הזו כוללת את כל המחיקות העתידיות של שינויים בפיד השינויים שמבוססות על TTL.

אפשר גם להגדיר את המסנן לערך null כדי להסיר את המסנן של מחיקות על סמך TTL.

PostgreSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (exclude_ttl_deletes = false)

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

  • CHANGE_STREAM_NAME: השם של הזרם החדש של שינויים

בדוגמה הבאה, המסנן exclude_ttl_deletes מוסר מזרם שינויים קיים בשם NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET (exclude_ttl_deletes = false)

הפעולה הזו כוללת את כל המחיקות העתידיות של שינויים בפיד השינויים שמבוססות על TTL.

אפשר גם להגדיר את המסנן לערך null כדי להסיר את המסנן של מחיקות על סמך TTL.

שינוי המסנן לפי סוג השינוי בטבלה

כדי לשנות את המסננים של סוג השינוי בטבלה בזרם שינויים, מגדירים את סוג המסנן בהצהרת ALTER CHANGE STREAM DDL. אפשר להשתמש באפשרות הזו כדי להוסיף מסנן חדש לזרם השינויים או להסיר ממנו מסנן קיים.

הוספת מסנן של סוג שינוי בטבלה לשינוי קיים בנתוני השינויים

GoogleSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = true)

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

  • CHANGE_STREAM_NAME: מחליפים את שם ה-change stream הקיים
  • MOD_TYPE_FILTER_NAME: מחליפים את הערך במסנן שרוצים להוסיף: exclude_insert,‏ exclude_update או exclude_delete. אם מוסיפים יותר ממסנן אחד בכל פעם, צריך להפריד בין המסננים באמצעות פסיק.

בדוגמה הבאה, המסנן exclude_delete נוסף לזרם שינויים קיים שנקרא NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = true)

PostgreSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = true)

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

  • CHANGE_STREAM_NAME: מחליפים את שם ה-change stream הקיים
  • MOD_TYPE_FILTER_NAME: מחליפים את הערך במסנן שרוצים להוסיף: exclude_insert,‏ exclude_update או exclude_delete. אם מוסיפים יותר ממסנן אחד בכל פעם, צריך להפריד בין המסננים באמצעות פסיק.

בדוגמה הבאה, המסנן exclude_delete נוסף לזרם שינויים קיים שנקרא NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = true)

הסרה של מסנן מסוג שינוי בטבלה מזרם שינויים קיים

GoogleSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET OPTIONS (MOD_TYPE_FILTER_NAME = false)

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

  • CHANGE_STREAM_NAME: מחליפים את שם ה-change stream הקיים
  • MOD_TYPE_FILTER_NAME: מחליפים את הערך במסנן שרוצים להסיר: exclude_insert,‏ exclude_update או exclude_delete. אם מסירים יותר ממסנן אחד בכל פעם, צריך להפריד בין המסננים באמצעות פסיקים.

בדוגמה הבאה, המסנן exclude_delete מוסר מזרם שינויים קיים בשם NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET OPTIONS (exclude_delete = false)

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

PostgreSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME
SET (MOD_TYPE_FILTER_NAME = false)

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

  • CHANGE_STREAM_NAME: מחליפים את שם ה-change stream הקיים
  • MOD_TYPE_FILTER_NAME: מחליפים את הערך במסנן שרוצים להסיר: exclude_insert,‏ exclude_update או exclude_delete. אם מסירים יותר ממסנן אחד בכל פעם, צריך להפריד בין המסננים באמצעות פסיקים.

בדוגמה הבאה, המסנן exclude_delete מוסר מזרם שינויים קיים בשם NewFilterChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream
SET (exclude_delete = false)

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

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

אפשר לשנות את ה-change stream כדי לא לכלול בו רשומות מתוך עסקאות כתיבה ספציפיות. כדי לעשות את זה, מגדירים את האפשרות allow_txn_exclusion ל-true בהצהרת DDL של ALTER CHANGE STREAM. אם לא מגדירים את האפשרות הזו, או אם מגדירים אותה ל-false, הזרם של השינויים עוקב אחרי כל טרנזקציות הכתיבה.

מידע נוסף על החרגה של רשומות ברמת העסקה

הפעלת החרגה של רשומות ברמת העסקה בפיד שינויים קיים

GoogleSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם הקיים של השינויים

בדוגמה הבאה, האפשרות allow_txn_exclusion מופעלת בפיד שינויים קיים, NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = true)

כך אפשר להחריג מהזרם של שינויים רשומות מתוך טרנזקציות כתיבה שצוינו.

PostgreSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = true)

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

  • CHANGE_STREAM_NAME: השם של הזרם הקיים של השינויים

בדוגמה הבאה, האפשרות allow_txn_exclusion מופעלת בפיד שינויים קיים, NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = true)

כך אפשר להחריג מהזרם של שינויים רשומות מתוך טרנזקציות כתיבה שצוינו.

השבתת ההחרגה של רשומות ברמת העסקה בשינוי קיים בסטרימינג

GoogleSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

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

  • CHANGE_STREAM_NAME: השם של הזרם לתיעוד שינויים

בדוגמה הבאה, האפשרות allow_txn_exclusion מושבתת בזרם שינויים קיים שנקרא NewAllowedChangeStream:

ALTER CHANGE STREAM NewFilterChangeStream FOR ALL
SET OPTIONS (allow_txn_exclusion = false)

השינויים בזרם מתייחסים לכל עסקאות הכתיבה.

PostgreSQL

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

ALTER CHANGE STREAM CHANGE_STREAM_NAME FOR ALL
SET (allow_txn_exclusion = false)

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

  • CHANGE_STREAM_NAME: השם של הזרם לתיעוד שינויים

בדוגמה הבאה, האפשרות allow_txn_exclusion מושבתת בזרם שינויים קיים שנקרא NewAllowedChangeStream:

ALTER CHANGE STREAM NewAllowedChangeStream FOR ALL
SET (allow_txn_exclusion = false)

השינויים בזרם מתייחסים לכל עסקאות הכתיבה.

השעיית שינוי השידור החי

אם רוצים להפסיק את הפעילות של זרם שינויים אבל לשמור את הרשומות הפנימיות שלו – לפחות למשך תקופת שמירת הנתונים שלו – אפשר לשנות אותו כך שהוא לא יעקוב אחרי שום דבר.

כדי לעשות את זה, מריצים ALTER CHANGE STREAMהצהרת DDL שמחליפה את ההגדרה של זרם השינויים בביטוי המיוחד DROP FOR ALL. לדוגמה:

ALTER CHANGE STREAM MyStream DROP FOR ALL;

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

כדי להפעיל מחדש שידור סטרימינג שהושעה, צריך להוציא עוד הצהרה ALTER CHANGE STREAM עם ההגדרה הקודמת שלו.

מחיקת שינוי השידור החי

כדי למחוק לצמיתות שינוי בזרם, מריצים פקודת DROP CHANGE STREAM שכוללת את שם הזרם:

DROP CHANGE STREAM NamesAndAlbums;

‫Spanner מפסיק מיד את הזרם, מסיר אותו מסכימת מסד הנתונים ומוחק את רשומות השינויים בנתונים שלו.

הצגת רשימה של סנכרון שינויים בזרמי נתונים

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

הצגת סנכרון שינויים בזרמי נתונים באמצעות Google Cloud מסוף

כדי לראות רשימה של זרמי שינויים במסד נתונים ולעיין בהגדרות שלהם:

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

    פתיחת הדף 'מופעים'

  2. עוברים למופע ולמסד הנתונים המתאימים.

  3. בתפריט הניווט, לוחצים על שינוי מקורות נתונים.

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

הצגת ההגדרות של סנכרון שינויים בזרמי נתונים כ-DDL

כשמציגים את הסכימה של מסד נתונים כ-DDL, מוצגים תיאורים של כל סנכרוני שינויים בזרמי נתונים שלו, שמופיעים כהצהרות CREATE CHANGE STREAM.

  • כדי לעשות את זה דרך המסוף, לוחצים על הקישור Show equivalent DDL בדף של מסד הנתונים במסוף Google Cloud .

  • כדי לעשות את זה משורת הפקודה, משתמשים בפקודה ddl describe של Google Cloud CLI.

שליחת שאילתה על סכימת המידע לגבי סנכרון שינויים בזרמי נתונים

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

שיטות מומלצות לשימוש בסנכרון שינויים בזרמי נתונים

ריכזנו כאן כמה שיטות מומלצות להגדרה ולניהול של פידים לשינויים.

כדאי לשקול שימוש במסד נתונים נפרד של מטא-נתונים

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

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

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

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

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

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

השוואה בין שינויים חדשים בזרם ושינוי הגודל לפי הצורך

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

מריצים את הבדיקות האלה עד שהמדדים של המעבד והאחסון מתייצבים. באופן אופטימלי, השימוש במעבד (CPU) של המופע צריך להיות מתחת למקסימום המומלץ, ו<b>נפח האחסון הנדרש</b> לא צריך לחרוג ממגבלת האחסון של המופע.

שימוש באזורים שונים לאיזון עומסים

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

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