ผู้สมัครรุ่น libmdbx v1.0 รุ่นที่สองหลังจากพัฒนามาห้าปี

ห้องสมุด libmdbx.libmdbx является существенно переработанным потомком LMDB — предельно высокопроизводительной, компактной встраиваемой базой данных класса ключ-значение.
Текущая версия v0.5 является техническим релизом, отмечает завершение каких-либо доработок и переход к фазе публичного финального тестирования и стабилизации, с последующем формированием первого полноценного релиза библиотеки.

แอลเอ็มดีบี является достаточно известной транзакционной встраиваемой СУБД класса «ключ-значение» на основе ต้นไม้ B+ ไม่มี การบันทึกเชิงรุก, которая позволяет рою многопоточных процессов конкурентно и предельно эффективно работать с локально-разделяемой (не сетевой) БД. В свою очередь MDBX быстрее и надежнее LMDB, при этом libmdbx сохраняет все ключевые возможности своего прародителя, такие как กรด и неблокирующее чтение с линейным масштабированием по ядрам CPU, а также добавляет несколько новых.

Описание отличий и усовершенствований libmdbx относительно LMDB заслуживает отдельной статьи (планируется публикации на «Хабре» и «Medium»). Здесь же уместно упомянуть самые важные и заметные:

  • โดยพื้นฐานแล้ว เราให้ความสำคัญกับคุณภาพโค้ด การทดสอบ และการตรวจสอบอัตโนมัติมากขึ้น
  • การควบคุมที่มากขึ้นระหว่างการดำเนินการ ตั้งแต่การตรวจสอบพารามิเตอร์ไปจนถึงการตรวจสอบโครงสร้างฐานข้อมูลภายใน
  • ย่อขนาดอัตโนมัติและจัดการขนาดฐานข้อมูลอัตโนมัติ
  • รูปแบบฐานข้อมูลเดียวสำหรับแอสเซมบลี 32 บิตและ 64 บิต
  • Оценка объема выборок по диапазонам (range query estimation).
  • รองรับคีย์ที่มีขนาดใหญ่เป็นสองเท่าของแพนเค้กและขนาดหน้าฐานข้อมูลที่ผู้ใช้เลือกได้

Выпущенный релиз-кандидат libmdbx является результатом решения (см далее) о разделении проектов MDBX и MithrilDB в августе 2019. При этом в libmdbx было решено устранить (рациональный) максимум технического долга и стабилизировать библиотеку. По-факту в обозначенном направлении сделано в 2-3 раза больше, чем оценивалось и планировалось исходно:

  • Реализована поддержка Mac OS и платформ «второго эшелона»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Поддержка AIX и HP -UX может быть добавлена при необходимости.
  • Проведена санация кода при помощи Undefined Behavior Sanitizer и Address Sanitizer, устранены все предупреждения при сборке с -Wpedantic, все предупреждения Coverity Static Analyzer и т. д.
  • อัปเดต คำอธิบาย API.
  • Амальгамация исходного кода для удобства встраивания.
  • การสนับสนุน CMake
  • รองรับการทำธุรกรรมที่ซ้อนกัน
  • การใช้ bootid เพื่อตรวจสอบว่าระบบปฏิบัติการรีบูตหรือไม่ (หยุดฐานข้อมูลสกปรก)
  • Сквозной подсчет обновлённых/старых страниц и расширенная информация о транзакциях.
  • ตัวเลือก MDBX_ACCEDE สำหรับการเชื่อมต่อกับฐานข้อมูลที่เปิดอยู่แล้วในโหมดที่เข้ากันได้
  • ใช้ การปิดกั้น OFD เมื่อพร้อมใช้งาน
  • การสำรองข้อมูลร้อนในไปป์
  • Специализированный оптимизированный алгоритм внутренней сортировки (до 2-3 раз быстрее qsort() и до 30% быстрее std::sort()).
  • เพิ่มความยาวคีย์สูงสุดแล้ว
  • ควบคุมการอ่านล่วงหน้าโดยอัตโนมัติ (กลยุทธ์การแคชไฟล์ฐานข้อมูลในหน่วยความจำ)
  • การย่อขนาดอัตโนมัติที่ก้าวร้าวและรวดเร็วยิ่งขึ้น
  • กลยุทธ์ที่เหมาะสมที่สุดสำหรับการรวมเพจ B+ tree
  • Контроль не-локальных файловых систем (NFS, Samba и т.п.) для предотвращения повреждения БД при неверном использовании.
  • มีการขยายชุดการทดสอบ

การพัฒนา libmdbx เวอร์ชัน "ถัดไป" จะดำเนินต่อไปเป็นโปรเจ็กต์แยกต่างหาก มิธริลดีบีในขณะที่เวกเตอร์การพัฒนาของ MDBX เวอร์ชัน "ปัจจุบัน" มุ่งเป้าไปที่การหยุดชุดคุณลักษณะและทำให้เสถียร การตัดสินใจครั้งนี้เกิดขึ้นด้วยเหตุผลสามประการ:

  • เข้ากันไม่ได้โดยสิ้นเชิง: MithrilDB ต้องการรูปแบบไฟล์ฐานข้อมูลอื่น (เข้ากันไม่ได้) และ API อื่น (เข้ากันไม่ได้) เพื่อใช้คุณสมบัติที่วางแผนไว้ทั้งหมด
  • ซอร์สโค้ดใหม่: ซอร์สโค้ด MithrilDB ได้รับใบอนุญาตโดยไม่ขึ้นอยู่กับ LMDB และตัวโครงการเองก็วางแผนที่จะเผยแพร่ภายใต้ใบอนุญาตอื่น (อนุมัติโดย หรือถ้า อนุญาต Apache 2.0และไม่ OpenLDAP Foundation).
  • Разделение позволяет избежать потенциальную путаницу, внести больше определенности и обеспечить независимость пути развития проектов.

MithrilDB ก็เหมือนกับ MDBX เช่นกัน ต้นไม้ B+ และยังจะนำเสนอประสิทธิภาพที่สูงมาก ในขณะเดียวกันก็ขจัดข้อเสียพื้นฐานหลายประการของ MDBX และ LMDB โดยเฉพาะอย่างยิ่งปัญหา "การอ่านนาน" ซึ่งแสดงออกมาว่าเป็น "การบวม" ของฐานข้อมูลเนื่องจากข้อเท็จจริงที่ว่าการประมวลผลขยะถูกบล็อกโดยธุรกรรมการอ่านนาน ๆ จะถูกกำจัด คุณสมบัติใหม่ของ MithrilDB ประกอบด้วย:

  • поддержка размещения БД на нескольких разнородных носителях: HDD, SSD и энергонезависимой памяти.
  • оптимальные стратегии для «ценных» и «малоценных», для «горячих», «теплых» и «холодных» данных.
  • использование Merkle tree для контроля целостности БД.
  • опциональное использование WAL и существенно более высокая производительно в сценариях с интенсивной записью и гарантиями на целостность данных.
  • ленивая догоняющая фиксация данных на дисках.

ที่มา: linux.org.ru

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