Çakışmasız çoğaltılmış veri türü - Conflict-free replicated data type

İçinde dağıtılmış hesaplama, bir çatışmasız çoğaltılmış veri türü (CRDT) bir veri yapısı hangisi olabilir çoğaltılmış birden çok bilgisayarda bir , kopyaların bağımsız olarak güncellenebileceği ve aynı anda olmadan Koordinasyon kopyalar arasında ve ortaya çıkabilecek tutarsızlıkları çözmenin her zaman matematiksel olarak mümkün olduğu yerlerde.[1][2][3][4][5][6][7][8]

CRDT kavramı, 2011 yılında Marc Shapiro, Nuno Preguiça, Carlos Baquero ve Marek Zawirski tarafından resmen tanımlandı. Geliştirme başlangıçta şu şekilde motive edildi: işbirliğine dayalı metin düzenleme ve mobil bilgisayar. CRDT'ler ayrıca çevrim içi sohbet sistemleri Çevrimiçi kumar, Ve içinde Ses bulutu ses dağıtım platformu. NoSQL dağıtılmış veritabanları Redis, Riak ve Cosmos DB CRDT veri türlerine sahip.

Arka fon

Eşlemeleri barındıran bilgisayarlar arasında koordinasyon olmaksızın, aynı verilerin birden çok kopyasında eşzamanlı güncellemeler, tutarsızlıklar Genel durumda çözülemeyebilecek kopyalar arasında. Güncellemeler arasında çakışma olduğunda tutarlılığın ve veri bütünlüğünün geri yüklenmesi, güncellemelerin bir kısmının veya tamamının tamamen veya kısmen bırakılmasını gerektirebilir.

Buna göre, dağıtılmış hesaplamanın çoğu, çoğaltılan verilerde eşzamanlı güncellemelerin nasıl önleneceği sorununa odaklanır. Ancak başka bir olası yaklaşım da iyimser çoğaltma, tüm eşzamanlı güncellemelerin geçmesine izin verildiği, muhtemelen tutarsızlıkların yaratıldığı ve sonuçların birleştirildiği veya daha sonra "çözümlendiği". Bu yaklaşımda, kopyalar arasındaki tutarlılık Sonuçta farklı kopyaların "birleşmeleri" yoluyla yeniden kuruldu. İyimser çoğaltma genel durumda işe yaramayabilirken, önemli ve pratik olarak yararlı bir veri yapıları sınıfı, CRDT'ler olduğu ortaya çıkıyor - burada çalıştığı yerde eşzamanlı güncellemeleri farklı eşlemelerde birleştirmek veya çözmek matematiksel olarak her zaman mümkün. çatışmasız veri yapısı. Bu, CRDT'leri iyimser çoğaltma için ideal kılar.

Örnek olarak, tek yönlü Boole olay bayrağı önemsiz bir CRDT'dir: doğru veya yanlış değerine sahip bir bit. Doğru, belirli bir olayın en az bir kez meydana geldiği anlamına gelir. Yanlış, olayın gerçekleşmediği anlamına gelir. Doğru olarak ayarlandıktan sonra, bayrak yanlış değerine geri döndürülemez. (Oluşan bir olay gerçekleşemez.) Çözüm yöntemi "gerçek kazanır": bayrağın doğru olduğu bir kopyayı birleştirirken (bu kopya olayı gözlemledi) ve bayrağın yanlış olduğu başka bir çoğaltma olayı gözlemlemedi), çözümlenen sonuç doğrudur - olay gözlemlenmiştir.

CRDT türleri

CRDT'lere iki yaklaşım vardır ve her ikisi de aşağıdakileri sağlayabilir: kuvvetli nihai tutarlılık: operasyon tabanlı CRDT'ler[9][10] ve eyalete dayalı CRDT'ler.[11][12]

İki alternatif teorik olarak eşdeğerdir, çünkü biri diğerini taklit edebilir.[1]Bununla birlikte, pratik farklılıklar vardır. Devlet temelli CRDT'lerin tasarlanması ve uygulanması genellikle daha kolaydır; iletişim alt katmanından tek gereksinimleri bir tür dedikodu protokolü Bunun dezavantajı, her CRDT'nin tüm durumunun, eninde sonunda, maliyetli olabilecek diğer tüm kopyalara iletilmesi gerektiğidir; bunun aksine, işlem tabanlı CRDT'ler yalnızca tipik olarak küçük olan güncelleme işlemlerini iletir ancak işlem tabanlı CRDT'ler gerektirir garantiler iletişim aracı yazılımı; diğer kopyalara iletildiğinde işlemlerin düşürülmediğini veya çoğaltılmadığını ve teslim edildiğini nedensel düzen.[1]

Operasyon tabanlı CRDT'ler

İşlem tabanlı CRDT'ler de denir değişmeli çoğaltılmış veri türleriveya CmRDT'ler. CmRDT kopyaları, yalnızca güncelleme işlemini ileterek durumu yayar. Örneğin, tek bir tamsayının bir CmRDT'si (+10) veya (-20) işlemlerini yayınlayabilir. Kopyalar güncellemeleri alır ve yerel olarak uygular. İşlemler değişmeli. Ancak, zorunlu olarak etkisiz. Bu nedenle iletişim altyapısı, bir eşlemedeki tüm işlemlerin diğer eşlemelere, çoğaltma yapılmadan, ancak herhangi bir sırayla teslim edilmesini sağlamalıdır.

Saf operasyon tabanlı CRDT'ler[10] meta veri boyutunu küçülten işlem tabanlı CRDT'lerin bir çeşididir.

Eyalet tabanlı CRDT'ler

Eyalete dayalı CRDT'ler yakınsak çoğaltılmış veri türleriveya CvRDT'ler. CmRDT'lerin aksine, CvRDT'ler tam yerel durumlarını diğer kopyalara gönderir; burada durumlar, bir işlev tarafından birleştirilir. değişmeli, ilişkisel, ve etkisiz. birleştirmek işlevi bir katılmak herhangi bir kopya durumu çifti için, tüm durumların kümesi bir semilattice. Güncelleme işlev gerekir monoton olarak artış aynı göre iç durum kısmi sipariş semilattice olarak kurallar.

Delta durumu CRDT'ler[12][13] (veya basitçe Delta CRDT'ler), bir duruma yalnızca son zamanlarda uygulanan değişikliklerin tüm eyalet yerine yayıldığı optimize edilmiş durum tabanlı CRDT'lerdir.

Karşılaştırma

CmRDT'ler işlemlerin kopyalar arasında iletilmesi için protokole daha fazla gereksinim koyarken, işlemlerin sayısı dahili durumun boyutuna göre küçük olduğunda CvRDT'lerden daha az bant genişliği kullanırlar. Bununla birlikte, CvRDT birleştirme işlevi ilişkilendirilebilir olduğundan, bazı eşlemelerin durumuyla birleştirildiğinde, bu eşlemedeki önceki tüm güncelleştirmeler elde edilir. Dedikodu protokolleri ağ kullanımını azaltırken ve topoloji değişikliklerini ele alırken CvRDT durumunu diğer kopyalara yaymak için iyi çalışır.

Bazı alt sınırlar[14] durum tabanlı CRDT'lerin depolama karmaşıklığı konusunda bilinmektedir.

Bilinen CRDT'ler

G-Counter (Yalnızca Büyüme Sayacı)

yük tamsayı [n] P başlangıç ​​[0,0, ..., 0] güncelleme artış() g = benim kimliğim() P [g]: = P [g] + 1sorgu değer(): tamsayı v let v = Σben P [i] karşılaştır (X, Y): boole b let b = (∀i ∈ [0, n - 1]: XP [i] ≤ YP [i]) birleştirme (X, Y): yük Z let ∀i ∈ [0, n - 1]: ZP [i] = max(X.P [i], Y.P [i])

Bu CvRDT, bir küme için bir sayaç uygular. n düğümler. Kümedeki her düğüme 0 ile n - 1, bir çağrı ile alınır benim kimliğim(). Böylece her düğüme dizideki kendi yuvası atanır Pyerel olarak artar. Güncellemeler arka planda yayılır ve max() içindeki her öğenin P. Karşılaştırma işlevi, durumlarla ilgili kısmi bir sıralamayı göstermek için dahil edilmiştir. Birleştirme işlevi değişmeli, ilişkisel ve idempotenttir. Güncelleme işlevi, karşılaştırma işlevine göre dahili durumu monoton olarak artırır. Bu nedenle bu, doğru tanımlanmış bir CvRDT'dir ve güçlü nihai tutarlılık sağlayacaktır. CmRDT eşdeğeri yayınlar, alınırken işlemleri arttırır.[2]

PN-Sayacı (Pozitif-Negatif Sayaç)

yük tamsayı [n] P, tamsayı [n] N başlangıç ​​[0,0, ..., 0], [0,0, ..., 0] güncelleme artış() g = benim kimliğim() P [g]: = P [g] + 1güncelleme azalma() g = benim kimliğim() N [g]: = N [g] + 1sorgu değer(): tamsayı v let v = Σben P [i] - Σben N [i] karşılaştır (X, Y): boole b let b = (∀i ∈ [0, n - 1]: XP [i] ≤ YP [i] ∧ ∀i ∈ [0, n - 1]: XN [i] ≤ YN [i]) birleştirme (X, Y): yük Z let ∀i ∈ [0, n - 1]: ZP [i] = max(X.P [i], Y.P [i]) let ∀i ∈ [0, n - 1]: Z.N [i] = max(X.N [i], Y.N [i])

CRDT geliştirmede yaygın bir strateji, daha karmaşık bir CRDT yapmak için birden çok CRDT'yi birleştirmektir. Bu durumda, hem artırma hem de azaltma işlemlerini destekleyen bir veri türü oluşturmak için iki G-Sayacı birleştirilir. "P" G-Sayacı artışları sayar; ve "N" G-Counter düşüşleri sayar. PN-Sayacının değeri, P sayacının değeri eksi N sayacının değeridir. Birleştirme, birleştirilmiş P sayacının iki P G-Sayacının birleşmesi ve benzer şekilde N sayaçları için izin verilmesiyle gerçekleştirilir. CRDT'nin iç durumunun, dış durumunun ortaya çıkmasına rağmen, monoton bir şekilde artması gerektiğini unutmayın. sorgu önceki değerlere dönebilir.[2]

G-Set (Yalnızca Büyüyen Set)

yük kümesi Bir başlangıç ​​∅update Ekle(e öğesi) A: = A ∪ {e} sorgu bakmak(e öğesi): boole b let b = (e ∈ A) karşılaştırma (S, T): boole b let b = (S.A ⊆ T.A) birleştirme (S, T): yük U izin U.A = S.A ∪ T.A

G-Set (yalnızca büyüyen set), yalnızca eklemelere izin veren bir settir. Bir öğe eklendikten sonra kaldırılamaz. İki G-Set'in birleşmesi onların birliğidir.[2]

2'li Set (İki Fazlı Set)

yük kümesi A, başlangıç ​​R olarak ayarla ∅, ∅query bakmak(e öğesi): boole b let b = (e ∈ A ∧ e ∉ R) güncelleme Ekle(e öğesi) A: = A ∪ {e} güncelleme Kaldır(e öğesi) ön bakmak(e) R: = R ∪ {e} karşılaştırma (S, T): boole b let b = (SA ⊆ TA ∧ SR ⊆ TR) birleştirme (S, T): yük U let UA = SA ∪ TA let UR = SR ∪ TR

İki G-Seti (yalnızca büyüyen setler), 2P setini oluşturmak için birleştirilir. Bir kaldırma setinin eklenmesiyle ("mezar taşı" seti olarak adlandırılır), öğeler eklenebilir ve kaldırılabilir. Kaldırıldıktan sonra bir öğe yeniden eklenemez; yani bir kez e mezar taşı setinde, sorgu o öğe için bir daha asla True döndürmeyecek. 2P seti, "kazan-kaldır" anlamını kullanır, bu nedenle Kaldır(e) önceliklidir Ekle(e).[2]

LWW-Element-Set (Last-Write-Wins-Element-Set)

LWW-Element-Set, her eleman için bir zaman damgası ile bir "ekleme seti" ve bir "kaldırma seti" içerdiğinden 2P-Set'e benzer. Öğeler, bir zaman damgasıyla birlikte ekleme kümesine eklenerek bir LWW-Element-Set'e eklenir. Öğeler, yine bir zaman damgası ile kaldırma kümesine eklenerek LWW-Element-Set'ten kaldırılır. Bir öğe, ekleme kümesindeyse ve kaldırma kümesinde değilse veya kaldırma kümesindeyse, ancak ekleme kümesindeki en son zaman damgasından daha erken bir zaman damgasına sahipse LWW-Element-Set'in bir üyesidir. LWW-Element-Set'in iki replikasının birleştirilmesi, toplama setlerinin birleşimini ve kaldırma setlerinin birleşimini almaktan oluşur. Zaman damgaları eşit olduğunda, LWW-Element-Set'in "önyargısı" devreye girer. Bir LWW-Element-Set, eklemelere veya çıkarmalara karşı önyargılı olabilir. LWW-Element-Set'in 2P-Set'e göre avantajı, 2P-Set'in aksine, LWW-Element-Set'in bir elemanın çıkarıldıktan sonra yeniden yerleştirilmesine izin vermesidir.[2]

OR-Set (Gözlemlenen-Kaldır Set)

OR-Set, LWW-Element-Set'e benzer, ancak zaman damgaları yerine benzersiz etiketler kullanır. Kümedeki her bir öğe için, bir eklenti etiketleri listesi ve bir kaldırma etiketleri listesi tutulur. OR-Setine, yeni benzersiz bir etiket oluşturularak ve öğe için eklenti etiketi listesine eklenen bir öğe eklenir. Öğeler, öğenin etiket ekleme listesindeki tüm etiketlerin öğenin etiket kaldırma (kaldırıldı işareti) listesine eklenmesiyle OR-Setinden kaldırılır. İki OR-Setini birleştirmek için, her bir öğe için, eklenti etiketi listesi iki eklenti etiketi listesinin birleşimi ve aynı şekilde iki etiket kaldırma listesi için olsun. Bir öğe kümenin bir üyesidir, ancak ve ancak eklenti etiketi listesi eksi etiket kaldırma listesi boş değilse.[2] Bir mezar taşı setinin bakımını yapma ihtiyacını ortadan kaldıran bir optimizasyon mümkündür; bu, mezar taşı setinin potansiyel olarak sınırsız büyümesini önler. Optimizasyon, her replika için bir zaman damgası vektörü korunarak gerçekleştirilir.[15]

Sıra CRDT'leri

Bir dizi, liste veya sıralı küme CRDT, bir İşbirliğine dayalı gerçek zamanlı düzenleyici alternatif olarak Operasyonel dönüşüm (OT).

Bilinen bazı Sıralı CRDT'ler Treedoc,[5] RGA,[16] Woot,[4] Logoot,[17] ve LSEQ.[18]KASA[19] LSEQSplit (LSEQ'nun bir uzantısı) üzerine inşa edilmiş merkezi olmayan gerçek zamanlı bir düzenleyicidir ve aşağıdaki tarayıcılardan oluşan bir ağ üzerinde çalıştırılabilir: WebRTC.LogootSplit [20] CRDT dizileri için meta verileri azaltmak amacıyla Logoot'un bir uzantısı olarak önerilmiştir. SESSİZ [21][22] LogootSplit algoritmasına dayanan, web tabanlı, eşler arası, gerçek zamanlı işbirliğine dayalı bir çevrimiçi düzenleyicidir.

Sanayi kullanımı

Nimbus Note iş birliğine dayalı bir not alma uygulamasıdır. Yjs CRDT işbirliğine dayalı düzenleme için. [23]

Redis Redis açık kaynağına dayalı ve tamamen uyumlu, küresel olarak dağıtılmış veritabanlarını uygulamak için CRDT'leri kullanan, dağıtılmış, yüksek düzeyde erişilebilir ve ölçeklenebilir bir bellek içi veritabanıdır. Ses bulutu açık kaynaklı Roshi, SoundCloud akışı için LWW-element-set CRDT, Redis.[24]

Riak CRDT'leri temel alan dağıtılmış bir NoSQL anahtar-değer veri deposudur.[25] efsaneler Ligi 7.5 milyon eşzamanlı kullanıcıyı ve saniyede 11.000 mesajı işleyen oyun içi sohbet sistemi için Riak CRDT uygulamasını kullanır.[26] Bet365, yüzlerce megabayt veriyi Riak OR-Set'in uygulanması.[27]

TomTom Bir kullanıcının cihazları arasında navigasyon verilerini senkronize etmek için CRDT'leri kullanır.[28]

Anka kuşu, ile yazılmış bir web çerçevesi İksir, sürüm 1.2'de gerçek zamanlı çok düğümlü bilgi paylaşımını desteklemek için CRDT'leri kullanır.[29]

Facebook CRDT'leri Apollo düşük gecikmeli "ölçekte tutarlılık" veritabanlarında uygular.[30]

İçin Teletype Atom geliştiricilerin çalışma alanlarını ekip üyeleriyle paylaşmasını ve gerçek zamanlı olarak kod üzerinde işbirliği yapmasını sağlamak için CRDT'leri kullanır.[31]

Haja Networks'ün OrbitDB'si, temel veri yapısı olan IPFS-Log'da operasyon tabanlı CRDT'ler kullanır.[32]

elma Birden çok cihaz arasında çevrimdışı düzenlemeleri eşitlemek için Notes uygulamasında CRDT'leri uygular.[33]

Referanslar

  1. ^ a b c Shapiro, Marc; Preguiça, Nuno; Baquero, Carlos; Zawirski, Marek (2011), Çatışmasız Çoğaltılmış Veri Türleri (PDF), Bilgisayar Bilimleri Ders Notları, 6976, Grenoble, Fransa: Springer Berlin Heidelberg, s. 386–400, doi:10.1007/978-3-642-24550-3_29, ISBN  978-3-642-24549-7
  2. ^ a b c d e f g Shapiro, Marc; Preguiça, Nuno; Baquero, Carlos; Zawirski, Marek (13 Ocak 2011). "Yakınsak ve Değişmeli Çoğaltılmış Veri Türlerinin Kapsamlı Bir İncelemesi". 7506 Rr.
  3. ^ Shapiro, Marc; Preguiça Nuno (2007). "Değişmeli Çoğaltılmış Veri Türü Tasarlama". Bilgi İşlem Araştırma Havuzu (CoRR). abs / 0710.1784. arXiv:0710.1784. Bibcode:2007arXiv0710.1784S.
  4. ^ a b Oster, Gérald; Urso, Pascal; Molli, Pascal; Imine Abdessamad (2006). Bilgisayar destekli ortak çalışma üzerine 2006 20. yıldönümü konferansının bildirileri - CSCW '06. s. 259. CiteSeerX  10.1.1.554.3168. doi:10.1145/1180875.1180916. ISBN  978-1595932495.
  5. ^ a b Letia, Mihai; Preguiça, Nuno; Shapiro, Marc (2009). "CRDT'ler: Eş Zamanlılık Kontrolü Olmadan Tutarlılık". Bilgi İşlem Araştırma Havuzu (CoRR). abs / 0907.0929. arXiv:0907.0929. Bibcode:2009arXiv0907.0929L.
  6. ^ Preguiça, Nuno; Marques, Joan Manuel; Shapiro, Marc; Letia, Mihai (Haziran 2009), İşbirlikçi Düzenleme için Değişmeli Çoğaltılmış Veri Türü (PDF), Montreal, Quebec, Kanada: IEEE Computer Society, s. 395–403, doi:10.1109 / ICDCS.2009.20, ISBN  978-0-7695-3659-0
  7. ^ Baquero, Carlos; Moura, Francisco (1997). "Otonom Mobil Hesaplama için Yakınsak Soyut Veri Türlerinin Belirlenmesi". Universidade do Minho. Alıntı dergisi gerektirir | günlük = (Yardım)
  8. ^ Schneider, Fred (Aralık 1990). "Durum Makinesi Yaklaşımını Kullanarak Hata Toleranslı Hizmetleri Uygulama: Bir Eğitim". Alıntı dergisi gerektirir | günlük = (Yardım)
  9. ^ Letia, Mihai; Preguiça, Nuno; Shapiro, Marc (1 Nisan 2010). "Büyük, Dinamik Sistemlerde Eş Zamanlılık Kontrolü Olmadan Tutarlılık" (PDF). SIGOPS Oper. Syst. Rev. 44 (2): 29–34. doi:10.1145/1773912.1773921.
  10. ^ a b Baquero, Carlos; Almeida, Paulo Sérgio; Shoker, Ali (2014-06-03). Magoutis, Kostas; Pietzuch, Peter (editörler). Operasyon Bazlı CRDT'lerin Operasyon Bazlı Yapılması. Bilgisayar Bilimlerinde Ders Notları. Springer Berlin Heidelberg. sayfa 126–140. CiteSeerX  10.1.1.492.8742. doi:10.1007/978-3-662-43352-2_11. ISBN  9783662433515.
  11. ^ Baquero, Carlos; Moura, Francisco (1 Ekim 1999). "Otonom Operasyon İçin Yapısal Özelliklerin Kullanılması". SIGOPS Oper. Syst. Rev.: 90–96.
  12. ^ a b Almeida, Paulo Sérgio; Shoker, Ali; Baquero Carlos (2015-05-13). Bouajjani, Ahmed; Fauconnier, Hugues (editörler). Delta Mutation ile Verimli Durum Tabanlı CRDT'ler. Bilgisayar Bilimlerinde Ders Notları. Springer Uluslararası Yayıncılık. sayfa 62–76. arXiv:1410.2803. doi:10.1007/978-3-319-26850-7_5. ISBN  9783319268491.
  13. ^ Almeida, Paulo Sérgio; Shoker, Ali; Baquero Carlos (2016-03-04). "Delta State Replicated Data Types". Paralel ve Dağıtık Hesaplama Dergisi. 111: 162–173. arXiv:1603.01529. Bibcode:2016arXiv160301529S. doi:10.1016 / j.jpdc.2017.08.003.
  14. ^ Burckhardt, Sebastian; Gotsman, Alexey; Yang, Hongseok; Zawirski, Marek (23 Ocak 2014). "Çoğaltılmış Veri Türleri: Spesifikasyon, Doğrulama, Optimallik". 41. ACM SIGPLAN-SIGACT Programlama Dillerinin İlkeleri Sempozyumu Bildirileri. s. 271–284. doi:10.1145/2535838.2535848. ISBN  9781450325448.
  15. ^ Annette Bieniusa, Marek Zawirski, Nuno Preguiça, Marc Shapiro, Carlos Baquero, Valter Balegas, Sérgio Duarte, "Optimize Edilmiş Çatışmasız Çoğaltılmış Set" (2012) arXiv:1210.3368
  16. ^ Roh, Huyn-Gul; Jeon, Myeongjae; Kim, Jin-Soo; Lee, Joonwon (2011). "Replicated Abstract Data Types: Collaborative Applications için Yapı Taşları". Paralel ve Dağıtık Hesaplama Dergisi. 71 (2): 354–368. doi:10.1016 / j.jpdc.2010.12.006.
  17. ^ Weiss, Stephane; Urso, Pascal; Molli Pascal (2010). "Logoot-Undo: P2P Ağlarında Dağıtılmış Ortak Düzenleme Sistemi". Paralel ve Dağıtık Sistemlerde IEEE İşlemleri. 21 (8): 1162–1174. doi:10.1109 / TPDS.2009.173. ISSN  1045-9219.
  18. ^ Nédelec, Brice; Molli, Pascal; Mostefaoui, Achour; Desmontils, Emmanuel (2013). "LSEQ". LSEQ, dağıtılmış işbirliğine dayalı düzenlemede diziler için uyarlanabilir bir yapı. s. 37. doi:10.1145/2494266.2494278. ISBN  9781450317894.
  19. ^ Nédelec, Brice; Molli, Pascal; Mostefaoui, Achour (2016). "CRATE: Tarayıcılarımızla Birlikte Hikayeler Yazmak". World Wide Web 25. Uluslararası Konferans Rehberi Bildirileri. s. 231. doi:10.1145/2872518.2890539. Arşivlenen orijinal 2020-01-01 tarihinde. Alındı 2020-01-01.
  20. ^ André, Luc; Martin, Stéphane; Oster, Gérald; Ignat Claudia-Lavinia (2013). "Büyük Ölçekli İşbirliğine Dayalı Düzenleme için Değişikliklerin Uyarlanabilir Ayrıntı Düzeyini Destekleme". Uluslararası İşbirliğine Dayalı Hesaplama Konferansı Bildirileri: Ağ Oluşturma, Uygulamalar ve İş Paylaşımı - CollaborateCom 2013. sayfa 50–59. doi:10.4108 / icst.collaboratecom.2013.254123.
  21. ^ "SESSİZ". Sahil Takımı. 24 Mart 2016.
  22. ^ Nicolas, Matthieu; Elvinger, Victorien; Oster, Gérald; Ignat, Claudia-Lavinia; Charoy, François (2017). "MUTE: Eşler Arası Web Tabanlı Gerçek Zamanlı İşbirliğine Dayalı Düzenleyici". ECSCW Panel, Demo ve Poster Bildirileri 2017. doi:10.18420 / ecscw2017_p5.
  23. ^ "CRDT'ler hakkında". Alındı 2020-06-18.
  24. ^ Bourgon, Peter (9 Mayıs 2014). "Roshi: zaman damgalı etkinlikler için bir CRDT sistemi". Ses bulutu.
  25. ^ "Riak 2.0 Tanıtımı: Veri Türleri, Güçlü Tutarlılık, Tam Metin Arama ve Çok Daha Fazlası". Basho Technologies, Inc. 29 Ekim 2013.
  26. ^ Hoff, Todd (13 Ekim 2014). "League of Legends Sohbeti 70 Milyon Oyuncuya Nasıl Ölçeklendirdi - Çok Sayıda Minyon Alır". Yüksek Ölçeklenebilirlik.
  27. ^ Macklin, Dan. "bet365: bet365 neden Riak'ı seçti?". Basho.
  28. ^ Ivanov, Dmitry. "CRDT'lerin Pratik Açıklanması".
  29. ^ McCord, Chris. "Phoenix Presence'ı Özel Yapan Şey".
  30. ^ Mak, Sander. "Facebook, QCon NY 2014'te Apollo'yu Duyurdu".
  31. ^ "Atom için Teletype ile gerçek zamanlı olarak birlikte kodlayın". Atom.io. 15 Kasım 2017.
  32. ^ "Github'da OrbitDB / ipfs-log". Alındı 2018-09-07.
  33. ^ "Çalışma zamanı iç gözleminden türetilen IOS Objective-C üstbilgileri: NST / IOS-Runtime-Headers". 2019-07-25.

Dış bağlantılar