יכולת סריאליזציה ובידוד של עסקאות

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

טרנזקציות ומאבק על נתונים

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

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

Cloud Firestore פותר את התחרות על הנתונים על ידי עיכוב או כשל של אחת מהפעולות. ספריות הלקוח של Cloud Firestore יתבצע ניסיון חוזר באופן אוטומטי לטרנזקציות שנכשלות עקב התנגשות נתונים. אחרי מספר סופי של ניסיונות חוזרים, פעולת העסקה נכשלת ומחזירה שגיאה. message:

ABORTED: Too much contention on these documents. Please try again.

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

  • בערכות ה-SDK לנייד או לאינטרנט נעשה שימוש בו-זמניות אופטימית הפקדים בנגן.

  • ספריות הלקוח של השרת משתמשות בבקרות בו-זמניות פסימיות.

תחרויות נתונים בערכות ה-SDK לנייד או לאינטרנט

בערכות ה-SDK לנייד או לאינטרנט (פלטפורמות של Apple, Android, Web, C++ ) נעשה שימוש באמצעי בקרה אופטימיים בו-זמניים (concurrency) כדי פתרון תחרויות נתונים.

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

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

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

תחרות על נתונים בספריות הלקוח של השרת

ספריות הלקוח של השרת (C#, Go, Java, Node.js, PHP, Python, Ruby) אמצעי בקרה בו-זמניים פסימיים פותרים התנגשויות נתונים.

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

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

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

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

בידוד שניתן לבצע בו-זמנית

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

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

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

הבידוד לאפשר הצגה מספרית מגדיר את רמת הבידוד הגבוהה ביותר. ניתן לצפייה בסדרה כלומר:

  • ניתן להניח שמסד הנתונים מבצע עסקאות בסדרה.
  • עסקאות לא מושפעות משינויים לא מחויבים בפעולות בו-זמנית.

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

השימוש ב-Cloud Firestore מבטיח בידוד של עסקאות שניתן לבצע להן מספר סידורי. העסקאות ב-Cloud Firestore מסודרות ברצף ומבודדות באמצעות שמירה בזמן האימון.

בידוד שניתן לבצע בו סדר סדרתי לפי זמן שמירה

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

לביצוע עסקה בפועל נדרש פרק זמן מסוים. הפעלה של שהעסקה מתחילה לפני זמן המחויבות, והוצאה של כמה עשויה להיות חפיפה. Cloud Firestore תומך בבידוד שניתן להשתמש בו באופן טורי ומבטיח ש:

  • Cloud Firestore מבצע עסקאות לפי הסדר לפי מועד ההתחייבות.
  • Cloud Firestore בידוד עסקאות בו-זמנית פעולות שצריך לבצע להן מחויבות במועד מאוחר יותר.

במקרה של תחרויות נתונים בין פעולות בו-זמניות, Cloud Firestore משתמש באמצעי בקרה אופטימיים ופסימיים בו-זמניות לפתרון מחלוקת.

בידוד בתוך טרנזקציה

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

בעיות הקשורות לחלוקת נתונים

לקבלת מידע נוסף על תחרויות נתונים והדרכים לפתור אותן, כדאי לעיין בדף פתרון הבעיות.