סקירה כללית של ממשקי שאילתות

בדף הזה מוסבר על הממשקים השונים שזמינים לגישה לנתונים במסד נתונים של Firestore במצב Native.

ממשקי הפעלה

במצב מקורי יש שני ממשקים לגישה לנתונים:

פעולות בצינור עיבוד נתונים

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

פעולות בצינורות זמינות רק במהדורת Firestore Enterprise.

פעילויות מרכזיות

פעולות ליבה הן הממשק המקורי של Firestore. פעולות ליבה משתמשות בתחביר של שרשור שיטות (.where(),‏ .orderBy(), ‏ .get()) בהפניות למסמכים או לאוספים כדי לאחזר מסמכים. סדר השלבים בשאילתה מרומז והתמיכה בצבירה מוגבלת.

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

הבדלים בממשק בין המהדורות

עם ההשקה של תמיכה במצב Native במהדורת Enterprise, אפשר להשתמש גם ב-Firestore Core וגם בפעולות של Pipeline. כשמשתמשים בפעולות ליבה במהדורת Enterprise, ההתנהגות החדשה של האינדקס ומודל התמחור החדש מסירים הרבה מההגבלות של מהדורת Standard.

התכונה מהדורת Standard מהדורת Enterprise
פעולות נתמכות הגישה מוגבלת לפעולות ליבה ב-Firestore. תמיכה בפעולות של Firestore Core ו-Pipeline, ופעולות של תאימות ל-MongoDB ב-Firestore.
דרישות להוספה לאינדקס כל השאילתות דורשות אינדקסים. לא צריך אינדקסים כדי להריץ שאילתות.
יצירת אינדקס אינדקסים אוטומטיים נוצרים לשדות בודדים. אפשר ליצור אינדקסים מורכבים באופן ידני. לא נוצרים אינדקסים אוטומטיים. צריך לנהל את האינדקסים באופן ידני.
שדות עם אינדקס אם השדה __name__ לא קיים, הוא יצורף אוטומטית לשדות המאונדקסים. השדה __name__ לא מצורף אוטומטית לשדות באינדקס. אם הוא חשוב לאפליקציה, צריך לציין אותו באופן מפורש בשדות באינדקס.
Index Sparsity כל האינדקסים הם sparse. רשומה באינדקס קיימת רק אם כל השדות שמוגדרים באינדקס מופיעים במסמך. ברירת המחדל היא dense, שבה רשומה באינדקס קיימת גם אם לא מופיעים במסמך שדות שהוגדרו באינדקס.

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

נרמול של סדר המיון סעיף ה-order by של השאילתה עובר נרמול על ידי הוספת שדות אי-שוויון ושדה ‎__name__‎ בסוף (אם הם לא כבר קיימים). כך מובטח סדר ייחודי ודטרמיניסטי של התוצאות, ללא קשר לשדות אחרים שנכללים במשפט order by. אין נרמול של סדר המיון. סדר מיון כמו sort a ASC מבטיח רק שהתוצאות ימוינו לפי השדה a. מערכת Firestore תשתמש באינדקסים הקיימים כדי להחזיר תוצאות בסדר היעיל ביותר האפשרי. לכן, אם הערך של a לא ייחודי בקרב קבוצת התוצאות, סדר התוצאות עשוי להשתנות משאילתה לשאילתה בהתאם להגדרת האינדקס, לאסטרטגיות הביצוע וכו'. כדי להבטיח סדר ייחודי ודטרמיניסטי של התוצאות, צריך להוסיף שדה ייחודי כמו __name__ לסדר המיון.
ביצועי שאילתות ועלות בדרך כלל, השאילתות פועלות בצורה יעילה בגלל דרישות האינדקס. כדי לשפר את הביצועים של השאילתות ולהוזיל את העלויות, כדאי ליצור אינדקסים. אפשר לזהות אינדקסים חסרים באמצעות Query Explain ו-Query Insights.

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

עלות תקורה של יצירת אינדקס אין חיוב על כתיבה לאינדקסים, כי האינדקסים הם אוטומטיים. כתיבת רשומות באינדקס צורכת יחידות כתיבה כשמסמך משויך נכתב (יחידת כתיבה אחת לכל 1KiB של גודל רשומה באינדקס). אתם חוסכים בעלויות האחסון כי אתם לא יוצרים רשומות אינדקס לכל שדה.
מודל חיוב (קריאות/כתיבות/מחיקות) החיוב הוא על כל קריאה, כתיבה ומחיקה של מסמך. החיוב הוא לפי קריאה וכתיבה (מנות). החיוב על קריאות הוא לפי יחידות קריאה (מנות של 4KiB). החיוב על כתיבות ומחיקות הוא לפי יחידות כתיבה (מנות של 1KiB).
מחיר בסיסי (למיליון)

המחירים שמוצגים הם לאזור us-central1

קריאות: 0.03$‎ לכל 100,000 מסמכים (או 0.30 $‎ למיליון).

כתיבה: 0.09$‎ לכל 100,000 מסמכים (או 0.90 $‎ למיליון).

מחיקות: 0.01$‎ לכל 100,000 מסמכים (או 0.10 $‎ למיליון)

יחידות קריאה: $0.05 למיליון יחידות קריאה.

יחידות כתיבה: 0.26$‎ למיליון יחידות כתיבה. המחירים בדרך כלל נמוכים יותר אם המסמכים קטנים מ-4KiB בהשוואה לעלות הקריאה הרגילה.

עדכונים בזמן אמת

המחירים שמוצגים הם לאזור us-central1

עדכונים בזמן אמת נכללים בחיוב כקריאות במחיר של 0.03 $לכל 100,000 מסמכים. עדכונים בזמן אמת הם מק"ט חדש ונפרד (יחידות של עדכונים בזמן אמת), והחיוב הוא על כל 4KiB. העלות של עדכונים בזמן אמת היא 0.30$למיליון יחידות קריאה.

המאמרים הבאים