עסקה היא קבוצה של פעולות Datastore על ישות אחת או יותר, ב-25 קבוצות ישויות לכל היותר. כל עסקה מובטחת להיות אטומית, כלומר העסקאות אף פעם לא מיושמות באופן חלקי. כל הפעולות בעסקה מוחלות או שאף אחת מהן לא מוחלת.
שימוש בעסקאות
המשך המקסימלי של העסקאות הוא 270 שניות, עם זמן סיום של 10 שניות אחרי 30 שניות של חוסר פעילות.
פעולה עלולה להיכשל במקרים הבאים:
- נעשה ניסיון לבצע יותר מדי שינויים בו-זמנית באותה קבוצת ישויות.
- העסקה חורגת ממגבלת משאבים.
- מערכת Datastore נתקלת בשגיאה פנימית.
בכל המקרים האלה, ה-API של Datastore מחזיר שגיאה.
עסקאות הן תכונה אופציונלית של Datastore. לא חייבים להשתמש בעסקאות כדי לבצע פעולות ב-Datastore.
אפליקציה יכולה להריץ קבוצה של הצהרות ופעולות Datastore בעסקה אחת, כך שאם הצהרה או פעולה כלשהי מעלות חריגה, אף אחת מהפעולות של Datastore בקבוצה לא מוחלת. האפליקציה מגדירה את הפעולות שיש לבצע בעסקה.
בקטע הקוד הבא אפשר לראות איך לבצע טרנזקציה באמצעות 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. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
הערה: כדי שהדוגמאות שלנו יהיו תמציתיות יותר, לפעמים אנחנו משמיטים את rollback אם העסקה נכשלת. בקוד ייצור חשוב לוודא שכל עסקה מבוצעת באופן מפורש או מבוטלת.
מה אפשר לעשות בעסקה
כל הפעולות ב-Datastore בעסקה יכולות לפעול על עד 25 קבוצות ישויות. זה כולל שאילתות לגבי ישויות לפי ישות אב, אחזור ישויות לפי מפתח, עדכון ישויות ומחיקת ישויות.
כששתי עסקאות או יותר מנסות לשנות ישויות בו-זמנית בקבוצת ישויות משותפת אחת או יותר, רק העסקה הראשונה שמבצעת את השינויים תצליח, וכל שאר העסקאות ייכשלו. בגלל העיצוב הזה, השימוש בקבוצות ישויות מגביל את מספר הפעולות המקבילות של כתיבה שאפשר לבצע בכל ישות בקבוצות. כשמתחילה טרנזקציה, Datastore משתמש בבקרת מקבילות אופטימית על ידי בדיקת זמן העדכון האחרון של קבוצות הישויות שמשמשות בטרנזקציה. כשמבצעים פעולת אישור (commit) של טרנזקציה עבור קבוצות הישויות, Datastore בודק שוב את זמן העדכון האחרון של קבוצות הישויות שנעשה בהן שימוש בטרנזקציה. אם הוא השתנה מאז הבדיקה הראשונית שלנו, תוחזר שגיאה. הסבר על קבוצות ישויות זמין במאמר נתיבי ישויות אב.
בידוד ועקביות
מחוץ לעסקאות, רמת הבידוד של Datastore הכי קרובה ל-read committed. בתוך טרנזקציות, נאכף בידוד שניתן לסדר. המשמעות היא שעסקה אחרת לא יכולה לשנות בו-זמנית את הנתונים שנקראים או משתנים על ידי העסקה הזו. מידע נוסף על רמות הבידוד זמין במאמר בידוד טרנזקציות ובדף הוויקי בנושא בידוד ניתן לסריאליזציה.
בטרנזקציה, כל פעולות הקריאה משקפות את המצב העדכני והעקבי של Datastore בזמן שהטרנזקציה התחילה. מובטח ששאילתות וחיפושים בתוך טרנזקציה יראו תמונה עקבית אחת של Datastore, נכון לתחילת הטרנזקציה. הישויות ושורות האינדקס בקבוצות הישויות של העסקה מתעדכנות באופן מלא, כך שהשאילתות מחזירות את קבוצת הישויות המלאה והנכונה של התוצאות, ללא התוצאות החיוביות השגויות או התוצאות השליליות השגויות שמתוארות בבידוד עסקאות, שיכולות להתרחש בשאילתות מחוץ לעסקאות.
תצוגת התמונה העקבית הזו חלה גם על קריאות אחרי כתיבות בתוך טרנזקציות. בניגוד לרוב מסדי הנתונים, שאילתות ופעולות get בתוך טרנזקציה של 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. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
כמו קודם, נדרשת טרנזקציה כדי לטפל במקרה שבו משתמש אחר מנסה ליצור או לעדכן ישות עם אותו מזהה מחרוזת. אם אין עסקה, והישות לא קיימת ושני משתמשים מנסים ליצור אותה, המשתמש השני דורס את המשתמש הראשון בלי לדעת שזה קרה.
אם העסקה נכשלת, אתם יכולים להגדיר שהאפליקציה תנסה שוב לבצע את העסקה עד שהיא תצליח, או לאפשר למשתמשים לטפל בשגיאה על ידי העברתה לרמת ממשק המשתמש של האפליקציה. לא צריך ליצור לולאת ניסיון חוזר סביב כל עסקה.
לבסוף, אפשר להשתמש בעסקה כדי לקרוא תמונת מצב עקבית של 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. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.
עסקאות וקבוצות ישויות
קבוצת ישויות היא קבוצה של ישויות שמקושרות באמצעות היררכיה לרכיב בסיס משותף. ארגון הנתונים בקבוצות של ישויות יכול להגביל את סוגי העסקאות שאפשר לבצע:
- כל הנתונים שאליהם יש גישה בעסקה צריכים להיכלל ב-25 קבוצות ישויות לכל היותר.
- אם רוצים להשתמש בשאילתות בתוך טרנזקציה, צריך לארגן את הנתונים בקבוצות ישויות כך שאפשר יהיה לציין מסנני ישות אב שיותאמו לנתונים הנכונים.
יש מגבלת קצב העברת נתונים של כתיבה של בערך עסקה אחת בשנייה בתוך קבוצת ישויות אחת. המגבלה הזו קיימת כי Datastore מבצע שכפול סינכרוני ללא שרת ראשי של כל קבוצת ישויות על פני אזור גאוגרפי רחב, כדי לספק מהימנות גבוהה ועמידות בפני תקלות.
בהרבה אפליקציות, אפשר להשתמש בעקביות סופית (כלומר, שאילתה שאינה שאילתת צאצא וכוללת מספר קבוצות של ישויות, שעשויה להחזיר נתונים מעט ישנים) כשרוצים לקבל תמונה רחבה של נתונים לא קשורים, ואז להשתמש בעקביות חזקה (שאילתת צאצא או lookup של ישות אחת) כשרוצים להציג או לערוך קבוצה אחת של נתונים קשורים מאוד. במקרים כאלה, בדרך כלל מומלץ להשתמש בקבוצת ישויות נפרדת לכל קבוצה של נתונים שקשורים זה לזה באופן הדוק.
מידע נוסף זמין במאמר עקביות נתונים.