מטרות
במדריך הזה נסביר איך לבצע את השלבים הבאים באמצעות מנהל ההתקן Spanner ADO.NET:
- יוצרים מסד נתונים ומופע Spanner.
- לכתוב, לקרוא ולהריץ שאילתות SQL על נתונים במסד הנתונים.
- מעדכנים את הסכימה של מסד הנתונים.
- עדכון נתונים באמצעות טרנזקציה של קריאה וכתיבה.
- מוסיפים אינדקס משני למסד הנתונים.
- משתמשים באינדקס כדי לקרוא נתונים ולהריץ עליהם שאילתות SQL.
- אחזור נתונים באמצעות טרנזקציה לקריאה בלבד.
עלויות
במדריך הזה נעשה שימוש ב-Spanner, שהוא רכיב בתשלום שלGoogle Cloud. מידע על עלות השימוש ב-Spanner מופיע בקטע תמחור.
לפני שמתחילים
צריך לבצע את השלבים שמפורטים במאמר הגדרה, שכוללים יצירה והגדרה של פרויקט ברירת מחדל Google Cloud , הפעלת החיוב, הפעלת Cloud Spanner API והגדרת OAuth 2.0 כדי לקבל אישורי אימות לשימוש ב-Cloud Spanner API.
בפרט, חשוב להריץ את הפקודה gcloud auth
application-default login כדי להגדיר את סביבת הפיתוח המקומית עם פרטי אימות.
הכנת סביבת ADO.NET מקומית
אם עדיין לא התקנתם את .NET במחשב הפיתוח, אתם צריכים להוריד ולהתקין אותו.
משכפלים את המאגר לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/googleapis/dotnet-spanner-entity-framework.gitעוברים לספרייה שמכילה את הקוד לדוגמה של מנהל ההתקן Spanner ADO.NET:
cd dotnet-spanner-entity-framework/spanner-ado-net/spanner-ado-net-getting-started-guide
יצירת מופע
בפעם הראשונה שמשתמשים ב-Spanner, צריך ליצור מופע, שהוא הקצאה של משאבים שמשמשים מסדי נתונים של Spanner. כשיוצרים מופע, בוחרים הגדרת מופע, שקובעת איפה הנתונים מאוחסנים, וגם את מספר הצמתים לשימוש, שקובע את כמות משאבי ההגשה והאחסון במופע.
במאמר יצירת מופע מוסבר איך ליצור מופע Spanner באמצעות אחת מהשיטות הבאות. אפשר לתת למופע שם, למשל test-instance, כדי להשתמש בו עם נושאים אחרים במסמך הזה שמפנים למופע בשם test-instance.
- Google Cloud CLI
- מסוף Google Cloud
- ספריית לקוח (C++, C#, Go, Java, Node.js, PHP, Python או Ruby)
עיון בקבצים לדוגמה
מאגר הדוגמאות מכיל דוגמה שמראה איך להשתמש ב-Spanner עם ADO.NET.
מעיינים בקובץSampleRunner.cs שבו מוסבר איך להשתמש ב-Spanner. בדוגמת הקוד מוצג איך ליצור מסד נתונים חדש ולהשתמש בו. הנתונים מבוססים על סכימת הדוגמה שמוצגת בדף סכימה ומודל נתונים.
יצירת מסד נתונים
GoogleSQL
gcloud spanner databases create example-db --instance=test-instance
PostgreSQL
gcloud spanner databases create example-db --instance=test-instance \
--database-dialect=POSTGRESQL
הפרטים שמוצגים הם:
Creating database...done.
יצירת טבלאות
הקוד הבא יוצר שתי טבלאות במסד הנתונים.
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run createtables projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run createtablespg projects/PROJECT_ID/instances/test-instance/databases/example-db
השלב הבא הוא כתיבת נתונים למסד הנתונים.
יצירת חיבור
כדי לבצע פעולות קריאה או כתיבה, צריך ליצור חיבור כדי לקיים אינטראקציה עם Spanner. שם מסד הנתונים ומאפייני חיבור אחרים מוגדרים במחרוזת החיבור של ADO.NET.GoogleSQL
PostgreSQL
כתיבת נתונים באמצעות DML
אפשר להוסיף נתונים באמצעות שפת טיפול בנתונים (DML) בעסקת קריאה-כתיבה.
משתמשים ב-DbCommand#ExecuteNonQuery method כדי להריץ פקודת DML.
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run dmlwrite projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run dmlwritepg projects/PROJECT_ID/instances/test-instance/databases/example-db
התוצאה צריכה להיות:
4 records inserted.
כתיבת נתונים באמצעות מוטציות
אפשר גם להוסיף נתונים באמצעות מוטציות.
אפשר להוסיף נתונים באמצעות השיטה batch.CreateInsertCommand()
שיוצרת SpannerBatchCommand חדש כדי להוסיף שורות לטבלה.
השיטה SpannerBatchCommand.ExecuteNonQueryAsync() מוסיפה שורות חדשות לטבלה.
בדוגמה הבאה אפשר לראות איך לכתוב נתונים באמצעות מוטציות:
GoogleSQL
PostgreSQL
מריצים את הדוגמה הבאה באמצעות הארגומנט write:
GoogleSQL
dotnet run write projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run writepg projects/PROJECT_ID/instances/test-instance/databases/example-db
הרצת שאילתות על נתונים באמצעות SQL
Spanner תומך בממשק SQL לקריאת נתונים, שאפשר לגשת אליו בשורת הפקודה באמצעות Google Cloud CLI או באופן פרוגרמטי באמצעות מנהל ההתקן Spanner ADO.NET.
בשורת הפקודה
מריצים את הצהרת ה-SQL הבאה כדי לקרוא את הערכים של כל העמודות מהטבלה Albums:
GoogleSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
PostgreSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT singer_id, album_id, album_title FROM albums'
בתוצאה רואים:
SingerId AlbumId AlbumTitle
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
שימוש ב-Spanner ADO.NET driver
בנוסף להרצת הצהרת SQL בשורת הפקודה, אפשר להנפיק את אותה הצהרת SQL באופן פרוגרמטי באמצעות מנהל ההתקן Spanner ADO.NET.
השיטות הבאות משמשות להרצת שאילתת SQL:- השיטה
ExecuteReaderבמחלקהDbCommand: משתמשים בה כדי להריץ הצהרת SQL שמחזירה שורות, כמו שאילתה או פקודת DML עם תנאיTHEN RETURN. - המחלקות
DbDataReader: משתמשים בהן כדי לגשת לנתונים שמוחזרים על ידי הצהרת SQL.
בדוגמה הבאה השתמשנו במתודה ExecuteReaderAsync:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run query projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run querypg projects/PROJECT_ID/instances/test-instance/databases/example-db
התוצאה צריכה להיות:
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
שאילתה באמצעות פרמטר SQL
אם באפליקציה יש שאילתה שמופעלת לעיתים קרובות, אפשר לשפר את הביצועים שלה על ידי שימוש בפרמטרים. אפשר לשמור במטמון את השאילתה הפרמטרית שמתקבלת ולעשות בה שימוש חוזר, וכך להפחית את עלויות הקומפילציה. מידע נוסף זמין במאמר שימוש בפרמטרים של שאילתות כדי להאיץ שאילתות שמופעלות לעיתים קרובות.
הנה דוגמה לשימוש בפרמטר בפסוקית WHERE כדי לשלוח שאילתה לגבי רשומות שמכילות ערך ספציפי עבור LastName.
הדרייבר של Spanner ADO.NET תומך בפרמטרים של שאילתות לפי מיקום וגם לפי שם. הסימן ? בהצהרת SQL מציין פרמטר של שאילתה מיקומי. מוסיפים ערכים של פרמטרים של שאילתה ל-Parameters של התג DbCommand. לדוגמה:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run querywithparameter projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run querywithparameterpg projects/PROJECT_ID/instances/test-instance/databases/example-db
בתוצאה רואים:
12 Melissa Garcia
עדכון הסכימה של מסד הנתונים
נניח שאתם רוצים להוסיף עמודה חדשה בשם MarketingBudget לטבלה Albums. כדי להוסיף עמודה חדשה לטבלה קיימת, צריך לעדכן את סכימת מסד הנתונים. מערכת Spanner תומכת בעדכוני סכימה במסד נתונים בזמן שמסד הנתונים ממשיך לשרת תנועה. עדכוני סכימה לא מחייבים להעביר את מסד הנתונים למצב אופליין, והם לא נועלים טבלאות או עמודות שלמות. אתם יכולים להמשיך לכתוב נתונים למסד הנתונים במהלך עדכון הסכימה. מידע נוסף על עדכוני סכימה נתמכים ועל ביצועים של שינויים בסכימה זמין במאמר ביצוע עדכונים בסכימה.
הוספת עמודה
אפשר להוסיף עמודה בשורת הפקודה באמצעות Google Cloud CLI או באופן פרוגרמטי באמצעות מנהל ההתקן Spanner ADO.NET.
בשורת הפקודה
כדי להוסיף את העמודה החדשה לטבלה, משתמשים בפקודה ALTER TABLE הבאה:
GoogleSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER TABLE Albums ADD COLUMN MarketingBudget INT64'
PostgreSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='alter table albums add column marketing_budget bigint'
הפרטים שמוצגים הם:
Schema updating...done.
שימוש ב-Spanner ADO.NET driver
משתמשים בשיטהExecuteNonQueryAsync כדי לשנות את הסכימה:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run addcolumn projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run addcolumnpg projects/PROJECT_ID/instances/test-instance/databases/example-db
בתוצאה רואים:
Added MarketingBudget column.
ביצוע של אצווה של DDL
מומלץ לבצע כמה שינויים בסכימה באצווה אחת. משתמשים ב-method CreateBatch של ADO.NET כדי ליצור חבילת פעולות. בדוגמה הבאה נוצרות שתי טבלאות באותו אצווה:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run ddlbatch projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run ddlbatchpg projects/PROJECT_ID/instances/test-instance/databases/example-db
בתוצאה רואים:
Added Venues and Concerts tables.
כתיבת נתונים בעמודה החדשה
הקוד הבא כותב נתונים בעמודה החדשה. הפונקציה מגדירה את MarketingBudget ל-100000 בשורה עם מפתח Albums(1, 1) ול-500000 בשורה עם מפתח Albums(2, 2).
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run update projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run updatepg projects/PROJECT_ID/instances/test-instance/databases/example-db
בתוצאה רואים:
Updated 2 albums
אפשר גם להריץ שאילתת SQL כדי לאחזר את הערכים שכתבתם.
בדוגמה הבאה משתמשים במתודה ExecuteReaderAsync כדי להריץ שאילתה:
GoogleSQL
PostgreSQL
כדי להריץ את השאילתה הזו, מריצים את הפקודה הבאה:
GoogleSQL
dotnet run querymarketingbudget projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run querymarketingbudgetpg projects/PROJECT_ID/instances/test-instance/databases/example-db
הפרטים שמוצגים הם:
1 1 100000
1 2 null
2 1 null
2 2 500000
2 3 null
עדכון נתונים
אפשר לעדכן נתונים באמצעות DML בעסקת קריאה-כתיבה.
מתקשרים אל connection.BeginTransactionAsync() כדי להפעיל עסקאות קריאה-כתיבה ב-ADO.NET.
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run writewithtransactionusingdml projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run writewithtransactionusingdmlpg projects/PROJECT_ID/instances/test-instance/databases/example-db
תגי טרנזקציות ותגי בקשות
כדי לפתור בעיות בטרנזקציות ובשאילתות ב-Spanner, אפשר להשתמש בתגי טרנזקציות ובתגי בקשות. אפשר להגדיר תגים באובייקטים של Transaction כדי לשלוח תגי טרנזקציות, ובאובייקטים של DbCommand כדי לשלוח תגי בקשות אל Spanner. לדוגמה:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run tags projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run tagspg projects/PROJECT_ID/instances/test-instance/databases/example-db
אחזור נתונים באמצעות עסקאות לקריאה בלבד
נניח שרוצים לבצע יותר מקריאה אחת באותה חותמת זמן. עסקאות לקריאה בלבד מתבססות על קידומת עקבית של היסטוריית אישורי העסקאות, כך שהאפליקציה תמיד מקבלת נתונים עקביים.
מתקשרים אל connection.BeginReadOnlyTransactionAsync() כדי להריץ טרנזקציה לקריאה בלבד.
בדוגמה הבאה מוצג איך להריץ שאילתה ולבצע קריאה באותה טרנזקציה לקריאה בלבד:
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run readonlytransaction projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run readonlytransactionpg projects/PROJECT_ID/instances/test-instance/databases/example-db
בתוצאה רואים:
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
2 2 Forever Hold Your Peace
1 2 Go, Go, Go
2 1 Green
2 3 Terrified
1 1 Total Junk
Partitioned DML
שפת טיפול בנתונים (DML) עם חלוקה למחיצות מיועדת לסוגים הבאים של עדכונים ומחיקות בכמות גדולה:
- ניקיון תקופתי ואיסוף אשפה.
- מילוי חוזר של עמודות חדשות בערכי ברירת מחדל.
GoogleSQL
PostgreSQL
מריצים את הדוגמה באמצעות הפקודה הבאה:
GoogleSQL
dotnet run pdml projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
dotnet run pdmlpg projects/PROJECT_ID/instances/test-instance/databases/example-db
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון לחיוב ב-Cloud על המשאבים שבהם השתמשתם במדריך הזה, צריך להשליך את מסד הנתונים ולמחוק את המופע שיצרתם.
מחיקת מסד הנתונים
אם מוחקים מופע, כל מסדי הנתונים שבו נמחקים אוטומטית. בשלב הזה נסביר איך למחוק מסד נתונים בלי למחוק את המכונה (עדיין תחויבו על המכונה).
בשורת הפקודה
gcloud spanner databases delete example-db --instance=test-instance
שימוש במסוף Google Cloud
נכנסים לדף Spanner Instances במסוף Google Cloud .
לוחצים על המופע.
לוחצים על מסד הנתונים שרוצים למחוק.
בדף פרטי מסד הנתונים, לוחצים על מחיקה.
מאשרים שרוצים למחוק את מסד הנתונים ולוחצים על מחיקה.
מחיקת המכונה
מחיקת מופע תגרום להסרה אוטומטית של כל מסדי הנתונים שנוצרו במופע הזה.
בשורת הפקודה
gcloud spanner instances delete test-instance
שימוש במסוף Google Cloud
נכנסים לדף Spanner Instances במסוף Google Cloud .
לוחצים על המופע.
לוחצים על Delete.
מאשרים שרוצים למחוק את המופע ולוחצים על מחיקה.
המאמרים הבאים
במאמר אימות לשירותי Cloud באמצעות ספריות לקוח תוכלו לקרוא מידע נוסף על הרשאות ופרטי כניסה לאימות.