Phát hành DBMS nhúng hiệu suất cao libmdbx 0.10.4 và libfpta 0.3.9

Các thư viện libmdbx 0.10.4 (MDBX) đã được phát hành cùng với việc triển khai cơ sở dữ liệu khóa-giá trị nhúng nhỏ gọn hiệu suất cao và thư viện libfpta 0.3.9 (FPTA) liên quan, triển khai biểu diễn dữ liệu dạng bảng với các chỉ mục phụ và chỉ mục tổng hợp trên MDBX. Cả hai thư viện đều được phân phối theo giấy phép được OSI phê duyệt. Tất cả các hệ điều hành và kiến ​​trúc hiện tại đều được hỗ trợ, cũng như Elbrus 2000 của Nga.

Về mặt lịch sử, libmdbx là bản làm lại sâu của LMDB DBMS và vượt trội hơn tổ tiên của nó về độ tin cậy, bộ tính năng và hiệu suất. So với LMDB, libmdbx chú trọng nhiều đến chất lượng mã, tính ổn định của API, kiểm tra và kiểm tra tự động. 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 phục hồi được cung cấp.

Về mặt công nghệ, 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 với khả năng chia tỷ lệ tuyến tính trên các lõi CPU. Hỗ trợ tự động nén, quản lý kích thước cơ sở dữ liệu tự động và ước tính truy vấn phạm vi. Kể từ năm 2016, các dự án đã được Positive Technologies tài trợ và từ năm 2017 đã được sử dụng trong các sản phẩm của họ.

libmdbx cung cấp API C++ cũng như các ràng buộc ngôn ngữ được người đam mê hỗ trợ cho Rust, Haskell, Python, NodeJS, Ruby, Go và Nim. Đối với libfpta, chỉ mô tả API được cung cấp công khai dưới dạng tệp tiêu đề C/C++.

Những cải tiến, cải tiến và sửa chữa lớn được thêm vào kể từ tin tức trước đó vào ngày 9 tháng XNUMX:

  • Cho phép các bản dựng có thể tái tạo.
  • Đã khắc phục lỗi do đó, trong một số trường hợp rất hiếm, có thể xảy ra vòng lặp/đóng băng trong quá trình thực hiện giao dịch. Vấn đề đã được các chuyên gia Công nghệ Tích cực xác định trong quá trình thử nghiệm nội bộ các sản phẩm của chính họ.
  • Các thử nghiệm đã được cải thiện và các kịch bản thử nghiệm đã được mở rộng để kiểm tra tất cả các trạng thái không đẳng hình có thể truy cập được của cây trang và nội dung GC bên trong cơ sở dữ liệu.
  • Trong API C++, một lỗi “không ngoại lệ” bổ sung đã được sửa, các tình trạng quá tải bổ sung đã được thêm vào cho phương thức “cursor::erase()”, việc triển khai bộ đệm đã được loại bỏ việc sử dụng “std::string” để đảm bảo căn chỉnh (có liên quan đến CLANG libstdc++).
  • Sự hồi quy trong thuật toán làm đổ trang bẩn (loại bỏ có chọn lọc các trang cơ sở dữ liệu đã thay đổi) được biểu hiện bằng lỗi không mong muốn hiếm gặp MDBX_PROBLEM khi thay đổi dữ liệu trong các giao dịch lớn đã được loại bỏ.
  • Thử nghiệm theo từng giai đoạn đã được thực hiện với việc bổ sung một số kiểm tra để đảm bảo tính ổn định trong trường hợp cơ sở dữ liệu bị cố ý làm hỏng.
  • Đã khắc phục các sự cố nhỏ về Cảnh báo không xác địnhBehaviorSanitizer và Coverity Scan.
  • Đã sửa lỗi kiểm tra cờ nội bộ đã lỗi thời và không còn được sử dụng “P_DIRTY” trong các trang lồng nhau bên trong hình ảnh cơ sở dữ liệu được tạo bởi các phiên bản cũ hơn của thư viện.
  • Trong tập lệnh CMake, việc tìm kiếm các thành phần trình biên dịch cần thiết cho LTO (tối ưu hóa thời gian liên kết) đã được cải thiện.
  • Số lượng người đọc đồng thời tối đa đã tăng lên 32767.
  • Cải thiện hiệu suất khi sử dụng Valgrind và addressSanitizer.
  • Trên Windows, việc sử dụng đệ quy khóa SRW khi làm việc ở chế độ MDBX_NOTLS (không sử dụng bộ nhớ cục bộ của luồng) đã bị loại bỏ, việc tạo bootid đã được khắc phục nếu thời gian hệ thống thay đổi, khả năng phát hiện WSL1 và WSL2 đã được cải thiện và khả năng mở cơ sở dữ liệu trên Kế hoạch 9 được gắn qua DrvFS đã được thêm vào.
  • Tổng cộng, hơn 160 thay đổi đã được thực hiện đối với 57 tệp, ~5000 dòng đã được thêm vào, ~2500 dòng đã bị xóa.

Tôi đặc biệt muốn cảm ơn nhóm dự án Erigon (hệ sinh thái Ethereum) vì đã hỗ trợ thử nghiệm trong các tình huống sử dụng khắc nghiệt. Điều quan trọng là trong 0.10.0 tháng kể từ khi phát hành libmdbx v1, với khối lượng cơ sở dữ liệu là 2-7 TB trong mỗi lần cài đặt Erigon (được sử dụng trên XNUMX% nút Ethereum), chỉ nhận được ba báo cáo về hỏng cơ sở dữ liệu, tất cả đều là xảy ra do nguyên nhân bên ngoài chứ không phải lỗi phần mềm: trong hai trường hợp nguyên nhân là do lỗi RAM, trường hợp thứ ba là lỗi đặt lại dữ liệu trong cấu hình cụ thể của hệ thống con lưu trữ bằng BTRFS.

Nguồn: opennet.ru

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