SSTable คืออะไร?


คำตอบ:


107

Sorted Strings Table (ยืมมาจาก google) คือไฟล์ของคู่สตริงคีย์ / ค่าโดยเรียงตามคีย์


4
ขอบคุณสำหรับคำตอบ SO Cassandra ที่ยอดเยี่ยมอีกคำตอบหนึ่ง! BTW คุณเคยเห็นคำถามนี้
ไหม

โดยทั่วไปไม่เปลี่ยนรูปหรือไม่?
Dean J

1
ใช่ sstables ไม่เปลี่ยนรูปโดยการออกแบบ - ซึ่งเป็นคุณสมบัติที่ยอดเยี่ยม
Schildmeijer

มันจะเรียงลำดับและไม่เปลี่ยนรูปได้อย่างไร?
xjcl

56

"SSTable จัดเตรียมแผนที่ที่ไม่เปลี่ยนรูปแบบตามลำดับจากคีย์ไปยังค่าโดยที่ทั้งคีย์และค่าเป็นสตริงไบต์ที่กำหนดเองการดำเนินการมีไว้เพื่อค้นหาค่าที่เกี่ยวข้องกับคีย์ที่ระบุและเพื่อวนซ้ำคู่คีย์ / ค่าทั้งหมดใน a ช่วงคีย์ที่ระบุภายในแต่ละ SSTable มีลำดับของบล็อก (โดยทั่วไปแต่ละบล็อกมีขนาด 64KB แต่สามารถกำหนดค่าได้) ดัชนีบล็อก (เก็บไว้ที่ส่วนท้ายของ SSTable) ใช้เพื่อค้นหาบล็อกดัชนีถูกโหลด ลงในหน่วยความจำเมื่อเปิด SSTable การค้นหาสามารถทำได้ด้วยการค้นหาดิสก์เดียว: อันดับแรกเราจะพบบล็อกที่เหมาะสมโดยทำการค้นหาไบนารีในดัชนีในหน่วยความจำจากนั้นอ่านบล็อกที่เหมาะสมจากดิสก์หรือ SSTable สามารถแมปลงในหน่วยความจำได้อย่างสมบูรณ์ซึ่งช่วยให้เราทำการค้นหาและสแกนได้โดยไม่ต้องสัมผัสดิสก์"


4
"โดยไม่ต้องสัมผัสดิสก์" -> "โดยที่ไม่รู้ว่ากำลังแตะดิสก์อยู่" หน่วยความจำที่แมป IO เป็นเทคนิคที่มีประโยชน์มากเพราะจะมอบหมาย IO จริงให้กับระบบปฏิบัติการโดยสมมติว่าสามารถทำงานแคชได้ดี (โดยเฉพาะอย่างยิ่งเมื่อหลายกระบวนการใช้ไฟล์เดียวกันร่วมกัน) แต่ก็มีข้อเสียตรงที่คุณไม่สามารถควบคุมมันได้ หากเพจไม่ได้อยู่ในหน่วยความจำเธรดจะบล็อกและไม่สามารถดำเนินการอื่นได้ เปรียบเทียบกับ "async IO" ซึ่งคุณสามารถลงทะเบียนการโทรกลับและทำสิ่งอื่น ๆ ในเธรดเดียวกันได้ในขณะที่ IO กำลังรอดำเนินการ
ithkuil

2
@ithkuil: คุณสามารถควบคุมหน่วยความจำที่แมป IO ได้อย่างน้อยจนถึงจุดที่สามารถมั่นใจได้ว่าเพจบางเพจอยู่ในหน่วยความจำหรือได้รับการผูกมัดกับดิสก์ (ยังมีที่ว่างสำหรับเพจที่ไม่รับประกันว่าจะอยู่ใน หน่วยความจำ แต่เป็นอย่างดี) นั่นคือสิ่งมหัศจรรย์เช่น mlock (), msync () และ MAP_LOCKED เป็นข้อมูลเกี่ยวกับ คุณยังสามารถทำความเข้าใจว่าปัจจุบันคืออะไรและไม่ได้รับการเพจผ่าน mincore ()
Christopher Smith

2
@ChristopherSmith: ใช่คุณพูดถูกมีวิธีควบคุมมัน อย่างไรก็ตามโดยปกติจะใช้สำหรับส่วนประสิทธิภาพที่สำคัญ (เรียลไทม์) หรือปัญหาที่เกี่ยวข้องกับความปลอดภัย (เช่นการหลีกเลี่ยงไม่ให้รหัสผ่านในหน่วยความจำถูกสลับบนดิสก์) ไฟล์ที่แมปหน่วยความจำมีประโยชน์มากเนื่องจากคุณไม่จำเป็นต้องตัดสินใจว่าจะเก็บไว้ในหน่วยความจำเท่าใด มิฉะนั้นคุณสามารถอ่านไฟล์ทั้งหมดในหน่วยความจำโดยไม่ต้อง mmap และได้ผลเช่นเดียวกัน อันที่จริงฉันเพิ่งอ่านรหัสคาสซานดรา การโทรเพียงครั้งเดียวจะmlockall(MCL_CURRENT);เสร็จสิ้นเมื่อเริ่มต้น ดูเพิ่มเติม: goo.gl/AEgPM
ithkuil

4
ใบเสนอราคาดังกล่าวข้างต้นจากกระดาษ BigTable
ShreevatsaR

4

แท็บเล็ตจะถูกจัดเก็บในรูปแบบของ SSTables

SSTable (แมปโดยตรงกับ GFS) เป็นหน่วยเก็บข้อมูลที่ไม่เปลี่ยนรูปตามคีย์ - ค่า จัดเก็บข้อมูลแต่ละชิ้นมีขนาด 64 KB

คำจำกัดความ:

  • ดัชนีของคีย์: คีย์และตำแหน่งเริ่มต้น
  • Chunk เป็นหน่วยเก็บข้อมูลใน GFS การจัดการแบบจำลองจะแบ่งเป็นชิ้น ๆ

3
  • SSTable (engl. Sorted Strings Table) คือไฟล์ของคู่สตริงคีย์ / ค่าโดยเรียงตามคีย์

  • SSTable จัดเตรียมแผนที่ที่ไม่เปลี่ยนรูปแบบต่อเนื่องตามลำดับจากคีย์ไปยังค่าโดยที่ทั้งคีย์และค่าเป็นสตริงไบต์ที่กำหนดเอง

  • ภายในแต่ละ SSTable จะมีลำดับของบล็อก (โดยทั่วไป
    แต่ละบล็อกจะมีขนาด 64KB แต่สามารถกำหนดค่าได้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.