סנכרון
הסנכרון של bae הוא הסנכרון של coven: bae מצהיר על הטבלאות והאובייקטים הבינאריים שלו, ו-coven עושה את השאר. הדף הזה הוא המכניקה כפי שהיא חלה על bae; התיעוד של coven מכסה כל חלק לעומק.
לכידה
קישור למקטע הזהcoven מחזיקה את חיבור SQLite, לכן כל כתיבה ש-bae שומר עוברת דרכה. תוסף session של SQLite רושם בדיוק מה השתנה בכל עסקה; השינויים לטבלאות מסונכרנות הופכים ל-changeset, נאטמים במפתח הספרייה ונחתמים במפתח הזהות של המכשיר. אין חישוב diff, אין דגלים מלוכלכים: לכידה היא תכונה של החיבור, וכתיבה לא יכולה להתפספס.
זרמים
קישור למקטע הזהכל מכשיר מוסיף את ה-changesets שלו לזרם משלו בבית הענן, ממוספרים ברצף. מכשירים לעולם לא כותבים לזרמים זה של זה, לכן אין התנגשויות כתיבה באחסון, וכל מכשיר עוקב אחר סמן לכל זרם של עמית. מחזור סנכרון דוחף את תיבת היציאה המקומית, ואז מושך כל זרם עמית מהסמן שלו והלאה, מאמת את חתימת כל changeset ואת חברות המחבר שלו לפני החלה.
המחזור רץ אחרי שינויים מקומיים, לפי שעון המתנה עם השהיה הולכת וגדלה (עד חמש דקות בין בדיקות), ומיד עם Sync Now. כשלים מגדילים השהיה ומנסים שוב; הלולאה מדווחת לממשק על תוצאת כל מחזור כמצב, טקסט שגיאה ומספר השורות שהוחלו.
מיזוג
קישור למקטע הזהשני מכשירים שעורכים אותה ספרייה בזמן שהם בנפרד הם המקרה הרגיל, לא החריג. כשהשינויים שלהם נפגשים:
- עריכות לשורות שונות או עמודות שונות מוחלות שתיהן. עריכת שנת הוצאה במחשב הנייד והלייבל שלה במחשב השולחני נותנת את שתיהן.
- עריכות לאותה עמודה באותה שורה מסודרות לפי שעון לוגי היברידי
_updated_atשל השורה: העריכה המאוחרת מנצחת, באופן דטרמיניסטי וזהה בכל מכשיר. - מחיקות מנצחות על עריכות מקבילות: הוצאה שנמחקה במכשיר אחד נשארת מחוקה גם אם מכשיר אחר ערך אותה באותו מרווח.
אין ממשק התנגשות כי אין מצב לא פתור: כל מכשיר מתכנס לאותה תוצאה מכל סדר החלה.
אתחול
קישור למקטע הזהמכשיר שמצטרף או משחזר לא מנגן מחדש היסטוריה מההתחלה. הוא מוריד snapshot, תמונת SQLite מלאה שמתפרסמת מדי פעם לבית הענן, ואז מחיל רק את ה-changesets שכל זרם צבר אחריה. מטא־נתוני snapshot רושמים את גרסת הסכמה ואת הסמנים לכל זרם שהיא מגלמת.
גרסאות סכמה
קישור למקטע הזההסכמה של bae נודדת דרך סולם ממוספר, והשלב העליון של הסולם מוטבע בכל changeset שהמכשיר כותב. מכשיר שמושך changeset מסכמה חדשה משלו מחנה את הזרם הזה, ולא מחיל דבר אחריו, עד שהיישום מתעדכן; שום דבר לא אובד ושום דבר לא מוחל לא נכון. קובץ מסד הנתונים עצמו מסרב להיפתח תחת בינארי ישן מהסכמה שלו.
גס יותר מגרסת הסכמה הוא תקופת התאימות: גרסת coven המוצמדת שאפויה בכל בינארי. שתי בניות מסתנכרנות רק בתוך תקופה; שבירת פורמט תעבורה של coven היא תקופה חדשה ועלייה בגרסה הראשית בכל יישום. לפני 1.0, כל בנייה היא תקופה אפס והפורמטים משתנים בלי הגירה.
מה הספק רואה
קישור למקטע הזהבבית אטום הספק מאחסן changesets מוצפנים, אובייקטים בינאריים מוצפנים ורשומות חברות חתומות; הוא יכול לספור אובייקטים ולראות גדלים ותזמון, ולא לקרוא שום דבר מזה. כל אובייקט שמכשיר מושך מאומת, חתימה וחברות, לפני שמשהו נוגע במסד הנתונים: האחסון הוא תיבת דואר לא מהימנה. ראה הצפנה וזהות וחברות.