העברה של Spanner למסד נתונים בניב PostgreSQL

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

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

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

מידע נוסף על ההבדלים בין ניבי השפה של PostgreSQL ו-GoogleSQL ב-Spanner

ככלל, השלבים הם:

  1. הסרת תוספים ספציפיים ל-Spanner משאילתות וממשפטי DDL
  2. העברת הסכימה
  3. העברת הנתונים
  4. העברת האפליקציה

שיקולים ספציפיים ל-Spanner

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

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

הרחבות של תחביר שאילתות

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

סוג התוסף תוספים ספציפיים פעולות שצריך לבצע לפני ההעברה
פונקציות ספציפיות ל-Spanner מחפשים פונקציות עם הקידומת spanner. ומסירים את הקריאות האלה.
הקלדת תוספים מסירים את התחביר VECTOR LENGTH או שוקלים להשתמש ב-pgvector.
תחביר של שאילתות לא נדרשת פעולה כי הרמזים מופיעים בתוך ההערות.
פרטים על שיקולי ביצועים זמינים במאמר בנושא העברת שאילתות.
תהליכים מאוחסנים של המערכת הסרת שיחות אל spanner.cancel_query().
אפשר גם להחליף את הקריאות בקריאות מקבילות ב-PostgreSQL.
פעולות SET/SHOW אפשר להתעלם מההודעה הזו כי ל-PostgreSQL אין פרמטרים מובנים שמתחילים ב-spanner., ולכן הגדרת משתנים עם הקידומת הזו לא משפיעה על ההתנהגות הצפויה.

תוספים לניהול סכימה (DDL)

‫Spanner מציע מגוון תוספים שקשורים לניהול נתונים, כפי שמתואר בדף בנושא שפת הגדרת נתונים (DDL).

תוסף פעולות שצריך לבצע לפני ההעברה
טבלאות משולבות
מאפשרות לאחסן נתונים קשורים מסוג 'רבים לאחד' במיקום פיזי משותף, וכך לשפר משמעותית את היעילות של פעולות הצטרפות בין הטבלאות.
מסירים את הסעיף INTERLEAVE IN.
חותמות זמן של ביצוע פעולות
הגדרה שמאפשרת לשמור באופן אטומי את חותמת הזמן של ביצוע פעולה בעמודה.
אפשר להחליף את SPANNER.COMMIT_TIMESTAMP בסוג חותמת זמן של PostgreSQL ולנהל את הגדרת חותמת הזמן באפליקציה, או להסיר את העמודה הזו.
שחזור מערכת מנקודה מסוימת בזמן (PITR)
הגנה מפני מחיקה או כתיבה בטעות.
מסירים את כל הצהרות ה-DDL שקובעות את הערך spanner.version_retention_period.
Time to live (TTL)
מנחה את המחיקה האוטומטית של רשומות על סמך הגיל שלהן.
מסירים את הסעיף TTL INTERVAL. מומלץ להשתמש בcron או במשימה מתוזמנת כדי למחוק באופן תקופתי נתונים לא עדכניים. שורות.
אפשרויות אופטימיזציה
הגדרת אפשרויות לצמצום הסיכון לנסיגה בביצועים כשמתבצע שינוי באופטימיזציה של השאילתות או בנתונים הסטטיסטיים.
מסירים הצהרות DDL שמגדירות אפשרויות של כלי האופטימיזציה.
סנכרון שינויים בזרמי נתונים
עוקב אחר שינויים בנתונים של מסד נתונים ב-Spanner ומזרים אותם – הוספות, עדכונים ומחיקות – כמעט בזמן אמת.
מסירים את כל הצהרות ה-DDL שקשורות לסנכרון שינויים בזרמי נתונים.
Default leader
מאפשר לציין את ה-leader למסד הנתונים בהגדרות של אזור כפול או כמה אזורים.
מסירים את כל הצהרות ה-DDL שמגדירות את spanner.default_leader.
חלוקה גיאוגרפית
מאפשרת לפלח עוד יותר את השורות בטבלת מסד הנתונים ולאחסן אותן במסגרת הגדרות שונות של מופעים.
מסירים את כל הצהרות ה-DDL שקשורות לחלוקה לפי מיקום גיאוגרפי.
Sequences
‫Spanner תומך רק בסדרת bit_reversed_positive המספרים.
מחליפים את bit_reversed_positive ברצף שזמין ב-PostgreSQL. מסירים את כל הצהרות ה-DDL שמגדירות את spanner.default_sequence_kind.
קבוצות של אזורים
מאפשרות להגדיר אסטרטגיה של קבוצות עמודות כדי לאחסן עמודות בנפרד או להשתמש באחסון מדורג.
מסירים את כל הצהרות ה-DDL שקשורות לקבוצות של רשויות מוניציפאליות.
אינדקסים של חיפוש
מאפשר להגדיר אינדקסים כדי לבצע חיפוש טקסט מלא.
מסירים את כל הצהרות ה-DDL שקשורות לאינדקסים של חיפושים.

העברת סכימות

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

psql -v ON_ERROR_STOP=1 \
  --host "$PGADAPTER_HOST" \
  --port "$PGADAPTER_PORT" \
  --dbname "$SPANNER_DATABASE" \
  -qAtX \
  -c "show database ddl"

אפשר גם להשתמש בפקודה gcloud הבאה כדי להפיק את הסכימה כסקריפט SQL שתואם ל-PostgreSQL:

gcloud spanner databases ddl describe databasename

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

העברת נתונים

ממשק PostgreSQL של Spanner תומך בתוספים COPY TO STDIN ו-STDOUT של PostgreSQL באמצעות PGAdapter. זו אחת הדרכים לטעון נתונים אל Spanner וממנו. מידע נוסף על הפקודה COPY זמין במסמכי התיעוד של כלי שורת הפקודה psql ל-Spanner.

הסקריפט הזה מייצא כמויות קטנות יותר של נתונים (מומלץ לכמויות של פחות מ-100GB של נתונים) מממשק PostgreSQL של Spanner למסד הנתונים החדש של PostgreSQL:

psql -h pgadapter-host -c "COPY $TABLE TO STDOUT BINARY" | \
psql -h postgresql-host -c "COPY $TABLE FROM STDIN BINARY"

בטבלאות גדולות יותר (עם נתונים בנפח של 100GB ומעלה), אפשר להפעיל ייצוא של Dataflow לתבנית CSV.

אפשר לבצע העברות נתונים בזמן אמת באמצעות מחבר Debezium Kafka כדי להזרים עדכונים של Spanner ל-PostgreSQL. אפשר להתאים אותו אישית עוד יותר אם משתמשים ב-Spanner Change Streams API כדי לגשת ישירות לזרמי Change Data Capture ‏ (CDC).

העברת שאילתות

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

אם אתם משתמשים ברמזים בשאילתות, אתם לא צריכים לכתוב מחדש את השאילתות כי רמזים לשאילתות ב-Spanner מוגדרים בהערות שתואמות ל-PostgreSQL:

SELECT s.FirstName, s.LastName,
 s.SingerInfo, a.AlbumTitle, a.Charts
FROM Singers AS s
LEFT OUTER JOIN/*@JOIN_METHOD=APPLY_JOIN*/ Albums AS a
 ON s.SingerId = a.SingerId;

התגובות האלה מעובדות על ידי מתכנן השאילתות של Spanner, אבל מסד נתונים של PostgreSQL מתעלם מהן, כך שאפשר לכלול אותן או להסיר אותן.

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

העברת אפליקציות

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

‫PostgreSQL drivers

‫Spanner תומך בלקוחות נפוצים של PostgreSQL באמצעות PGAdaper, פרוקסי קל משקל שמתרגם את פרוטוקול החיבור של PostgreSQL לממשקי gRPC query API ברמה נמוכה של Spanner. אם אתם משתמשים באחד מהם, כדי לשנות ליעד אחר של PostgreSQL, צריך לעדכן את מחרוזת החיבור כך שתצביע ישירות למסד הנתונים החדש של PostgreSQL במקום ל-proxy של PGAdapter. הגישה הזו מספקת ביצועים טובים ותאימות חזקה, ולכן היא מתאימה למקרים שבהם ניידות היא שיקול חשוב. רוב השאילתות שמופעלות בממשק PostgreSQL של Spanner פועלות באופן זהה בסביבות אחרות של PostgreSQL. עם זאת, ההפך לא בהכרח נכון. PostgreSQL תומך בתחביר ובתכונות ש-Spanner לא תומך בהם.

מנהלי התקנים של Spanner

הדרייברים האלה הם הטמעות ספציפיות ל-Spanner של שפות נפוצות ומסגרות אפליקציות. לדוגמה, מנהל ההתקן Spanner JDBC (Java) מטמיע את אותו API שמנהל ההתקן PostgreSQL JDBC מטמיע, כך שאפליקציות שמשתמשות במנהל ההתקן Spanner JDBC יכולות לעדכן את תהליך ה-build שלהן כדי לקשר למנהל ההתקן המקביל המובנה של PostgreSQL כשהן רוצות להריץ את האפליקציה עם PostgreSQL. האפשרות הזו מתאימה במיוחד אם אתם כבר משתמשים ב-Spanner או אם אתם מחפשים פתרון עם ביצועים טובים שמנצל את התכונות של Spanner, כמו Mutations API, שלא נחשף באמצעות מנהל התקנים מובנה של PostgreSQL. אם אתם צריכים תאימות מלאה למנהלי התקנים מוטמעים וניוד ערכים, כדאי במקום זאת להשתמש במנהלי התקנים מוטמעים של PostgreSQL עם PGAdapter כדי להבטיח רמה מסוימת של ניוד אפליקציות.

מידע נוסף זמין במאמר PostgreSQL drivers and ORMs.

ספריות לקוח של Spanner

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

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