[data-sync] Pasif/Aktif sync + Datastore + Collection #45
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Client'lar arası paylaşımlı veri katmanı. Üç parça:
1) Pasif Sync (hızlı eşitleme): client'lar bir tablo/diziyi kendi aralarında yüksek hızla eşitler; ekleme/okuma için API sağlanır. Tüm client'lardan alınan veriler ortak bir havuzda toplanır ve hepsi tamamen eşit olana kadar veri iletişimi sürer.
2) Aktif Sync / Collection (CRUD broadcast): client'lar ortak bir tablo/dizide CRUD yapar; her işlem diğer client'lara bildirilir. Tüm client'lar verinin bir kopyasını tutar ve tamamen güncel olmadan işlem yapamaz. Tutarlılık için eşzamanlı değişiklikler sunucuya ulaşma zamanına göre önceliklendirilir.
3) Datastore (taslak): geçici/kalıcı veritabanı:
Bitti kriteri: iki client ortak veride CRUD yapıp tutarlı kalıyor; çakışan yazımlar arrival-time'a göre çözülüyor; temp/permanent datastore çalışıyor; testler yeşil.
Tamamlandı (go-rewrite, commit
441093b).internal/datastore(saf, ws-bağımsız) +internal/services/datastore.go.1) Aktif Sync / Collection (CRUD broadcast):
data/open/data/set/data/delete/data/get. Sunucu otoriter kopyayı tutar; her mutasyon datastore kilidi altında monoton seq ile damgalanır → çakışan yazımlar arrival-time'a göre çözülür (kilidi en son alan kazanır), seq her broadcast'te taşınır, tüm client'lar yakınsar. Değişiklik diğer aboneleredata/opsinyaliyle yayılır.2) Pasif Sync (merge pool):
sync/open/sync/push/sync/pull. Öğeler kanonik JSON hash'iyle dedupe edilir; push yalnızca yeni delta'yısync/addile yayar → ortak havuzda toplanır, hepsi eşit olana kadar sürer.3) Datastore (temp/permanent):
data/open {kind, primary, expires, id?}— id boşsa public id üretilir; temp TTL ile expire, permanent kalıcı. (Alan adı bilinçlikind;typeWSTS handler seçicisi olduğu için.)Leak yok: temp store/pool TTL + janitor; disconnect'te
UnsubscribeAll. SDK I/O sözleşmesi korundu (tümü additive yeni type'lar).Test:
TestActiveSyncBroadcast/DeleteBroadcast,TestPassiveSyncConvergence,TestConcurrentSetsResolveByArrival,TestDataSubscriptionClearedOnDisconnect+ datastore birim testleri.go test -raceyeşil.