עסקה היא קבוצה של פעולות על ישות אחת או יותר. כל עסקה מובטחת להיות אטומית, כלומר, עסקאות אף פעם לא מוחלות באופן חלקי. כל הפעולות בעסקה מוחלות, או שאף אחת מהן לא מוחלת.
שימוש בעסקאות
תוקף העסקאות פג אחרי 270 שניות או אם לא מתבצעת פעילות במשך 60 שניות.
פעולה עלולה להיכשל במקרים הבאים:
- יותר מדי שינויים בו-זמניים מנסים להתבצע באותה ישות.
- העסקה חורגת ממגבלת משאבים.
- מסד הנתונים במצב Datastore נתקל בשגיאה פנימית.
בכל המקרים האלה, ה-API של Datastore מחזיר שגיאה.
התכונה 'עסקאות' היא אופציונלית. אתם לא חייבים להשתמש בטרנזקציות כדי לבצע פעולות במסד הנתונים.
אפליקציה יכולה להריץ קבוצה של הצהרות ופעולות בעסקה אחת, כך שאם הצהרה או פעולה כלשהי מעלות חריגה, אף אחת מהפעולות במסד הנתונים בקבוצה לא מוחלת. האפליקציה מגדירה את הפעולות שיש לבצע בעסקה.
בקטע הקוד הבא אפשר לראות איך מבצעים טרנזקציה. העברת כסף מחשבון אחד לחשבון אחר.
C#
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore C# API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Go
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Go API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Java
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Java API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Node.js
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Node.js API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
PHP
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore PHP API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Python API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Ruby
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Ruby API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
הערה: כדי שהדוגמאות שלנו יהיו תמציתיות יותר, לפעמים אנחנו משמיטים את rollback אם העסקה נכשלת. בקוד הייצור, חשוב לוודא שכל עסקה מאושרת באופן מפורש או מבוטלת.
מה אפשר לעשות בעסקה
בעסקאות אפשר לבצע שאילתות או חיפושים של כל מספר של ישויות. הגודל המקסימלי של טרנזקציה הוא 10MiB. אפשר להשתמש בעסקת קריאה-כתיבה או בעסקת קריאה בלבד.
בידוד ועקביות
במסדי נתונים במצב Datastore נאכף בידוד ניתן לסידור. אי אפשר לשנות נתונים שנקראים או משתנים על ידי טרנזקציה במקביל.
שאילתות וחיפושים בעסקה רואים תמונת מצב עקבית של מצב מסד הנתונים. מובטח שהתמונה הזו תכיל את ההשפעה של כל הטרנזקציות והפעולות שבוצעו לפני תחילת הטרנזקציה.
תמונת המצב העקבית הזו חלה גם על קריאות אחרי כתיבות בתוך טרנזקציות. בניגוד לרוב מסדי הנתונים, שאילתות וחיפושים בתוך טרנזקציה במצב Datastore לא רואים את התוצאות של פעולות כתיבה קודמות בתוך אותה טרנזקציה. באופן ספציפי, אם יש שינוי או מחיקה של ישות בתוך טרנזקציה, שאילתה או חיפוש יחזירו את הגרסה המקורית של הישות, כפי שהיא הייתה בתחילת הטרנזקציה, או שלא יחזירו כלום אם הישות לא הייתה קיימת באותו זמן.
בנוסף לטרנזקציות, גם שאילתות וחיפושים מבודדים באופן סדרתי.
מצבי בו-זמניות
Firestore במצב Datastore תומך בשלושה מצבי מקביליות. מצב הריצה המקבילית הוא הגדרה במסד הנתונים שקובעת איך אינטראקציות של טרנזקציות מקבילות מתבצעות. אפשר לבחור באחד ממצבי הריצה המקבילית הבאים:
פסימיות
בטרנזקציות של קריאה-כתיבה נעשה שימוש בנעילות קריאה/כתיבה כדי לאכוף בידוד וסריאליזציה. כששתי עסקאות או יותר של קריאה וכתיבה בו-זמנית קוראות או כותבות את אותם נתונים, הנעילה שמוחזקת על ידי עסקה אחת יכולה לעכב את העסקאות האחרות. אם העסקה לא דורשת פעולות כתיבה, אפשר לשפר את הביצועים ולמנוע התנגשות עם עסקאות אחרות באמצעות עסקה לקריאה בלבד. עסקאות לקריאה בלבד לא דורשות נעילות.
כברירת מחדל, מסדי נתונים של Firestore במצב Datastore משתמשים במצב מקביליות פסימי.
אופטימיסטי
כששתי עסקאות או יותר של קריאה וכתיבה בו-זמנית קוראות או כותבות את אותם נתונים, רק העסקה הראשונה שמבצעת את השינויים מצליחה. עסקאות אחרות שמבצעות פעולות כתיבה נכשלות בשלב האישור.
אופטימיות עם קבוצות ישויות
משתמשים במצב מקביליות הזה רק אם האפליקציה שלכם מסתמכת על סמנטיקה טרנזקציונלית של קבוצת ישויות של Cloud Datastore מדור קודם. במצב הזה של פעולות מקבילות, יש הגבלות נוספות על טרנזקציות:
- העסקאות מוגבלות ל-25 קבוצות ישויות.
- הכתיבה לקבוצת ישויות מוגבלת ל-1 בשנייה.
- שאילתות בעסקאות חייבות להיות שאילתות אב.
כדי להסיר את המגבלות על השאילתות, הטרנזקציות והתפוקה של פעולות הכתיבה של
OPTIMISTIC_WITH_ENTITY_GROUPS, צריך לשנות את מצב הבו-זמניות (concurrency) של הפרויקט ל'אופטימי'. כדי לוודא שהשינוי הזה תואם לפרויקט שלכם:יוצרים פרויקט בדיקה ב-Firestore במצב Datastore.
משנים את מצב ההפעלה בו-זמנית של פרויקט הבדיקה ל
OPTIMISTIC. מנפיקים בקשת HTTP PATCH, כמו בדוגמה שלמטה.מריצים בדיקות בפרויקט הבדיקה כדי לוודא שעומס העבודה פועל כצפוי בלי קבוצות ישויות.
שינוי מצב הריצה המקבילית של הפרויקט הראשי מ-
OPTIMISTIC_WITH_ENTITY_GROUPSל-OPTIMISTIC.
הצגת מצב ההפעלה בו-זמנית
מריצים את הפקודה
gcloud firestore databases describe כדי לראות את מצב הגישה המקבילית של מסד הנתונים:
gcloud firestore databases describe \
--project=PROJECT_ID \
--database=DATABASE_ID
שינוי מצב ההפעלה בו-זמנית
מריצים את הפקודה gcloud firestore databases update כדי לשנות את מצב הגישה המקבילית של מסד הנתונים:
gcloud firestore databases update \
--project=PROJECT_ID \
--database=DATABASE_ID \
--concurrency-mode=CONCURRENCY_MODE
where:
- CONCURRENCY_MODE הוא
PESSIMISTIC,OPTIMISTICאוOPTIMISTIC_WITH_ENTITY_GROUPS. - PROJECT_ID הוא מזהה הפרויקט. Google Cloud
- DATABASE_ID הוא המזהה של מסד הנתונים במצב Datastore.
שימושים בעסקאות
אחד השימושים בעסקאות הוא עדכון ישות עם ערך מאפיין חדש ביחס לערך הנוכחי שלה. בדוגמה transferFunds שלמעלה, הפעולה הזו מתבצעת עבור שני ישויות, על ידי משיכת כסף מחשבון אחד והעברתו לחשבון אחר.
ה-Datastore API לא מנסה לבצע שוב עסקאות באופן אוטומטי, אבל אתם יכולים להוסיף לוגיקה משלכם כדי לנסות לבצע אותן שוב. למשל, כדי לטפל בקונפליקטים כשבקשה אחרת מעדכנת את אותה ישות באותו הזמן.
C#
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore C# API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Go
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Go API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Java
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Java API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Node.js
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Node.js API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
PHP
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore PHP API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Python API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Ruby
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Ruby API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
הפעולה הזו דורשת טרנזקציה כי יכול להיות שמשתמש אחר יעדכן את הערך של balance בישות אחרי שהקוד הזה יאחזר את האובייקט, אבל לפני שהוא ישמור את האובייקט ששונה. אם לא מתבצעת עסקה, הבקשה של המשתמש תשתמש בערך של balance לפני העדכון של המשתמש השני, והשמירה תדרוס את הערך החדש. בעסקה, האפליקציה מקבלת מידע על העדכון של המשתמש השני.
שימוש נפוץ נוסף בעסקאות הוא אחזור של ישות עם מפתח בעל שם, או יצירה של ישות כזו אם היא עדיין לא קיימת (הדוגמה הזו מבוססת על הדוגמה של TaskList מתוך יצירת ישות):
C#
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore C# API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Go
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Go API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Java
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Java API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Node.js
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Node.js API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
PHP
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore PHP API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Python API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Ruby
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Ruby API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
כמו קודם, נדרשת טרנזקציה כדי לטפל במקרה שבו משתמש אחר מנסה ליצור או לעדכן ישות עם אותו מזהה מחרוזת. אם אין עסקה, והישות לא קיימת ושני משתמשים מנסים ליצור אותה, המשתמש השני דורס את המשתמש הראשון בלי לדעת שזה קרה.
אם העסקה נכשלת, אתם יכולים להגדיר שהאפליקציה תנסה שוב לבצע את העסקה עד שהיא תצליח, או לאפשר למשתמשים לטפל בשגיאה על ידי העברתה לרמת ממשק המשתמש של האפליקציה. לא צריך ליצור לולאת ניסיון חוזר סביב כל עסקה.
עסקאות עם הרשאת קריאה בלבד
לבסוף, אפשר להשתמש בעסקה כדי לקרוא תמונת מצב עקבית של מסד הנתונים. זה יכול להיות שימושי כשצריך לבצע כמה קריאות כדי לעבד דף או כדי לייצא נתונים שצריכים להיות עקביים. אתם יכולים ליצור טרנזקציה לקריאה בלבד במקרים האלה.
עסקאות עם הרשאת קריאה בלבד לא יכולות לשנות ישויות, אבל בתמורה הן לא מתחרות עם עסקאות אחרות ולא צריך לנסות אותן מחדש. אם מבצעים רק קריאות בעסקה רגילה של קריאה וכתיבה, יכול להיות שתהיה התנגשות בין העסקה הזו לבין עסקה שמשנה את אותם נתונים.
C#
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore C# API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Go
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Go API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Java
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Java API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Node.js
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Node.js API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
PHP
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore PHP API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Python
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Python API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
Ruby
מידע על התקנת ספריית הלקוח של Cloud Datastore ושימוש בה מופיע במאמר ספריות הלקוח של Cloud Datastore. מידע נוסף מופיע במאמרי העזרה של Cloud Datastore Ruby API.
כדי לבצע אימות ב-Cloud Datastore, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.