- เอนจินสตอเรจแบบฝังตัวที่สร้างขึ้นด้วย Log-Structured Merge-tree
- ต่างจากเอนจินสตอเรจแบบ LSM-tree ทั่วไป SlateDB เขียนข้อมูลลงใน object storage (S3, GCS, ABS, MinIO, Tigris เป็นต้น)
- ใช้ประโยชน์จาก object storage เพื่อมอบความจุสตอเรจที่แทบไม่จำกัด ความทนทานสูง และความสามารถในการทำซ้ำข้อมูลได้ง่าย
- อย่างไรก็ตาม ข้อเสียของ object storage คือมีค่าหน่วงสูงกว่าและมีค่าใช้จ่ายด้าน API มากกว่าดิสก์ภายในเครื่อง
กลยุทธ์ของ SlateDB ในการหลีกเลี่ยงข้อเสีย
- ประมวลผลการเขียนแบบแบตช์เพื่อลดค่าใช้จ่าย API สำหรับการเขียน (PUT) ที่สูง
- แทนที่จะเขียนทุกการเรียก
put() ลงใน object storage จะทำการ flush MemTable ไปยัง Sorted String Table (SST) บน object storage เป็นระยะ
- สามารถกำหนดช่วงเวลาในการ flush ได้
- มีเมธอด
put แบบ asynchronous เพื่อลดค่าหน่วงของการเขียนด้วย
- ไคลเอนต์ที่ให้ความสำคัญกับความทนทานสูงสามารถ
await ใน put จนกว่า MemTable จะถูก flush ไปยัง object storage ได้ (เป็นการแลกเปลี่ยนระหว่างค่าหน่วงกับความทนทาน)
- ไคลเอนต์ที่ต้องการค่าหน่วงต่ำสามารถเพิกเฉยต่อ future ที่คืนมาจาก
put ได้
- ใช้เทคนิคแคชของ LSM-tree มาตรฐานเพื่อลดค่าหน่วงในการอ่านและค่าใช้จ่าย API สำหรับการอ่าน (GET)
- แคชบล็อกในหน่วยความจำ, การบีบอัด, Bloom filter, แคชดิสก์ SST แบบโลคัล
ยังไม่มีความคิดเห็น