Daha hızlı CRDT için optimizasyon yapmak
(josephg.com)- Mevcut CRDT kütüphanelerindeki sorunları bulup çözerek onları daha hızlı hale getirme sürecini anlatan bir yazı
→ Test benchmark'ı: 180 bin karakter giriş, 70 bin karakter silme, 100 bin kez imleç taşıma
→ Automerge'e kıyasla 5000x daha hızlı (5 dakika vs. 56ms)
- Automerge neden yavaş?
→ Belge büyüdükçe içteki ağaç tabanlı veri yapısı büyüyor ve yavaşlıyor
→ ImmutableJS yoğun kullanılıyor; özellikleri iyi olsa da yavaş ve bellek kullanımı yüksek
→ Girilen her karakteri ayrı bir öğe olarak işliyor
→ Automerge şu anda performansı iyileştirilmiş Rust sürümünü ayrıca geliştiriyor
- Yjs kütüphanesi, Automerge'den çok daha hızlı
→ Veri yapısını iyileştirmiş
- Diamond Types: Rust tabanlı bir CRDT gerçekleştirmesi
→ Dili Rust'a geçirip Yjs'teki gibi veri yapısını iyileştirerek daha hızlı hale getirmiş
→ Linked list yerine Range Tree kullanıyor
→ Wasm ile çalıştırıldığında JS'teki string değişikliklerinden 3 kat daha hızlı (0.19s, Automerge'den 1500 kat hızlı)
→ Rust Native ile çalıştırıldığında 0.056s ile 5000 kat daha hızlı
Ek A - Uygulamamda CRDT kullanacaksam neyi tercih etmeliyim?
-
Belge tabanlı işbirliği aracı yapacaksanız "Yjs öneriliyor". Performansı iyi ve bellek kullanımı düşük. Daha da hızlanması bekleniyor
-
Elbette Automerge de harika. Muhtemelen bu yıl daha da hızlanacak
-
Diamond gerçekten çok hızlı, ancak hâlâ birçok özelliğin eklenmesi gerekiyor
-
Belge semantiği yerine DB semantiği istiyorsanız, OT tabanlı olsa da ShareDB öneriliyor
-
Redwood umut veriyor
2 yorum
Bu yazı, aşağıdaki yazının yazarı olan Google Wave geliştiricisi Joseph Gentle’ın en yeni yazısıdır. Önce onu okumanız faydalı olacaktır.
Xi Editor'ın geliştiricisi Raph Levien'in yazısı da göz atmaya değer.
https://github.com/xi-editor/xi-editor/…