Phát hành DBMS nhúng hiệu suất cao libmdbx 0.10

Sau ba tháng phát triển, libmdbx 0.10.0 (MDBX) đã được phát hành, triển khai cơ sở dữ liệu khóa-giá trị nhúng nhỏ gọn, hiệu suất cao. Mã libmdbx được cấp phép theo Giấy phép Công cộng OpenLDAP. libmdbx là một bản làm lại sâu của LMDB DBMS và, theo các nhà phát triển, vượt trội hơn so với tổ tiên của nó về độ tin cậy, phạm vi khả năng và hiệu suất. Người ta tuyên bố rằng libmdbx nhanh hơn tới 20% so với LMDB trong các tình huống CRUD và nhanh hơn tới 30% nếu các biện pháp kiểm soát nội bộ bị vô hiệu hóa khi xây dựng libmdbx ở mức tương đương với LMDB.

Libmdbx cung cấp ACID, tuần tự hóa thay đổi mạnh mẽ và các lần đọc không chặn có quy mô tuyến tính trên các lõi CPU. Trong libmdbx, người ta chú ý nhiều đến chất lượng mã, hoạt động API ổn định, kiểm tra và kiểm tra tự động. Hỗ trợ tự động thu gọn, quản lý kích thước cơ sở dữ liệu tự động, một định dạng cơ sở dữ liệu duy nhất cho các tập hợp 32 bit và 64 bit cũng như ước tính truy vấn phạm vi. Một tiện ích để kiểm tra tính toàn vẹn của cấu trúc cơ sở dữ liệu với một số khả năng khôi phục được cung cấp. Từ năm 2016, dự án đã được Positive Technologies tài trợ và được sử dụng trong các sản phẩm của họ từ năm 2017, đồng thời các biện pháp trừng phạt của chính phủ Hoa Kỳ đối với Positive Technologies không có tác động gì đáng chú ý.

Những cải tiến, cải tiến và sửa lỗi chính được thêm vào kể từ lần phát hành cuối cùng:

  • Hiện đã có sẵn ràng buộc Ruby từ Mahlon E. Smith và phiên bản dùng thử của ràng buộc Python từ Noel Kuntze và ràng buộc GoLang từ Alexey Sharov đã được cập nhật.
  • Đối với chế độ “MDBX_WRITEMAP”, khi dữ liệu cơ sở dữ liệu được thay đổi trực tiếp trong RAM, “tràn trong suốt” các trang cơ sở dữ liệu đã thay đổi vào đĩa sẽ được triển khai. Giờ đây, sau khi hoàn thành mỗi thao tác, các trang như vậy ngay lập tức hoàn toàn sẵn sàng để ghi vào đĩa và nhân hệ điều hành có thể xóa các trang đã thay đổi vào đĩa một cách độc lập và việc thực hiện giao dịch sẽ không yêu cầu sửa đổi chúng. Do đó, trong các tình huống bận rộn và không đủ RAM, khối lượng hoạt động của đĩa có thể giảm tới 2 lần.
  • Đã triển khai việc loại bỏ các bản sao bóng không được sử dụng trong thời gian dài của các trang đã sửa đổi, với ưu tiên loại bỏ các trang có giá trị lớn/dài, trong phần lớn các trường hợp chỉ được sửa đổi một lần cho mỗi giao dịch. Kết quả là lưu lượng ổ đĩa giảm và hiệu suất được cải thiện trong các tình huống có giao dịch rất lớn.
  • Chế độ “thông minh” để tách các trang khi chèn phím đã được triển khai. Bây giờ, khi chèn các chuỗi có thứ tự, các trang sẽ tự động được điền đầy đủ và trong các trường hợp khác, cây sẽ cân bằng tối ưu hơn. Kết quả là, trung bình, các trang cơ sở dữ liệu được lấp đầy một cách tối ưu hơn và cây B cân bằng hơn, điều này có tác động tích cực đến hiệu suất.
  • Thống kê hoạt động với các trang đã được thêm vào, cho phép bạn ước tính chính xác chi phí sửa đổi hoạt động với cơ sở dữ liệu.
  • Hơn một chục lỗi và lỗi đã được sửa, bao gồm: sự cố khi xây dựng bằng MinGW, sử dụng `std::filesystem::path` trong iOS <= 13.0, xây dựng nhắm mục tiêu vào các phiên bản Windows cũ hơn, v.v.
  • Tổng cộng, hơn 200 thay đổi đã được thực hiện đối với 66 tệp, ~6500 dòng đã được thêm vào, ~4500 dòng đã bị xóa.

Riêng biệt, tôi muốn lưu ý đến việc lựa chọn dự án Turbo-Geth (một nhánh turbo của Go-Ethereum) libmdbx làm chương trình phụ trợ lưu trữ mới và cũng xin cảm ơn nhóm dự án (đặc biệt là Alexey Sharov, Artyom Vorotnikov và Alexey Akhunov) vì những đóng góp của họ. trợ giúp đắc lực trong việc thử nghiệm trong các tình huống sử dụng đặc biệt. Đặc biệt, một khiếm khuyết trong điều khiển đọc trước/bộ nhớ đệm đã được phát hiện và loại bỏ, dẫn đến suy giảm hiệu suất trong các tình huống khó tái tạo với cơ sở dữ liệu lớn.

Nguồn: opennet.ru

Thêm một lời nhận xét