- ฟอร์แมตการซีเรียลไลซ์แบบไบนารี Zero-Copy ที่พัฒนาขึ้นเพื่อ ลบเส้นแบ่งระหว่างการพาร์สข้อมูลและการซีเรียลไลซ์
- เข้ารหัสข้อมูลด้วย โครงสร้าง B-tree ภายในบัฟเฟอร์ต่อเนื่องเพียงก้อนเดียว ทำให้เข้าถึงและแก้ไขฟิลด์ตามต้องการได้ในเวลา
O(log n)
- ฟอร์แมตในหน่วยความจำทำงานเป็นฟอร์แมตสำหรับส่งข้อมูลได้โดยตรง จึงสามารถรับส่งได้ทันทีโดยไม่ต้องมีขั้นตอนพาร์สหรือซีเรียลไลซ์ซ้ำ
- ทันทีที่รับข้อมูล ก็สามารถค้นหาคีย์ แก้ไขค่า และส่งต่อได้ทั้งหมดด้วยเพียง การคัดลอกหน่วยความจำ (
memcpy)
- เป็นโครงสร้างแบบ ไม่มีสคีมา (self-describing) จึงใช้งานได้โดยไม่ต้องมี IDL หรือการกำหนดสคีมา
- รองรับการแปลงไปมาระหว่าง JSON ทำให้เข้ากันได้กับ API และชุดข้อมูลเดิม
- สามารถแสดงผลเป็น JSON ได้เมื่อดีบักหรือตรวจสอบข้อความ
- ออกแบบโดยเน้นประสิทธิภาพ
- ใช้โครงสร้าง B-tree ที่เป็นมิตรกับแคช และมี อิมพลีเมนต์ C ขนาดเล็กเพียง 9.3 kB
- เร็วได้สูงสุด 120 เท่า เมื่อเทียบกับไลบรารี JSON ที่เร็วที่สุดซึ่งใช้ SIMD และ เร็วได้สูงสุด 242 เท่า เมื่อเทียบกับ Google Flatbuffers
- เป็นหนึ่งใน ฟอร์แมตข้อมูลแบบไม่มีสคีมาที่เร็วที่สุดในโลก
- คุณลักษณะทางเทคนิค
- รองรับ การอ่าน/เขียนแบบ zero-copy โดยการทำงาน I/O ทั้งหมดมีความซับซ้อน
O(log n)
- มี การตรวจสอบพอยน์เตอร์และความปลอดภัยของชนิดข้อมูลขณะรันไทม์ ในตัว
- ไม่ใช้
malloc() โดยผู้เรียกเป็นผู้จัดเตรียมบัฟเฟอร์เอง
- มี latency ที่คาดการณ์ได้ และ ใช้หน่วยความจำต่ำ
- พัฒนาบนพื้นฐาน C11 (ไวยากรณ์ GNU C) และไม่มี dependency ภายนอก
- สามารถใช้ yyjson เป็น sub-dependency แบบเลือกได้เพื่อรองรับการแปลง JSON
- องค์ประกอบของ API
- Buffer API: ทำงานบนบัฟเฟอร์ที่ผู้ใช้จัดเตรียมเอง เพื่อการควบคุมหน่วยความจำสูงสุด
- Context API: ซ่อนรายละเอียดการจัดการหน่วยความจำ และมีอินเทอร์เฟซที่ใช้งานง่าย
- ผลการเปรียบเทียบและเบนช์มาร์ก
- มี ความเร็วในการประมวลผลเหนือกว่าอย่างมาก เมื่อเทียบกับฟอร์แมตข้อความอย่าง JSON, BSON, MessagePack
- ให้ ความยืดหยุ่นและความสามารถในการแก้ไขที่สูงกว่า ฟอร์แมตไบนารีอย่าง Cap’n Proto และ Flatbuffers
- ทำผลงาน ระดับแนวหน้า ในการทดสอบกับข้อมูล Twitter API จริง, Kostya JSON, เบนช์มาร์กการซีเรียลไลซ์ C++ และอื่น ๆ
- การออกแบบด้านความปลอดภัย
- มี การตรวจสอบขอบเขตเพื่อป้องกัน overflow, pointer macro แบบแยกตาม generation, การจำกัด recursion, และ การตรวจสอบชนิดข้อมูลขณะรันไทม์
- เหมาะกับการจัดการข้อมูลนำเข้าที่ไม่น่าเชื่อถือ
- บริบทการใช้งาน
- ช่วย เพิ่มประสิทธิภาพการใช้ CPU สูงสุด ในงานอย่างการส่งข้อความผ่านเครือข่ายประสิทธิภาพสูง การประมวลผลข้อมูลแบบเรียลไทม์ และสภาพแวดล้อมแบบฝังตัว
- นำไปใช้ได้ทันทีใน ระบบที่ใช้ C interface
- ไลเซนส์และการขยายต่อ
- เผยแพร่ภายใต้ MIT License และเป็นอิมพลีเมนต์ C แบบอิสระ
- ในอนาคตมีโรดแมปเพิ่มเติม เช่น language binding, เบนช์มาร์กการบีบอัด, และการจัดทำสเปกอย่างเป็นทางการ
- ที่มาและพื้นหลัง
- เป็น โปรเจ็กต์ที่นำแนวคิดจากงานวิจัย Lite² ที่เผยแพร่ในปี 2024 มาสร้างใหม่อย่างอิสระ
- ชื่อ Lite³ สื่อความหมายว่าเบากว่า Lite²
ยังไม่มีความคิดเห็น