Синхронізація
Синхронізація bae — це синхронізація coven: bae оголошує свої таблиці й blobs, а coven робить решту. Ця сторінка описує механіку в тому вигляді, у якому вона застосовується до bae; власна документація coven докладно описує кожну частину.
Захоплення
Посилання на цей розділcoven володіє SQLite-з’єднанням, тож кожен запис, який bae фіксує, проходить через нього. Коли фіксується транзакція, що змінює синхронізовані таблиці, coven у тій самій транзакції записує кожну зміну рядка зі стовпцями, яких вона торкнулася, тож зафіксована зміна ніколи не губиться, навіть якщо застосунок аварійно завершиться за мить. Без порівняння, без dirty flags: захоплення є властивістю з’єднання, і запис не може бути пропущений. Зміна чекає на пристрої й шифрується та підписується лише під час надсилання, тож запис не потребує ні ключа, ні мережі.
Послідовність
Посилання на цей розділУся історія бібліотеки в хмарному домі — одна нумерована послідовність об’єктів. Кожен містить пакет змін одного пристрою, адміністративний запис, ключ, запечатаний для одного учасника, або оголошення snapshot. Кожен пристрій застосовує їх по черзі й ніколи жодного не пропускає, тож усі пристрої погоджуються, що й коли сталося. Пристрій додає наступний об’єкт лише після того, як застосував усі попередні.
Прохід синхронізації читає вперед від останнього об’єкта, який застосував пристрій, доки якогось не бракує, перевіряє підпис кожного й застосовує його, надсилає зміни цього пристрою в черзі як один новий об’єкт, а потім робить роботу, якої вимагає новий стан: надає чи забирає доступ, робить snapshot-и, видаляє стару історію. Прохід над спокійною бібліотекою коштує два запити, незалежно від її розміру.
Проходи запускаються після локальних змін, за таймером простою й відразу через Синхронізувати зараз. Збої повторюються за одним розкладом пауз, а все, що не може просунутися, називає, на що чекає, і bae показує це у своєму рядку стану синхронізації.
Об’єднання
Посилання на цей розділРедагування тієї самої бібліотеки на двох пристроях окремо — звичайний випадок, не виняток. Коли їхні зміни зустрічаються:
- Редагування різних рядків або різних стовпців застосовуються обидва. Редагування року релізу на ноутбуку і його лейблу на настільному комп’ютері дає обидва.
- Редагування того самого стовпця того самого рядка впорядковуються за часовою позначкою: пізніше редагування виграє, визначено й однаково на кожному пристрої.
- Видалення виграють над одночасними редагуваннями: редагування рядка, який тим часом видалено, програє, хоч би коли воно надійшло, тож реліз, видалений на одному пристрої, лишається видаленим, навіть якщо інший пристрій редагував його в той самий проміжок.
coven зберігає кожне замінене значення як втрачене значення; bae жодного не показує й жодного не відкидає, тож інтерфейсу конфліктів немає. Кожен пристрій сходиться до того самого результату за будь-якого порядку надходження.
Snapshot-и
Посилання на цей розділПристрій, що приєднується або відновлюється, не програє історію з початку. Пристрої роблять snapshot-и, повний стан бібліотеки в одній точці послідовності, і щойно бібліотека та кожне приватне коло мають свій, історію до нього видаляють. Новий пристрій завантажує найновіший snapshot, а потім застосовує лише те, що надійшло після нього. Пристрій, якого не було довше, ніж зберігається історія, робить те саме й зберігає свої ненадіслані редагування.
Версії схеми
Посилання на цей розділСхема bae — одна міграція, і кожна зміна, яку надсилає пристрій, записує версію схеми, з якою її зроблено. Пристрій, що доходить до зміни зі схеми новішої за власну, зупиняється там, не застосовуючи нічого після неї, доки застосунок не оновиться; нічого не втрачається й нічого не застосовується неправильно.
Грубіша за версію схеми — ера сумісності: закріплена ревізія coven, вшита в кожен бінарний файл. Дві збірки синхронізуються лише в межах ери; злам формату передавання coven — це нова ера і підвищення основної версії у кожному застосунку. До 1.0 кожна збірка має ера нуль, і формати змінюються без міграції.
Що бачить провайдер
Посилання на цей розділПровайдер зберігає зашифровані зміни, snapshot-и, записи участі й файли; він може рахувати об’єкти, спостерігати розміри та час і бачити, який обліковий запис записує кожен об’єкт, але нічого з вмісту не читає. Кожен об’єкт, який забирає пристрій, перевіряється, підпис і участь, перед тим як щось торкнеться бази даних: сховище є пасивною ненадійною поштовою скринькою. Див. Шифрування і Ідентичність та участь.