# מערך שיעור: Query Service📋 מערך מרצה

משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים יבנו Query Service שמאחד Polyglot Persistence, עם Pagination ו-Cache Invalidation.

בסוף השיעור הסטודנטים צריכים: לממש שליפה עם Pagination, קאש עם Invalidation יזום, ולהסביר את היתרון של Polyglot Persistence בפרויקט זה.

דגש קריטי: זהו שיעור-סיכום לכל נושאי ה-DB בקורס (SQL/EF Core, MongoDB, Redis) — הדגישו זאת במפורש כרגע איסוף.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הציגו: Query הוא הפנים היחידות ללקוח — לא Kafka/DB ישירות |
| Polyglot Persistence | 15 דקות | סיכום: Postgres/Mongo/Redis, כל אחד למה שמתאים |
| הבעיה: שליפה בלי Pagination | 10 דקות | הדגימו קריסה/איטיות על נתונים רבים |
| הרעיון: Pagination | 20 דקות | Skip/Limit, page+pageSize |
| הבעיה: קאש מיושן | 10 דקות | TTL לבד לא מספיק |
| הרעיון: Cache Invalidation יזום | 25 דקות | invalidate-cache endpoint |
| תרגול מודרך | 28 דקות | תרגיל 1+2 + התחלת פרויקט מסכם |

---

## דגשים להעברת השיעור

- זהו רגע טבעי לחזור ולסכם "איזה DB מתי" מכל הקורס — SQL לעקביות/קשרים, NoSQL Document לגמישות, Redis למטמון — טבלת סיכום קצרה שווה זמן.
- ההדגמה של שליפה בלי Pagination (איטיות/קריסה על נתונים רבים) חשובה לביסוס ה"למה" — אל תסתפקו בהצגת הפתרון בלבד.
- Cache Invalidation יזום מול TTL בלבד שווה דוגמה קונקרטית עם ציר זמן (מתי הנתון משתנה, מתי TTL פג, מתי המשתמש רואה עדכון).

---

## מושגים

**Polyglot Persistence** — כמה DB שונים, כל אחד למה שמתאים.
**Pagination** — שליפה בעמודים, לא הכל בבת אחת.
**Cache Invalidation** — ניקוי קאש יזום כשנתונים משתנים.

---

## תרגיל חשיבה

**שאלת פתיחה:** "יש לכם 2 מיליון רשומות ב-MongoDB. אם `GET /records` היה מחזיר את כולן בבת אחת, מה קורה ללקוח שקורא ל-API הזה מהדפדפן?"

**מהלך:** הובילו לתובנה: זמן תגובה ארוך מאוד, גודל תגובה עצום (עלול לקרוס דפדפן/אפליקציה), ועומס מיותר על השרת ועל הרשת. Pagination לא "נוחות" — היא הכרחית לתפקוד תקין בקנה מידה אמיתי.

**מה המרצה מראה בסוף:** אם אפשר, מלאו MongoDB בכמות נתונים משמעותית (אלפי רשומות) והריצו שליפה בלי Pagination מול שליפה עם Pagination — מדדו זמן תגובה (`Stopwatch`) בשתי הגרסאות. ההבדל המספרי הוא ההוכחה.
