Đã có bản phát hành DBMS DuckDB 0.6.0, kết hợp các thuộc tính như vậy của SQLite như tính nhỏ gọn, khả năng kết nối dưới dạng thư viện nhúng, lưu trữ cơ sở dữ liệu trong một tệp và giao diện CLI thuận tiện, với các công cụ và tối ưu hóa để thực thi các truy vấn phân tích bao gồm một phần quan trọng của dữ liệu được lưu trữ, ví dụ như tổng hợp toàn bộ nội dung của các bảng hoặc hợp nhất một số bảng lớn. Mã dự án được phân phối theo giấy phép MIT. Quá trình phát triển vẫn đang ở giai đoạn hình thành các bản phát hành thử nghiệm, do định dạng lưu trữ vẫn chưa ổn định và thay đổi theo từng phiên bản.
DuckDB cung cấp một phương ngữ SQL nâng cao 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. Việc sử dụng các loại phức tạp (mảng, cấu trúc, liên kết) và khả năng thực hiện các truy vấn con tương quan lồng nhau và tùy ý được hỗ trợ. Nó hỗ trợ chạy nhiều truy vấn cùng lúc, chạy truy vấn trực tiếp từ tệp CSV và Parquet. Có thể nhập từ DBMS PostgreSQL.
Ngoài mã shell từ SQLite, dự án còn sử dụng trình phân tích cú pháp từ PostgreSQL trong một thư viện riêng, thành phần Date Math từ MonetDB, việc triển khai các hàm cửa sổ của riêng nó (dựa trên thuật toán Tập hợp cây phân đoạn), 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 và cơ chế điều khiển MVCC thực thi đồng thời các tác vụ (Kiểm soát đồng thời nhiều phiên bản), cũng như công cụ thực thi truy vấn được vector hóa dựa trên thuật toán Thực thi truy vấn siêu đường ống, cho phép tập hợp lớn các giá trị được xử lý cùng một lúc trong một hoạt động.
Trong số những thay đổi trong bản phát hành mới:
- Công việc tiếp tục cải thiện định dạng lưu trữ. Chế độ ghi đĩa lạc quan đã được triển khai, trong đó khi tải một tập hợp lớn dữ liệu trong một giao dịch, dữ liệu sẽ được nén và ghi vào một tệp từ cơ sở dữ liệu ở chế độ phát trực tuyến mà không cần đợi giao dịch được xác nhận bằng lệnh COMMIT . Khi nhận được lệnh COMMIT, dữ liệu đã được ghi vào đĩa và khi ROLLBACK được thực thi, dữ liệu sẽ bị loại bỏ. Trước đây, dữ liệu ban đầu được lưu hoàn toàn vào bộ nhớ và khi được cam kết, nó sẽ được lưu vào đĩa.
- Đã thêm hỗ trợ tải dữ liệu song song vào các bảng riêng biệt, cho phép bạn tăng đáng kể tốc độ tải trên các hệ thống đa lõi. Ví dụ: trong phiên bản trước, việc tải cơ sở dữ liệu với 150 triệu hàng trên CPU 10 lõi mất 91 giây, nhưng trong phiên bản mới, thao tác này hoàn thành sau 17 giây. Có hai chế độ tải song song - giữ trật tự hồ sơ và không giữ trật tự.
- Để nén dữ liệu, thuật toán FSST (Bảng ký hiệu tĩnh nhanh) được sử dụng, cho phép bạn đóng gói dữ liệu bên trong các chuỗi bằng cách sử dụng từ điển chung gồm các kết quả khớp điển hình. Việc sử dụng thuật toán mới giúp giảm kích thước cơ sở dữ liệu thử nghiệm từ 761 MB xuống 251 MB.
- Thuật toán Chimp và Patas đã được đề xuất để nén các số dấu phẩy động (NHÂN ĐÔI và FLOAT). So với thuật toán Gorillas trước đây, Chimp cung cấp mức độ nén cao hơn và giải nén nhanh hơn. Thuật toán Patas thua xa Chimp về tỷ lệ nén nhưng lại nhanh hơn rất nhiều về tốc độ giải nén, gần như không khác gì đọc dữ liệu không nén.
- Đã thêm khả năng thử nghiệm để tải dữ liệu từ tệp CSV vào nhiều luồng song song (SET Experiment_parallel_csv=true), giúp giảm đáng kể thời gian tải các tệp CSV lớn. Ví dụ: khi tùy chọn này được bật, thời gian tải xuống tệp CSV 720 MB đã giảm từ 3.5 xuống 0.6 giây.
- Khả năng thực hiện song song các hoạt động tạo và quản lý chỉ mục đã được triển khai. Ví dụ: thao tác TẠO CHỈ SỐ trên một cột có 16 triệu bản ghi đã giảm từ 5.92 xuống 1.38 giây.
- Đã bật tính năng song song hóa các hoạt động tổng hợp trong các truy vấn có chứa biểu thức “COUNT(DISTINCT col)”.
- SQL đã thêm hỗ trợ cho loại UNION, cho phép nhiều loại được liên kết với một phần tử (ví dụ: “UNION(num INT, error VARCHAR))”).
- SQL cung cấp khả năng tạo các truy vấn bắt đầu bằng từ “FROM” thay vì “SELECT”. Trong trường hợp này, giả định rằng truy vấn bắt đầu bằng "CHỌN *".
- SQL đã thêm hỗ trợ cho biểu thức COLUMNS, cho phép bạn thực hiện một thao tác trên nhiều cột mà không cần sao chép biểu thức. Ví dụ: “CHỌN MIN(COLUMNS(*)) từ obs;” sẽ khiến hàm MIN được thực thi cho mỗi cột trong bảng obs và "SELECT COLUMNS('val[0-9]+') from obs;" cho các cột có tên bao gồm "val" và số.
- Đã thêm hỗ trợ cho các thao tác trên danh sách, ví dụ: “CHỌN [x + 1 cho x trong [1, 2, 3]] NHƯ l;”.
- Mức tiêu thụ bộ nhớ đã được tối ưu hóa. Theo mặc định trên nền tảng này. Linux Thư viện jemalloc được sử dụng để quản lý bộ nhớ. Hiệu suất của các thao tác hợp nhất băm trong điều kiện bộ nhớ hạn chế đã được cải thiện đáng kể.
- Đã thêm chế độ đầu ra “.mode duckbox” vào giao diện dòng lệnh, loại bỏ các cột ở giữa có tính đến chiều rộng của cửa sổ đầu cuối (thích hợp để đánh giá nhanh chóng kết quả của các truy vấn có số lượng cột lớn, chẳng hạn như “CHỌN * TỪ tbl”, ở chế độ bình thường được trải rộng trên nhiều dòng). Bằng cách sử dụng tham số “.maxrows X”, bạn có thể giới hạn thêm số lượng hàng được hiển thị.
- CLI cung cấp tính năng tự động hoàn thành đầu vào có tính đến ngữ cảnh (đầu vào từ khóa, tên bảng, hàm, tên cột và tên tệp đã được hoàn thành).
- CLI có chỉ báo tiến trình truy vấn được bật theo mặc định.
Nguồn: opennet.ru
