การเปิดตัว DBMS libmdbx 0.10.4 และ libfpta 0.3.9 แบบฝังประสิทธิภาพสูง

ไลบรารี libmdbx 0.10.4 (MDBX) เปิดตัวพร้อมกับการใช้งานฐานข้อมูลคีย์-ค่าแบบฝังขนาดกะทัดรัดประสิทธิภาพสูง และไลบรารี libfpta 0.3.9 (FPTA) ที่เกี่ยวข้อง ซึ่งใช้การแสดงข้อมูลแบบตารางด้วยดัชนีรองและดัชนีผสม ด้านบนของ MDBX ไลบรารีทั้งสองเผยแพร่ภายใต้ใบอนุญาตที่ได้รับอนุมัติจาก OSI รองรับระบบปฏิบัติการและสถาปัตยกรรมปัจจุบันทั้งหมด เช่นเดียวกับ Russian Elbrus 2000

ในอดีต libmdbx เป็นการปรับปรุง LMDB DBMS ในเชิงลึก และเหนือกว่ารุ่นก่อนในด้านความน่าเชื่อถือ ชุดคุณลักษณะ และประสิทธิภาพ เมื่อเปรียบเทียบกับ LMDB แล้ว libmdbx ให้ความสำคัญกับคุณภาพของโค้ด ความเสถียรของ API การทดสอบ และการตรวจสอบอัตโนมัติเป็นอย่างมาก มียูทิลิตี้สำหรับตรวจสอบความสมบูรณ์ของโครงสร้างฐานข้อมูลพร้อมความสามารถในการกู้คืนบางอย่าง

ด้วยเทคโนโลยีที่ชาญฉลาด libmdbx นำเสนอ ACID, การเปลี่ยนแปลงซีเรียลไลเซชันที่แข็งแกร่ง และการอ่านแบบไม่บล็อกด้วยการปรับขนาดเชิงเส้นทั่วคอร์ CPU รองรับการย่อขนาดอัตโนมัติ การจัดการขนาดฐานข้อมูลอัตโนมัติ และการประมาณค่าคิวรีช่วง ตั้งแต่ปี 2016 เป็นต้นมา โครงการต่างๆ ได้รับทุนจาก Positive Technologies และตั้งแต่ปี 2017 ได้ถูกนำมาใช้ในผลิตภัณฑ์ของบริษัท

libmdbx มี C++ API รวมถึงการผูกภาษาที่ผู้สนใจรองรับสำหรับ Rust, Haskell, Python, NodeJS, Ruby, Go และ Nim สำหรับ libfpta เฉพาะคำอธิบาย API เท่านั้นที่จะเผยแพร่ต่อสาธารณะในรูปแบบของไฟล์ส่วนหัว C/C++

นวัตกรรมที่สำคัญ การปรับปรุง และการแก้ไขที่เพิ่มเข้ามานับตั้งแต่ข่าวก่อนหน้าเมื่อวันที่ 9 พฤษภาคม:

  • เปิดใช้งานการสร้างที่ทำซ้ำได้
  • แก้ไขข้อบกพร่องเนื่องจากในสถานการณ์ที่หายากมาก การวนซ้ำ/หยุดนิ่งอาจเกิดขึ้นระหว่างการทำธุรกรรม ปัญหาดังกล่าวได้รับการระบุโดยผู้เชี่ยวชาญด้านเทคโนโลยีเชิงบวกในระหว่างการทดสอบภายในของผลิตภัณฑ์ของตนเอง
  • การทดสอบได้รับการปรับปรุงและขยายสถานการณ์การทดสอบเพื่อตรวจสอบสถานะที่ไม่ใช่ไอโซมอร์ฟิกที่สามารถเข้าถึงได้ทั้งหมดของแผนผังเพจและเนื้อหา GC ภายในฐานข้อมูล
  • ใน C++ API มีการแก้ไข "noException" พิเศษ เพิ่มโอเวอร์โหลดเพิ่มเติมสำหรับเมธอด "cursor::erase()" การใช้งานบัฟเฟอร์ได้รับการงดเว้นการใช้ "std::string" เพื่อให้แน่ใจว่ามีการจัดตำแหน่ง (เกี่ยวข้องกับ CLANG libstdc++)
  • การถดถอยในอัลกอริธึมการหกเพจสกปรก (การดีดออกแบบเลือกของเพจฐานข้อมูลที่เปลี่ยนแปลง) ที่แสดงออกมาโดยข้อผิดพลาด MDBX_PROBLEM ที่ไม่คาดคิดซึ่งหาได้ยากเมื่อเปลี่ยนแปลงข้อมูลในธุรกรรมขนาดใหญ่ได้ถูกกำจัดออกไป
  • การทดสอบขั้นตอนดำเนินการพร้อมกับการตรวจสอบเพิ่มเติมจำนวนหนึ่งเพื่อให้มั่นใจถึงความเสถียรในกรณีที่เกิดความเสียหายโดยเจตนาต่อฐานข้อมูล
  • แก้ไขคำเตือนเล็กๆ น้อยๆ ปัญหา UndefiorBehaviorSanitizer และ Coverity Scan
  • แก้ไขการตรวจสอบแฟล็กภายใน "P_DIRTY" ที่ล้าสมัยและไม่ได้ใช้อีกต่อไปในเพจที่ซ้อนกันภายในอิมเมจฐานข้อมูลที่สร้างโดยไลบรารีเวอร์ชันเก่า
  • ในสคริปต์ CMake การค้นหาส่วนประกอบคอมไพเลอร์ที่จำเป็นสำหรับ LTO (การเพิ่มประสิทธิภาพเวลาลิงก์) ได้รับการปรับปรุงแล้ว
  • จำนวนผู้อ่านพร้อมกันสูงสุดเพิ่มขึ้นเป็น 32767
  • ปรับปรุงประสิทธิภาพเมื่อใช้ Valgrind และ AddressSanitizer
  • บน Windows การใช้ SRW-lock แบบเรียกซ้ำเมื่อทำงานในโหมด MDBX_NOTLS (โดยไม่ต้องใช้ที่จัดเก็บในเครื่องเธรด) จะถูกกำจัด การสร้าง bootid ได้รับการแก้ไขหากเวลาของระบบเปลี่ยนแปลง การตรวจจับ WSL1 และ WSL2 ได้รับการปรับปรุง และความสามารถในการ เพิ่มการเปิดฐานข้อมูลบน Plan 9 ที่ติดตั้งผ่าน DrvFS แล้ว
  • โดยรวมแล้ว มีการเปลี่ยนแปลงมากกว่า 160 รายการใน 57 ไฟล์ มีการเพิ่มประมาณ 5000 บรรทัด และลบประมาณ 2500 บรรทัด

ฉันขอขอบคุณทีมงานโครงการ Eragon (ระบบนิเวศ Ethereum) เป็นพิเศษสำหรับความช่วยเหลือในการทดสอบในสถานการณ์การใช้งานที่รุนแรง เป็นสิ่งสำคัญที่ภายในห้าเดือนนับตั้งแต่การเปิดตัว libmdbx v0.10.0 โดยมีปริมาณฐานข้อมูล 1-2 TB ในการติดตั้ง Erigon แต่ละครั้ง (ใช้กับโหนด Ethereum 7%) มีรายงานความเสียหายของฐานข้อมูลเพียงสามฉบับเท่านั้นที่ได้รับ ซึ่งเกิดขึ้นเนื่องจากเหตุผลภายนอก ไม่ใช่ข้อผิดพลาดของซอฟต์แวร์: ในสองกรณีสาเหตุคือความล้มเหลวของ RAM ประการที่สามคือข้อผิดพลาดในการรีเซ็ตข้อมูลในการกำหนดค่าเฉพาะของระบบย่อยการจัดเก็บข้อมูลโดยใช้ BTRFS

ที่มา: opennet.ru

เพิ่มความคิดเห็น