1 คะแนน โดย GN⁺ 2023-09-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • คำอธิบายเกี่ยวกับพื้นฐานเชิงทฤษฎีและการนำไปใช้ทางเทคนิคของ text CRDT (Conflict-free Replicated Data Type) สำหรับการแก้ไขแบบร่วมมือกันแบบเรียลไทม์ชื่อ cola ที่เขียนด้วย Rust
  • CRDT คือโครงสร้างข้อมูลที่สามารถทำซ้ำและแก้ไขพร้อมกันได้จากหลายไซต์ โดยรับประกันการลู่เข้าสู่สถานะเดียวกันได้แม้ไม่มีการประสานงานจากศูนย์กลาง
  • เนื้อหาในบทความแบ่งออกเป็นการแสดงสถานะของเอกสารและการแก้ไขที่เปลี่ยนแปลงสถานะนั้น วิธีทำให้เฟรมเวิร์กในโค้ดมีประสิทธิภาพ และการเปรียบเทียบเบนช์มาร์กระหว่าง cola กับไลบรารี CRDT บน Rust อื่น ๆ
  • ผู้เขียนแนะนำแนวคิดที่เรียกว่า Anchors ในข้อความ ซึ่งใช้ระบุได้ทั้งการแทรกและการลบในลักษณะที่รองรับการทำงานพร้อมกัน
  • บทความกล่าวถึงวิธีจัดการการแทรกที่ขัดแย้งกันโดยใช้ Lamport timestamps และจัดเรียงตาม Lamport timestamp แบบลำดับจากมากไปน้อย
  • ผู้เขียนแนะนำแนวคิด tombstones เพื่อจัดการการลบ โดยอักขระที่ถูก tombstone จะถูกทำเครื่องหมายว่าถูกลบ แต่ยังคงอยู่ในเอกสาร
  • บทความกล่าวถึงวิธีปรับปรุงประสิทธิภาพของระบบผ่านการใช้ G-trees (grow-only trees) ซึ่งสามารถเดินสำรวจได้ทั้งสองทิศทาง ทำให้การแก้ไขซ้ำ ๆ ที่ตำแหน่งเคอร์เซอร์เดียวกันทำได้รวดเร็วมาก
  • ผู้เขียนปิดท้ายด้วยการเปรียบเทียบเบนช์มาร์กระหว่าง cola กับ CRDT ที่พัฒนาด้วย Rust อีกสามตัว ได้แก่ diamond-types, automerge และ yrs โดย cola ทำได้ดีกว่าทั้งสามตัวทั้งในทิศทาง upstream และ downstream
  • ผู้เขียนชี้ว่า cola เป็นการนำ text CRDT ไปใช้ที่เร็วที่สุดเท่าที่ทราบในปัจจุบัน แต่ยังมีงานที่ต้องทำก่อนพร้อมใช้งานจริง เช่น การรองรับ undo/redo และฟีเจอร์อื่น ๆ

1 ความคิดเห็น

 
GN⁺ 2023-09-04
ความคิดเห็นจาก Hacker News
  • ความคิดเห็นหนึ่งอ้างว่า G-tree โดยพื้นฐานแล้วคือ B-tree ที่เพิ่ม parent pointer และแม้จะเก็บไว้ในอาร์เรย์ โครงสร้างของมันก็ไม่ได้เปลี่ยนไปโดยพื้นฐาน
  • มีความกังวลว่า Cola อาจไม่รองรับช่วงการจัดรูปแบบ rich text เช่น ตัวหนา ตัวเอียง เป็นต้น และผู้แสดงความคิดเห็นเสนอ Peritext เป็นเทคโนโลยีล่าสุดสำหรับอัลกอริทึม rich text CRDT
  • มีคำถามเกี่ยวกับการเปรียบเทียบด้านประสิทธิภาพหรือความสามารถระหว่าง Cola กับเทคโนโลยีที่คล้ายกัน เช่น Automerge หรือ Y.js/Yrs
  • มีการพูดถึงวิธีแก้ปัญหาเรื่อง ownership ของโหนดใน dynamic array โดยเก็บโหนดทั้งหมดไว้ใน dynamic array และใช้อินเด็กซ์เพื่ออ้างอิงโหนดอื่น
  • มีข้อเสนอให้ใช้ crate ชื่อ slotmap เพื่อรองรับการลบโดยไม่ต้องกังวลว่าอินเด็กซ์จะย้ายตำแหน่งหรือไปชี้ค่าอื่น
  • ผู้ใช้บางคนแสดงความสนใจที่จะลองใช้ Cola กับโปรเจ็กต์ที่เครื่องมืออื่นอย่าง Etherpad และ Word ใช้งานไม่สำเร็จ
  • มีการวิจารณ์เรื่องความยุติธรรมของเบนช์มาร์กที่ใช้ เนื่องจากไม่ได้คำนวณและจัดเก็บการทำงานหรือข้อความจริง
  • ยังมีการกล่าวด้วยว่า Cola ตัวนี้ไม่ควรถูกสับสนกับผลงานชื่อเดียวกันของ Ian Piumarta
  • มีคำถามเกี่ยวกับการใช้ text CRDT เพื่อให้สามารถแก้ไขฟอร์มร่วมกันในเบราว์เซอร์ได้
  • มีข้อเสนอให้ระบุความหมายของตัวย่อ "CRDT" ในเอกสาร เพราะไม่ใช่คำที่พบได้บ่อยมากและอาจทำให้ผู้อ่านสับสน
  • ยังมีคำถามเกี่ยวกับความเป็นไปได้ในการใช้ Cola ร่วมกับ tiptap/prosemirror หรือ text editor อื่น ๆ เพื่อเพิ่มการแก้ไขร่วมกันแบบอิง CRDT