ห้องสมุด 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