• เอนจินสตอเรจแบบฝังตัวที่สร้างขึ้นด้วย 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 แบบโลคัล

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น