1P by neo 2023-09-04 | favorite | 댓글 1개
  • Rust로 작성된 'cola'라는 실시간 협업 편집을 위한 텍스트 CRDT(Conflict-free Replicated Data Type)의 이론적 배경과 기술적 구현에 대한 설명
  • CRDT는 여러 사이트에서 동시에 복제 및 수정할 수 있는 데이터 구조로, 중앙 권한의 조정 없이도 수렴이 보장됨
  • 글의 내용은 문서의 상태 표현과 그것을 변형하는 편집, 코드에서 프레임워크를 효율적으로 구현하는 방법, 그리고 cola와 다른 Rust 기반 CRDT 라이브러리와의 벤치마크 비교로 나뉨
  • 저자는 텍스트에서 'Anchors'라는 개념을 소개하며, 이는 동시성을 활성화하는 방식으로 삽입과 삭제를 모두 지정하는 데 사용됨
  • 논문에서는 'Lamport timestamps'를 사용하여 Lamport timestamp에 따라 내림차순으로 정렬함으로써 충돌하는 삽입을 처리하는 방법에 대해 논의함
  • 저자는 삭제를 처리하기 위해 'tombstones'라는 개념을 소개함. tombstoned 문자는 삭제로 표시되지만 문서에는 계속 유지됨
  • 논문에서는 'G-trees'(grow-only trees)의 사용을 통해 시스템의 성능을 향상시키는 방법에 대해 논의함. G-trees는 양방향으로 순회할 수 있어 동일한 커서 위치에서 반복적인 편집이 매우 빠름
  • 저자는 cola와 Rust로 구현된 다른 세 가지 CRDT인 diamond-types, automerge, yrs와의 벤치마크 비교로 논문을 마무리함. Cola는 상류와 하류 방향 모두에서 다른 세 가지를 능가함
  • 저자는 cola가 현재 알려진 가장 빠른 텍스트 CRDT 구현이지만, 아직 제작 준비를 위해 해야 할 작업이 있다고 지적함. 예를 들어 undo/redo 및 기타 기능을 지원하는 것 등
Hacker News 의견
  • 한 댓글에서는 G-트리가 기본적으로 부모 포인터가 추가된 B-트리이며, 이를 배열에 저장해도 그 구조가 근본적으로 변하지 않는다고 주장
  • Cola가 굵게, 기울임꼴 등과 같은 리치 텍스트 포맷팅 범위를 지원하지 않을 수 있다는 우려가 있으며, 댓글 작성자는 리치 텍스트 CRDT 알고리즘의 최신 기술로 Peritext를 제안
  • Cola와 Automerge 또는 Y.js/Yrs와 같은 유사한 기술 간의 성능이나 기능 비교에 대한 질문이 있음
  • 동적 배열에서 노드 소유권 문제에 대한 해결책이 논의되었으며, 이때 모든 노드는 동적 배열에 저장되고 인덱스는 다른 노드를 참조하는 데 사용됨
  • 'slotmap'이라는 crate를 사용하여 인덱스가 이동하거나 다른 값들을 가리키는 것에 대한 걱정 없이 삭제를 지원하도록 제안
  • 일부 사용자들은 Etherpad와 Word와 같은 다른 도구들이 실패한 프로젝트에서 Cola를 시도해보는 데 관심을 표현
  • 사용된 벤치마크의 공정성에 대한 비판이 제기되었는데, 이는 작업이나 실제 텍스트를 계산하고 저장하지 않기 때문
  • 이 Cola가 Ian Piumarta의 동명의 작품과 혼동되어서는 안 된다는 사항도 얘기됨
  • 텍스트 CRDT를 사용하여 브라우저에서 양식의 협업 편집을 가능하게 하는 것에 대한 질문도 있음
  • "CRDT"라는 약어를 문서에서 정의하는 것이 제안되었는데, 이는 매우 흔하지 않아 독자들이 혼란스러워할 수 있기 때문
  • Cola를 tiptap/prosemirror 또는 다른 텍스트 편집기와 함께 사용하여 CRDT 기반의 협업 편집을 추가할 수 있는 가능성에 대한 질문도 제기