לדלג לתוכן

פתרון פרויקט מנוע אחסון מקומי

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

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

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

הבדיקה של כשל sync חשובה במיוחד: bytes יכולים להיראות בקריאה חוזרת מתוך cache גם כשהאישור העמיד נכשל. לכן oracle של הבדיקה אינו ״הצלחתי לקרוא מיד״, אלא חוזה הcommit ומודל הכשל של הbackend שנבחר.

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