ProHoster > Блог > Новини інтернету > Після п'яти років розробки опубліковано другого кандидата в релізи libmdbx 1.0
Після п'яти років розробки опубліковано другого кандидата в релізи libmdbx 1.0
доступний для тестування другий кандидат у релізи бібліотеки libmdbx з реалізацією високопродуктивної, компактної бази даних класу, що вбудовується, ключ-значення. Поточна версія (0.5) є технічним релізом, відзначає завершення будь-яких доопрацювань та перехід до фази публічного фінального тестування та стабілізації, з подальшим формуванням першого повноцінного релізу бібліотеки. Код libmdbx поширюється під ліцензією OpenLDAP Public License.
Бібліотека MDBX є суттєво переробленим відгалуженням від LMDB - транзакційної вбудовуваної СУБД класу «ключ-значення» на основі дерева B+ без попереджувальної журналізації, яка дозволяє багатопотоковим процесам конкурентно та ефективно працювати з локально-розділюваною (не мережевою) БД. У свою чергу MDBX швидше і надійніше LMDB, і при цьому зберігає всі ключові можливості свого прабатька, такі як ACID та неблокуюче читання з лінійним масштабуванням по ядрах CPU.
Найважливіші відмінності MDBX щодо LMDB:
Принципово більше уваги приділяється якості коду, тестуванню та автоматичним перевіркам.
Значно більше контролю під час роботи, починаючи з перевірки параметрів, до внутрішнього аудиту структур бази даних.
Авто-компактифікація та автоматичне керування розміром БД.
Єдиний формат БД для 32-бітових та 64-бітних збірок.
Оцінка обсягу вибірок за діапазонами (range query estimation).
Підтримка ключів вдвічі більшої млинці і розмір сторінки БД, що вибирається користувачем.
Випущений кандидат у релізи libmdbx є результатом прийнятого у серпні 2019 р. рішення про поділ проектів MDBX та MithrilDB. При цьому в libmdbx було вирішено усунути (раціональний) максимум технічного обов'язку та стабілізувати бібліотеку. За фактом у зазначеному напрямку зроблено у 2-3 рази більше, ніж оцінювалося та планувалося вихідно:
Реалізовано підтримку macOS та платформ «другого ешелону»: FreeBSD, Solaris, DragonFly BSD, OpenBSD, NetBSD. Підтримка AIX та HP-UX може бути додана за потреби.
Проведено санацію коду за допомогою Undefined Behavior Sanitizer та Address Sanitizer, усунуто всі попередження при збиранні з "-Wpedantic", всі попередження Coverity Static Analyzer і т.д.
Спеціалізований оптимізований алгоритм внутрішнього сортування (до 2-3 разів швидше за «qsort()» і до 30% швидше за «std::sort()»).
Збільшено максимальну довжину ключа.
Автоматичне керування read ahead (стратегією кешування файлу БД у пам'яті).
Більш агресивна та швидка автокомпактифікація.
Більше оптимальна стратегія злиття сторінок B+ дерева.
Контролює нелокальні файлові системи (NFS, Samba тощо) для запобігання пошкодженню БД при неправильному використанні.
Розширено набір тестів.
Розробка «наступної» версії libmdbx буде продовжена в рамках окремого проекту MithrilDBУ той час як вектор розробки «поточної» версії MDBX спрямований на заморожування набору можливостей і стабілізацію. Таке рішення ухвалено з трьох причин:
Повна несумісність: для реалізації всіх запланованих можливостей MithrilDB потрібен інший (несумісний) формат файлів БД та інше (несумісне) API.
Новий вихідний код: для вихідного коду MithrilDB забезпечено ліцензійну незалежність від LMDB, а сам проект планується опублікувати під іншою ліцензією (схваленою) АБО ЯКЩО ліцензією Apache 2.0, а не OpenLDAP Public License).
Поділ дозволяє уникнути потенційної плутанини, внести більше певності та забезпечити незалежність шляху розвитку проектів.
MithrilDB як і MDBX, також ґрунтується на дереві B+ і також буде відрізнятися гранично високою продуктивністю, при цьому усуваючи ряд важливих недоліків MDBX і LMDB. Зокрема, буде ліквідовано проблему «довгих читань», що виявляється як «розпухання» БД через те, що переробка сміття блокується довгими транзакціями, що читають. Серед нових можливостей MithrilDB слід зазначити:
Підтримка розміщення БД на кількох різнорідних носіях: HDD, SSD та енергонезалежній пам'яті.
Оптимальні стратегії для «цінних» та «малоцінних», для «гарячих», «теплих» та «холодних» даних.
Використання Merkle tree контролю цілісності БД.
Опціональне використання WAL та суттєво вища продуктивно у сценаріях з інтенсивним записом та гарантіями на цілісність даних.