DuckDB 1.2.0, một DBMS tập trung vào các truy vấn phân tích và có khái niệm tương tự như SQLite, đã được phát hành. DuckDB kết hợp kích thước nhỏ gọn, thư viện có thể cắm thêm, lưu trữ cơ sở dữ liệu tệp đơn và giao diện CLI của SQLite với các khả năng và tối ưu hóa để chạy các truy vấn phân tích bao gồm phần lớn dữ liệu được lưu trữ, chẳng hạn như tổng hợp toàn bộ nội dung của các bảng hoặc hợp nhất nhiều bảng lớn. Mã dự án được viết bằng C++ và được phân phối theo giấy phép MIT.
DuckDB cung cấp phương ngữ mở rộng của ngôn ngữ SQL bao gồm các khả năng bổ sung để xử lý các truy vấn rất phức tạp và tốn thời gian. Có thể sử dụng các kiểu phức tạp (mảng, cấu trúc, hợp nhất) cũng như thực thi các truy vấn phụ tương quan lồng nhau và tùy ý. Thực hiện đồng thời nhiều truy vấn, hỗ trợ thực hiện truy vấn trực tiếp từ tệp CSV và Parquet. Có hỗ trợ nhập từ PostgreSQL DBMS.
Dự án sử dụng shell từ SQLite, trình phân tích cú pháp từ PostgreSQL, thành phần Date Math từ MonetDB, triển khai hàm cửa sổ riêng (dựa trên thuật toán Segment Tree Aggregation), bộ xử lý biểu thức chính quy dựa trên thư viện RE2, trình tối ưu hóa truy vấn riêng, cơ chế MVCC để quản lý việc thực thi đồng thời các tác vụ (Kiểm soát đồng thời nhiều phiên bản) và công cụ thực thi truy vấn vectơ hóa dựa trên thuật toán Hyper-Pipelining Query Execution, cho phép xử lý các tập giá trị lớn trong một thao tác.
Trong phiên bản mới:
- Đã triển khai hỗ trợ cho các phương pháp nén mới không được bật theo mặc định để duy trì khả năng tương thích của các tệp DB với các phiên bản DuckDB trước đó. Để sử dụng định dạng tệp DB được cải tiến, giờ đây bạn có thể liên kết DB với số phiên bản - khi mở tệp bằng tham số "STORAGE_VERSION", giờ đây bạn có thể chỉ định phiên bản DB tối thiểu được hỗ trợ ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). Để chuyển đổi định dạng mới sang định dạng cũ, bạn có thể sử dụng lệnh SQL COPY, ví dụ: ATTACH 'file1.db'; ĐÍNH KÈM 'converted_file.db' (STORAGE_VERSION 'v1.0.0'); SAO CHÉP TỪ TỆP CƠ SỞ DỮ LIỆU 1 ĐẾN converted_file;
- Đã thêm hỗ trợ cho lệnh SQL "ALTER TABLE … ADD PRIMARY KEY" để thêm khóa chính vào bảng hiện có.
- Đã xóa hạn chế ngăn chặn việc thêm lại các mã định danh có chỉ mục theo dõi tính duy nhất nếu các mã định danh đó bị xóa trong giao dịch hiện tại. Ví dụ, mã SQL sau đây không còn tạo ra lỗi nữa: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); CHÈN VÀO học sinh GIÁ TRỊ (1, 'John Doe'); BẮT ĐẦU; XÓA KHỎI sinh viên NƠI id = 1; CHÈN VÀO học sinh GIÁ TRỊ (1, 'Jane Doe');
- Đã thêm hỗ trợ tải tệp CSV theo mã hóa Latin-1 và UTF-16 (trước đây chỉ hỗ trợ mã hóa UTF-8). TỪ read_csv('cities-latin-1.csv', mã hóa = 'latin-1');
- Đã thêm hỗ trợ sử dụng dấu phân cách nhiều byte (tối đa 4 byte) trong tệp CSV, cho phép bạn chỉ định biểu tượng cảm xúc làm dấu phân cách cột. a🦆b hello🦆world TỪ read_csv('example.dsv', sep = '🦆');
- Theo mặc định, chế độ nghiêm ngặt được bật để phân tích cú pháp các tệp CSV ("strict_mode = true"), chế độ này kiểm tra xem định dạng có tuân thủ thông số kỹ thuật RFC 4180 hay không. Ở chế độ nghiêm ngặt, chỉ một ký tự được phép phân tách các dòng, điều này sẽ dẫn đến lỗi khi cố gắng phân tích cú pháp các tệp không chỉ sử dụng ký tự xuống dòng mà còn sử dụng ký tự xuống dòng ("\r\n") để phân tách các dòng.
- Trình phân tích cú pháp CSV sử dụng thuật toán phát hiện dòng mới hỗ trợ song song hóa các hoạt động. Sử dụng thuật toán mới giúp tăng tốc độ phân tích cú pháp CSV khoảng 15%.
- Đã xóa giới hạn về kích thước dòng trong tệp CSV (trước đây, kích thước dòng không được vượt quá 8 MB).
- Khi xuất dữ liệu theo định dạng Parquet, hỗ trợ cho các hàm băm (từ điển) và chỉ mục dựa trên bộ lọc Bloom sẽ được triển khai. Phương pháp nén DELTA_BINARY_PACKED đã được triển khai, cho phép giảm đáng kể kích thước tệp Parquet.
- Chế độ an toàn đã được thêm vào giao diện dòng lệnh, được kích hoạt bằng tùy chọn "-safe" hoặc lệnh ".safe_mode". Ở chế độ này, chỉ được phép truy cập vào tệp cơ sở dữ liệu được chỉ định ban đầu và việc mở các tệp khác sẽ dẫn đến lỗi.
- Giao diện dòng lệnh đã cải thiện chức năng tự động hoàn thành nhập liệu. Mã tự động hoàn thành đã được chuyển đổi để sử dụng PEG (Ngữ pháp phân tích biểu thức).
- Khi thực hiện lệnh trong giao diện dòng lệnh, một màn hình hiển thị trực quan các con số lớn đã được triển khai, ví dụ, khi hiển thị số 100000000, “(100 million)” sẽ được thêm vào.
- SQL hiện hỗ trợ cú pháp trong đó tên bảng và biểu thức viết tắt có thể được chỉ định trước các giá trị mà chúng trỏ tới (thay vì sử dụng cú pháp "biểu thức AS tên"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- Lệnh "SELECT" hiện hỗ trợ thao tác "RENAME" để đổi tên các trường đầu ra khi biểu thức "*" được chỉ định: SELECT * RENAME (col1 AS new_col1) FROM integers;
- Lệnh "SELECT" cho phép sử dụng các thao tác "LIKE" và "SIMILAR TO" khi xuất ra thông qua "*": SELECT * LIKE 'val%' FROM key_val;
- Cải thiện chất lượng tạo số giả ngẫu nhiên.
- Trình tối ưu hóa truy vấn đã được hiện đại hóa. Hiệu suất trong thử nghiệm TPC-H SF100 đã tăng 13%.
- Một API giống C mới được đề xuất để phát triển các tiện ích bổ sung, có thể được sử dụng để tạo các hàm tổng hợp hoặc bảng mới.
- Đã thêm hỗ trợ cho các hệ thống có thư viện C chuẩn Musl.
Nguồn: opennet.ru
