Přejít k obsahu

Synchronizace

Synchronizace bae je synchronizace coven: bae deklaruje své tabulky a bloby a coven udělá zbytek. Tato stránka popisuje mechaniku tak, jak se vztahuje na bae; vlastní dokumentace coven pokrývá každou část do větší hloubky.

coven vlastní připojení SQLite, takže každý zápis, který bae uloží, jím prochází. Když se uloží transakce, která mění synchronizované tabulky, coven ve stejné transakci zaznamená každou změnu řádku i se sloupci, kterých se týká, takže uložená změna se nikdy neztratí, ani když aplikace o chvíli později spadne. Žádné porovnávání rozdílů, žádné příznaky špinavosti: zachycení je vlastnost připojení a zápis nelze minout. Změna čeká na zařízení a šifruje a podepisuje se až při odeslání, takže zápis nepotřebuje klíč ani síť.

Celá historie knihovny v cloudovém domově je jedna číslovaná posloupnost objektů. Každý obsahuje dávku změn jednoho zařízení, správcovský záznam, klíč zapečetěný pro jednoho člena, nebo oznámení snapshotu. Každé zařízení je používá po pořadí a žádný nepřeskočí, takže všechna zařízení se shodnou na tom, co se kdy stalo. Zařízení přidá další objekt teprve poté, co použilo všechny předchozí.

Synchronizační průchod čte dopředu od posledního objektu, který zařízení použilo, dokud nějaký nechybí, ověří podpis každého a použije ho, odešle čekající změny tohoto zařízení jako jeden nový objekt a pak udělá práci, kterou nový stav vyžaduje: nasdílí nebo odebere přístup, pořídí snapshoty, smaže starou historii. Průchod nad klidnou knihovnou stojí dva požadavky, bez ohledu na její velikost.

Průchody běží po místních změnách, na časovači nečinnosti a okamžitě při Synchronizovat nyní. Selhání se opakují podle jednoho plánu zpomalování a všechno, co nemůže pokračovat, uvede, na co čeká, což bae ukazuje ve svém stavovém řádku synchronizace.

Dvě zařízení upravující stejnou knihovnu mimo spojení jsou běžný případ, ne výjimka. Když se jejich změny potkají:

  • Úpravy různých řádků nebo různých sloupců se použijí obě. Úprava roku vydání na notebooku a jeho vydavatelství na desktopu přinese obojí.
  • Úpravy stejného sloupce stejného řádku se řadí podle časového razítka: pozdější úprava vyhraje deterministicky a stejně na každém zařízení.
  • Smazání vítězí nad souběžnými úpravami: úprava řádku, který byl mezitím smazán, prohraje, ať dorazí kdykoli, takže vydání smazané na jednom zařízení zůstane smazané, i když ho jiné zařízení ve stejném intervalu upravilo.

coven uchová každou nahrazenou hodnotu jako ztracenou hodnotu; bae žádnou nezobrazuje ani nezahazuje, takže neexistuje UI konfliktů. Každé zařízení dojde ke stejnému výsledku z libovolného pořadí příchodu.

Zařízení, které se připojuje nebo obnovuje, nepřehrává historii od začátku. Zařízení pořizují snapshoty, úplný stav knihovny v jednom bodě posloupnosti, a jakmile ho má knihovna i každý soukromý kruh, historie před ním se smaže. Nové zařízení načte nejnovější snapshot a pak použije jen to, co přišlo po něm. Zařízení, které bylo pryč déle, než se historie uchovává, udělá totéž a své neodeslané úpravy si ponechá.

Verze schématu

Odkaz na tuto sekci

Schéma bae je jedna migrace a každá změna, kterou zařízení pošle, zaznamenává verzi schématu, ve které vznikla. Zařízení, které narazí na změnu z novějšího schématu, než samo má, se tam zastaví a nepoužije nic za ní, dokud se aplikace neaktualizuje; nic se neztratí a nic se nepoužije špatně.

Hrubší než verze schématu je éra kompatibility: připnutá revize coven zapečená v každé binárce. Dvě sestavení synchronizují jen uvnitř jedné éry; zlom formátu coven na drátu je nová éra a zvýšení major verze napříč všemi aplikacemi. Před 1.0 je každé sestavení éra nula a formáty se mění bez migrace.

Co vidí poskytovatel

Odkaz na tuto sekci

Poskytovatel ukládá šifrované změny, snapshoty, záznamy členství a soubory; může počítat objekty, pozorovat velikosti a časy a vidět, který účet zapisuje každý objekt, ale z obsahu nic nepřečte. Každý objekt, který zařízení stáhne, se před dotykem databáze ověří, podpis i členství: úložiště je hloupá, nedůvěryhodná schránka. Viz Šifrování a Identita a členství.