ניתנות לסידור עסקה ובידוד

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

עסקאות ועימות נתונים

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

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

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

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

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

  • ערכות SDK לנייד/אינטרנט משתמשות בבקרות מקבילות אופטימיות.

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

מחלוקת נתונים ב-SDKs לנייד/אינטרנט

ערכות SDK לנייד/אינטרנט (פלטפורמות אפל, אנדרואיד, אינטרנט, C++) משתמשות בבקרות מקבילות אופטימיות כדי לפתור מחלוקת נתונים.

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

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

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

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

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

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

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

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

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

בידוד ניתן לסידרה

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

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

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

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

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

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

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

בידוד ניתן לסידרה לפי זמן התחייבות

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

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

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

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

בידוד בתוך עסקה

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

בעיות עם מחלוקת נתונים

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