מטרות
במדריך הזה מפורטים השלבים הבאים לשימוש בפרוקסי המקומי Spanner PGAdapter למנהלי התקנים של PostgreSQL:
- יוצרים מכונה ומסד נתונים ב-Spanner.
- לכתוב, לקרוא ולהריץ שאילתות SQL על נתונים במסד הנתונים.
- מעדכנים את הסכימה של מסד הנתונים.
- עדכון נתונים באמצעות טרנזקציה של קריאה וכתיבה.
- מוסיפים אינדקס משני למסד הנתונים.
- השימוש באינדקס מאפשר לקרוא ולהריץ שאילתות SQL על נתונים.
- אחזור נתונים באמצעות טרנזקציה לקריאה בלבד.
עלויות
במדריך הזה נעשה שימוש ב-Spanner, שהוא רכיב בתשלום שלGoogle Cloud. מידע על עלות השימוש ב-Spanner מופיע בקטע תמחור.
לפני שמתחילים
צריך לבצע את השלבים שמפורטים במאמר הגדרה, שכוללים יצירה והגדרה של פרויקט ברירת מחדל Google Cloud , הפעלת החיוב, הפעלת Cloud Spanner API והגדרת OAuth 2.0 כדי לקבל אישורי אימות לשימוש ב-Cloud Spanner API.
בפרט, חשוב להריץ את הפקודה gcloud auth
application-default login כדי להגדיר את סביבת הפיתוח המקומית עם פרטי אימות.
הכנת סביבת PGAdapter מקומית
אפשר להשתמש במנהלי התקנים של PostgreSQL בשילוב עם PGAdapter כדי להתחבר ל-Spanner. PGAdapter הוא פרוקסי מקומי שמתרגם את פרוטוקול הרשת של PostgreSQL לפרוטוקול gRPC של Spanner.
כדי להריץ את PGAdapter, צריך Java או Docker.
אם אף אחת מהאפליקציות הבאות לא מותקנת במחשב הפיתוח, צריך להתקין אחת מהן:
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/pgadapter.gitעוברים לספרייה שמכילה את הקוד לדוגמה של Spanner:
psql
cd pgadapter/samples/snippets/psql-snippetsJava
cd pgadapter/samples/snippets/java-snippets mvn package -DskipTestsGo
cd pgadapter/samples/snippets/golang-snippetsNode.js
cd pgadapter/samples/snippets/nodejs-snippets npm installPython
cd pgadapter/samples/snippets/python-snippets python -m venv ./venv pip install -r requirements.txt cd samplesC#
cd pgadapter/samples/snippets/dotnet-snippetsPHP
cd pgadapter/samples/snippets/php-snippets composer install cd samples
יצירת מופע
בפעם הראשונה שמשתמשים ב-Spanner, צריך ליצור מופע, שהוא הקצאה של משאבים שמשמשים מסדי נתונים של Spanner. כשיוצרים מופע, בוחרים הגדרת מופע, שקובעת איפה הנתונים מאוחסנים, וגם את מספר הצמתים לשימוש, שקובע את כמות משאבי ההגשה והאחסון במופע.
במאמר יצירת מכונה מוסבר איך ליצור מכונת Spanner באמצעות אחת מהשיטות הבאות. אפשר לתת למופע שם test-instance כדי להשתמש בו עם נושאים אחרים במסמך הזה שמפנים למופע בשם test-instance.
- Google Cloud CLI
- מסוף Google Cloud
- ספריית לקוח (C++, C#, Go, Java, Node.js, PHP, Python או Ruby)
עיון בקבצים לדוגמה
מאגר הדוגמאות מכיל דוגמה שמראה איך להשתמש ב-Spanner עם PGAdapter.
כדאי לעיין בתיקייהsamples/snippets כדי לראות איך משתמשים ב-Spanner. בדוגמת הקוד מוצג איך ליצור מסד נתונים חדש ולהשתמש בו. הנתונים מבוססים על סכימת הדוגמה שמוצגת בדף סכימה ומודל נתונים.
הפעלת PGAdapter
מפעילים את PGAdapter במחשב פיתוח מקומי ומפנים אותו למופע שיצרתם.
הפקודות הבאות מניחות שהפעלתם את gcloud auth application-default login.
אפליקציית Java
wget https://storage.googleapis.com/pgadapter-jar-releases/pgadapter.tar.gz \
&& tar -xzvf pgadapter.tar.gz
java -jar pgadapter.jar -i test-instance
Docker
docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter
docker run \
--name pgadapter \
--rm -d -p 5432:5432 \
-v "$HOME/.config/gcloud":/gcloud:ro \
--env CLOUDSDK_CONFIG=/gcloud \
gcr.io/cloud-spanner-pg-adapter/pgadapter \
-i test-instance -x
אמולטור
docker pull gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
docker run \
--name pgadapter-emulator \
--rm -d \
-p 5432:5432 \
-p 9010:9010 \
-p 9020:9020 \
gcr.io/cloud-spanner-pg-adapter/pgadapter-emulator
הפעולה הזו מפעילה את PGAdapter עם אמולטור Spanner מוטמע. האמולטור המוטמע הזה יוצר באופן אוטומטי כל מופע או מסד נתונים של Spanner שאליו מתחברים, בלי שצריך ליצור אותם מראש באופן ידני.
מומלץ להריץ את PGAdapter בסביבת ייצור כקונטיינר side-car או כתלות בתהליך. מידע נוסף על פריסת PGAdapter בסביבת ייצור זמין במאמר בחירת שיטה להפעלת PGAdapter.
יצירת מסד נתונים
gcloud spanner databases create example-db --instance=test-instance \
--database-dialect=POSTGRESQL
הפרטים שמוצגים הם:
Creating database...done.
יצירת טבלאות
הקוד הבא יוצר שתי טבלאות במסד הנתונים.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./create_tables.sh example-db
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar createtables example-db
Go
go run sample_runner.go createtables example-db
Node.js
npm start createtables example-db
Python
python create_tables.py example-db
C#
dotnet run createtables example-db
PHP
php create_tables.php example-db
השלב הבא הוא כתיבת נתונים למסד הנתונים.
יצירת חיבור
כדי לבצע פעולות קריאה או כתיבה, צריך ליצור חיבור ל-PGAdapter. כל האינטראקציות עם Spanner חייבות לעבור דרךConnection. שם מסד הנתונים מצוין במחרוזת החיבור.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./create_connection.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar createconnection example-db
Go
go run sample_runner.go createconnection example-db
Node.js
npm start createconnection example-db
Python
python create_connection.py example-db
C#
dotnet run createconnection example-db
PHP
php create_connection.php example-db
כתיבת נתונים באמצעות DML
אפשר להוסיף נתונים באמצעות שפת טיפול בנתונים (DML) בעסקת קריאה-כתיבה.
בדוגמאות האלה אפשר לראות איך להריץ פקודת DML ב-Spanner באמצעות דרייבר של PostgreSQL.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./write_data_with_dml.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar writeusingdml example-db
Go
go run sample_runner.go writeusingdml example-db
Node.js
npm start writeusingdml example-db
Python
python write_data_with_dml.py example-db
C#
dotnet run writeusingdml example-db
PHP
php write_data_with_dml.php example-db
אמורה להתקבל התגובה הבאה:
4 records inserted.
כתיבת נתונים באמצעות חבילת DML
PGAdapter תומך בהרצת חבילות של DML. שליחת כמה הצהרות DML באצווה אחת מקטינה את מספר ההלוך ושוב אל Spanner ומשפרת את הביצועים של האפליקציה.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./write_data_with_dml_batch.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar writeusingdmlbatch example-db
Go
go run sample_runner.go writeusingdmlbatch example-db
Node.js
npm start writeusingdmlbatch example-db
Python
python write_data_with_dml_batch.py example-db
C#
dotnet run writeusingdmlbatch example-db
PHP
php write_data_with_dml_batch.php example-db
הפרטים שמוצגים הם:
3 records inserted.
כתיבת נתונים באמצעות מוטציות
אפשר גם להוסיף נתונים באמצעות מוטציות.
PGAdapter מתרגם את הפקודה COPY של PostgreSQL לשינויים. השימוש ב-COPY הוא הדרך היעילה ביותר להוסיף נתונים במהירות למסד הנתונים של Spanner.
פעולות COPY הן אטומיות כברירת מחדל. פעולות אטומיות ב-Spanner כפופות למגבלת גודל הקומיט. מידע נוסף זמין במאמר בנושא מגבלת CRUD.
בדוגמאות האלה אפשר לראות איך מבצעים פעולה לא אטומית של COPY. כך אפשר להפעיל את הפעולה COPY גם אם היא חורגת ממגבלת הגודל של השמירה.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./write_data_with_copy.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar write example-db
Go
go run sample_runner.go write example-db
Node.js
npm start write example-db
Python
python write_data_with_copy.py example-db
C#
dotnet run write example-db
PHP
php write_data_with_copy.php example-db
הפרטים שמוצגים הם:
Copied 5 singers
Copied 5 albums
הרצת שאילתות על נתונים באמצעות SQL
Spanner תומך בממשק SQL לקריאת נתונים, שאפשר לגשת אליו בשורת הפקודה באמצעות Google Cloud CLI או באופן פרוגרמטי באמצעות דרייבר של PostgreSQL.
בשורת הפקודה
מריצים את הצהרת ה-SQL הבאה כדי לקרוא את הערכים של כל העמודות מהטבלה Albums:
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
שימוש בדרייבר של PostgreSQL
בנוסף להרצת הצהרת SQL בשורת הפקודה, אפשר להנפיק את אותה הצהרת SQL באופן פרוגרמטי באמצעות דרייבר של PostgreSQL.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./query_data.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar query example-db
Go
go run sample_runner.go query example-db
Node.js
npm start query example-db
Python
python query_data.py example-db
C#
dotnet run query example-db
PHP
php query_data.php 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.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./query_data_with_parameter.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar querywithparameter example-db
Go
go run sample_runner.go querywithparameter example-db
Node.js
npm start querywithparameter example-db
Python
python query_data_with_parameter.py example-db
C#
dotnet run querywithparameter example-db
PHP
php query_data_with_parameter.php example-db
אמורה להתקבל התוצאה הבאה:
12 Melissa Garcia
עדכון הסכימה של מסד הנתונים
נניח שאתם רוצים להוסיף עמודה חדשה בשם MarketingBudget לטבלה Albums. כדי להוסיף עמודה חדשה לטבלה קיימת, צריך לעדכן את סכימת מסד הנתונים. מערכת Spanner תומכת בעדכוני סכימה במסד נתונים בזמן שמסד הנתונים ממשיך לשרת תנועה. עדכוני סכימה לא מחייבים להעביר את מסד הנתונים למצב אופליין, והם לא נועלים טבלאות או עמודות שלמות. אתם יכולים להמשיך לכתוב נתונים למסד הנתונים במהלך עדכון הסכימה. מידע נוסף על עדכוני סכימה נתמכים ועל ביצועים של שינויים בסכימה זמין במאמר ביצוע עדכונים בסכימה.
הוספת עמודה
אפשר להוסיף עמודה בשורת הפקודה באמצעות Google Cloud CLI או באופן פרוגרמטי באמצעות דרייבר של PostgreSQL.
בשורת הפקודה
כדי להוסיף את העמודה החדשה לטבלה, משתמשים בפקודה ALTER TABLE הבאה:
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER TABLE albums ADD COLUMN marketing_budget BIGINT'
הפרטים שמוצגים הם:
Schema updating...done.
שימוש בדרייבר של PostgreSQL
מריצים את הצהרת ה-DDL באמצעות דרייבר של PostgreSQL כדי לשנות את הסכימה:
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./add_column.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar addmarketingbudget example-db
Go
go run sample_runner.go addmarketingbudget example-db
Node.js
npm start addmarketingbudget example-db
Python
python add_column.py example-db
C#
dotnet run addmarketingbudget example-db
PHP
php add_column.php example-db
הפרטים שמוצגים הם:
Added marketing_budget column
ביצוע של אצווה של DDL
מומלץ לבצע כמה שינויים בסכימה באצווה אחת. אפשר להריץ כמה הצהרות DDL באצווה אחת באמצעות התכונה המובנית של אצווה במנהל ההתקן של PostgreSQL, על ידי שליחת כל הצהרות ה-DDL כמחרוזת SQL אחת שמופרדת באמצעות נקודה ופסיק, או באמצעות ההצהרות START BATCH DDL ו-RUN BATCH.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./ddl_batch.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar ddlbatch example-db
Go
go run sample_runner.go ddlbatch example-db
Node.js
npm start ddlbatch example-db
Python
python ddl_batch.py example-db
C#
dotnet run ddlbatch example-db
PHP
php ddl_batch.php example-db
הפרטים שמוצגים הם:
Added venues and concerts tables
כתיבת נתונים בעמודה החדשה
הקוד הבא כותב נתונים בעמודה החדשה. הפונקציה מגדירה את MarketingBudget ל-100000 בשורה עם מפתח Albums(1, 1), ול-500000 בשורה עם מפתח Albums(2, 2).
COPY של PostgreSQL לשינויים. פקודות COPY מתורגמות כברירת מחדל למוטציות Insert.
מריצים את הפקודה set spanner.copy_upsert=true כדי לתרגם פקודות COPY למוטציות InsertOrUpdate. אפשר להשתמש בזה כדי לעדכן נתונים קיימים ב-Spanner.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./update_data_with_copy.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar update example-db
Go
go run sample_runner.go update example-db
Node.js
npm start update example-db
Python
python update_data_with_copy.py example-db
C#
dotnet run update example-db
PHP
php update_data_with_copy.php example-db
הפרטים שמוצגים הם:
Updated 2 albums
אפשר גם להריץ שאילתת SQL כדי לאחזר את הערכים שכתבתם.
הנה הקוד להרצת השאילתה:
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את השאילתה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./query_data_with_new_column.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar querymarketingbudget example-db
Go
go run sample_runner.go querymarketingbudget example-db
Node.js
npm start querymarketingbudget example-db
Python
python query_data_with_new_column.py example-db
C#
dotnet run querymarketingbudget example-db
PHP
php query_data_with_new_column.php example-db
הפרטים שמוצגים הם:
1 1 100000
1 2 null
2 1 null
2 2 500000
2 3 null
עדכון נתונים
אפשר לעדכן נתונים באמצעות DML בעסקת קריאה-כתיבה.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./update_data_with_transaction.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar writewithtransactionusingdml example-db
Go
go run sample_runner.go writewithtransactionusingdml example-db
Node.js
npm start writewithtransactionusingdml example-db
Python
python update_data_with_transaction.py example-db
C#
dotnet run writewithtransactionusingdml example-db
PHP
php update_data_with_transaction.php example-db
הפרטים שמוצגים הם:
Transferred marketing budget from Album 2 to Album 1
תגי טרנזקציות ותגי בקשות
כדי לפתור בעיות בטרנזקציות ובשאילתות ב-Spanner, אפשר להשתמש בתגי טרנזקציות ובתגי בקשות. אפשר להגדיר תגי עסקאות ותגי בקשות באמצעות משתני הסשן SPANNER.TRANSACTION_TAG ו-SPANNER.STATEMENT_TAG.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./tags.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar tags example-db
Go
go run sample_runner.go tags example-db
Node.js
npm start tags example-db
Python
python tags.py example-db
C#
dotnet run tags example-db
PHP
php tags.php example-db
אחזור נתונים באמצעות טרנזקציות לקריאה בלבד
נניח שרוצים לבצע יותר מקריאה אחת באותה חותמת זמן. עסקאות לקריאה בלבד מתבססות על קידומת עקבית של היסטוריית אישור העסקאות, כך שהאפליקציה תמיד מקבלת נתונים עקביים.
מגדירים את החיבור לקריאה בלבד או משתמשים בהצהרת SET TRANSACTION READ ONLY SQL
כדי להפעיל טרנזקציה לקריאה בלבד.
בדוגמה הבאה מוצג איך להריץ שאילתה ולבצע קריאה באותה טרנזקציה לקריאה בלבד:
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./read_only_transaction.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar readonlytransaction example-db
Go
go run sample_runner.go readonlytransaction example-db
Node.js
npm start readonlytransaction example-db
Python
python read_only_transaction.py example-db
C#
dotnet run readonlytransaction example-db
PHP
php read_only_transaction.php 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
שאילתות עם חלוקה למחיצות ו-Data Boost
ממשק ה-API partitionQuery מחלק שאילתה לחלקים קטנים יותר, או למחיצות, ומשתמש בכמה מכונות כדי לאחזר את המחיצות במקביל. כל מחיצה מזוהה באמצעות אסימון מחיצה. החביון של PartitionQuery API גבוה יותר מזה של API רגיל לשאילתות, כי הוא מיועד רק לפעולות בכמות גדולה, כמו ייצוא או סריקה של כל מסד הנתונים.
Data Boost מאפשר לכם להריץ שאילתות ניתוח ולייצא נתונים כמעט ללא השפעה על עומסי העבודה הקיימים במופע Spanner שהוקצה. Data Boost תומך רק בשאילתות עם חלוקה למחיצות.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./data_boost.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar databoost example-db
Go
go run sample_runner.go databoost example-db
Node.js
npm start databoost example-db
Python
python data_boost.py example-db
C#
dotnet run databoost example-db
PHP
php data_boost.php example-db
מידע נוסף על הפעלת שאילתות מחולקות למחיצות ועל שימוש ב-Data Boost עם PGAdapter זמין במאמר בנושא Data Boost ומשפטי שאילתות מחולקות למחיצות.
Partitioned DML
שפת טיפול בנתונים (DML) עם חלוקה למחיצות מיועדת לסוגים הבאים של עדכונים ומחיקות בכמות גדולה:
- ניקוי תקופתי ו-garbage collection.
- מילוי חוזר של עמודות חדשות בערכי ברירת מחדל.
psql
Java
Go
Node.js
Python
C#
PHP
מריצים את הדוגמה באמצעות הפקודה הבאה:
psql
PGDATABASE=example-db ./partitioned_dml.sh
Java
java -jar target/pgadapter-snippets/pgadapter-samples.jar partitioneddml example-db
Go
go run sample_runner.go partitioneddml example-db
Node.js
npm start partitioneddml example-db
Python
python partitioned_dml.py example-db
C#
dotnet run datpartitioneddmlboost example-db
PHP
php partitioned_dml.php 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 באמצעות ספריות לקוח מוסבר על הרשאות ופרטי אימות.