פתרון בעיות שקשורות לזמן אחזור
בדף הזה מוסבר איך לפתור בעיות של זמן אחזור ב-Firestore.
זמן אחזור
בטבלה הבאה מפורטות סיבות אפשריות לעלייה בזמן האחזור:
| הסיבה לזמן האחזור | סוגי הפעולות שהושפעו | רזולוציה |
|---|---|---|
| תנועה מתמשכת שחורגת מכלל 500-50-5. | קריאה, כתיבה |
במקרים של עלייה מהירה בתנועה, Firestore מנסה לבצע התאמה לעומס באופן אוטומטי כדי לעמוד בביקוש המוגבר. כש-Firestore מתרחב, זמן האחזור מתחיל להתקצר. אזורים פעילים (שיעורי קריאה, כתיבה ומחיקה גבוהים בטווח מסמכים מצומצם) מגבילים את היכולת של Firestore להתרחב. כדאי לעיין בעיצוב לצורך התרחבות ולזהות נקודות חמות באפליקציה. |
| התנגשות, כתוצאה מעדכון של מסמך יחיד בתדירות גבוהה מדי או מעסקאות. | קריאה, כתיבה |
צריך להקטין את קצב הכתיבה למסמכים בודדים. בודקים את התחרות על נתונים בעסקאות ואת אופן השימוש בעסקאות. |
| שאילתות איטיות של מיזוג והצטרפות. | קריאה |
לדוגמה, שאילתות עם כמה מסנני שוויון (==) אבל ללא אינדקסים מורכבים יכולות להוביל לשאילתות איטיות של מיזוג-צירוף.
כדי לשפר את הביצועים, כדאי להוסיף אינדקסים מורכבים לשאילתות האלה. אפשר לעיין בסיבה מספר 3 במאמר למה השאילתה שלי ב-Firestore פועלת לאט?
|
| קריאות גדולות שמחזירות הרבה מסמכים. | קריאה | כדי לפצל קריאות גדולות, משתמשים בחלוקה לדפים. |
| יותר מדי מחיקות מהזמן האחרון. | read ההרשאה הזו משפיעה מאוד על פעולות שמציגות רשימה של אוספים במסד נתונים. |
אם השהייה נגרמת בגלל יותר מדי מחיקות מהזמן האחרון, הבעיה אמורה להיפתר באופן אוטומטי אחרי זמן מה. אם הבעיה לא נפתרת, פנו לתמיכה. |
| הוספה והסרה של מאזינים מהר מדי. | שאילתות של רכיב listener בזמן אמת | שיטות מומלצות לעדכונים בזמן אמת |
| האזנה למסמכים גדולים או לשאילתה עם הרבה תוצאות. | שאילתות של רכיב listener בזמן אמת | שיטות מומלצות לעדכונים בזמן אמת |
| התרחבות של האינדקס, במיוחד בשדות של מערכים ובשדות של מפות. | לכתוב | כדאי לבדוק את השימוש בשדות מערך ובשדות מיפוי. בשדות מיפוי אפשר להשבית את ההוספה לאינדקס של שדות משנה. אפשר גם להשתמש בהחרגות ברמת האוסף. |
| פעולות כתיבה גדולות ופעולות כתיבה באצווה. | לכתוב |
כדאי לנסות לצמצם את מספר הפעולות של כתיבה באצווה. כתיבות באצווה הן אטומיות, וכתיבות רבות באצווה אחת יכולות להגדיל את זמן האחזור ואת ההתנגשות. לדוגמה, קבוצה של 10 פעולות כתיבה תניב ביצועים טובים יותר מקבוצה של 500 פעולות כתיבה. כדי להזין נתונים בכמות גדולה כשלא נדרשת אטומיות, צריך להשתמש בספריית לקוח של שרת עם כתיבות מקבילות של נתונים בודדים. כתיבות באצווה מניבות ביצועים טובים יותר מכתיבות סדרתיות, אבל לא טובים יותר מכתיבות מקבילות. |