Polars 2.0 mang đến khả năng xử lý ngoài bộ nhớ và truy vấn SQL nhanh hơn
Polars 2.0 kích hoạt mặc định tính năng ghi dữ liệu ra đĩa (spill-to-disk) và dẫn đầu DuckDB trong các bài kiểm tra chuẩn SQL, đồng thời cung cấp cơ chế an toàn kiểu dữ liệu nghiêm ngặt hơn cho các quy trình làm việc AI.
Được dịch tự động từ bản gốc tiếng Anh.
Đội ngũ phát triển Polars đã ra mắt phiên bản 2.0 của thư viện xử lý dữ liệu, đánh dấu một bước chuyển quan trọng trong cách engine này quản lý bộ nhớ và khối lượng công việc SQL. Được công bố vào ngày 6 tháng 10 năm 2026, bản cập nhật lớn này giới thiệu tính năng xử lý ngoài bộ nhớ (out-of-core processing) như một chức năng mặc định và đưa Polars trở thành một trong những ứng viên hàng đầu trong các bài kiểm tra chuẩn SQL so với các đối thủ như DuckDB và DataFusion.
Chuyện gì đã xảy ra
Bản phát hành này tập trung vào độ bền bỉ và hiệu suất thay vì chỉ đơn thuần thêm các tính năng mới. Thay đổi có tác động lớn nhất là việc gọi collect trên một LazyFrame giờ đây sẽ mặc định sử dụng streaming engine. Sự thay đổi này cho phép Polars xử lý các tập dữ liệu lớn hơn dung lượng RAM hiện có bằng cách ghi tạm thời dữ liệu ra đĩa. Hệ thống bắt đầu quá trình ghi ra đĩa khi mức sử dụng bộ nhớ đạt khoảng 80% RAM khả dụng, với ngân sách đĩa mặc định là 64GB. Hiện tại, các thao tác như sắp xếp, hàm cửa sổ và nhiều biểu thức đã hỗ trợ hành vi xử lý ngoài bộ nhớ này, trong khi các thao tác join và group-by dự kiến sẽ được bổ sung trong các bản cập nhật tương lai.
Vì streaming engine không đảm bảo thứ tự dòng cho các thao tác như join, group_by và unpivot, nên thay đổi này đòi hỏi phải nâng phiên bản chính (major version bump). Người dùng phụ thuộc vào thứ tự dòng cụ thể giờ đây phải thiết lập rõ ràng maintain_order=True. Hành vi mặc định này nhằm mục đích giúp Polars mạnh mẽ hơn cho những người làm dữ liệu thông thường đang xử lý các khối lượng công việc tiêu tốn nhiều bộ nhớ, ngăn chặn các sự cố sụp đổ trước đây xảy ra khi tập dữ liệu vượt quá giới hạn bộ nhớ vật lý.
Ngoài việc quản lý bộ nhớ, Polars 2.0 coi SQL là một công dân hạng nhất (first-class citizen). Thư viện này đã tăng cường đáng kể phạm vi hỗ trợ SQL và cải thiện optimizer với việc sắp xếp lại các phép join tốt hơn, loại bỏ các subplan chung và áp dụng các predicate động. Những cải tiến này cho phép Polars thực thi các truy vấn SQL phức tạp hiệu quả hơn, thu hẹp khoảng cách giữa thao tác dữ liệu bằng mã lệnh và tương tác với cơ sở dữ liệu truyền thống.
Cách thức hoạt động
Những cải thiện về hiệu suất trong thực thi SQL đến từ các tối ưu hóa sâu bên trong query engine. Polars giờ đây tận dụng bloom filters và các predicate động để giảm lượng dữ liệu được xử lý trong quá trình thực thi truy vấn. Bằng cách loại bỏ các subplan chung và sắp xếp lại các phép join một cách hiệu quả, engine này giảm thiểu các tính toán dư thừa. Những cải tiến kỹ thuật này cho phép Polars cạnh tranh trực tiếp với các hệ quản trị cơ sở dữ liệu phân tích đã có tên tuổi.
Để xác minh các tuyên bố này, đội ngũ đã chạy các bài kiểm tra benchmark sử dụng dữ liệu phái sinh từ TPC-H và TPC-DS trên các instance AWS c7a. Họ so sánh Polars với DuckDB 1.5.6, DuckDB 2.0 alpha và DataFusion 54.0.0. Các bài kiểm tra bao gồm việc chạy mỗi truy vấn năm lần trong điều kiện nóng (hot setting), xóa bộ nhớ đệm tệp giữa các engine và lấy thời gian chạy tốt nhất. Kết quả cho thấy Polars là engine nhanh nhất trong hầu hết các bài kiểm tra benchmark trên cả máy 16-vCPU và 192-vCPU, mặc dù nó thể hiện một số chi phí phát sinh (overhead) đối với các truy vấn dữ liệu nhỏ khi mở rộng lên 192 luồng.
Chi tiết chính
- Xử lý ngoài bộ nhớ được bật theo mặc định, ghi ra đĩa khi mức sử dụng RAM đạt ~80% với ngân sách đĩa mặc định là 64GB.
- Streaming engine giờ đây là mặc định cho
collect, điều này có thể làm thay đổi thứ tự dòng trừ khi đặtmaintain_order=True. - Polars dẫn đầu DuckDB và DataFusion trong các bài kiểm tra benchmark TPC-H và TPC-DS1 trên cả instance c7a.4xlarge và c7a.metal.
- Kiểu dữ liệu
Mapmới hỗ trợ trực tiếp ArrowMapType, cho phép tra cứu và lặp qua các khóa giống như dictionary. - Kiểm tra kiểu dữ liệu nghiêm ngặt hơn và
collect_schema()giúp tạo ra vòng phản hồi nhanh hơn cho các agent AI và nhà phát triển. - DataFusion bị timeout hoặc hết bộ nhớ ở một số truy vấn mà Polars và DuckDB hoàn thành thành công.
Tại sao điều này quan trọng
Đối với các kỹ sư phần mềm và nhà khoa học dữ liệu, hỗ trợ xử lý ngoài bộ nhớ mặc định đồng nghĩa với độ tin cậy cao hơn khi xử lý các tập dữ liệu lớn. Trước đây, việc vượt quá giới hạn bộ nhớ sẽ làm sụp đổ quá trình, đòi hỏi phải chia nhỏ thủ công hoặc sử dụng các công cụ bên ngoài. Giờ đây, Polars có thể xử lý mượt mà các khối lượng công việc lớn hơn bộ nhớ bằng cách sử dụng không gian đĩa, giúp dễ dàng xây dựng các pipeline dữ liệu bền bỉ mà không cần tinh chỉnh hạ tầng phức tạp. Điều này đặc biệt có giá trị đối với các nhóm không có nguồn lực kỹ sư dữ liệu chuyên trách để quản lý các hệ thống phân tán phức tạp.
Hệ thống kiểu dữ liệu nghiêm ngặt hơn và việc xác thực schema cũng giải quyết một nhu cầu ngày càng tăng trong phát triển dựa trên AI. Khi ngày càng nhiều nhà phát triển sử dụng agent AI để tạo mã, việc phát hiện lỗi sớm trở nên cực kỳ quan trọng. Bằng cách thất bại nhanh chóng khi có sự không khớp schema thông qua collect_schema(), Polars giúp các agent và con người lặp lại nhanh hơn. Điều này giảm bớt thời gian dành cho việc gỡ lỗi các lỗi âm thầm hoặc kiểu dữ liệu sai lệch nằm sâu trong pipeline, dẫn đến mã xử lý dữ liệu dễ bảo trì và chính xác hơn.
Bạn có thể làm gì
- Nâng cấp lên Polars 2.0 và xem xét hướng dẫn di trú do đội ngũ cung cấp để xử lý các thay đổi gây gián đoạn (breaking changes).
- Kiểm tra các pipeline hiện có của bạn để tìm các phụ thuộc vào thứ tự dòng và thêm
maintain_order=Truekhi cần thiết. - Thử nghiệm với kiểu dữ liệu
Mapmới để xử lý các cấu trúc dữ liệu key-value lồng nhau hiệu quả hơn. - Chạy các truy vấn SQL trực tiếp trong Polars để tận dụng optimizer được cải thiện và đo hiệu suất so với stack hiện tại của bạn.
- Sử dụng
collect_schema()trong quy trình phát triển của bạn để bắt các lỗi kiểu dữ liệu trước khi thực thi các thao tác dữ liệu nặng. - Giám sát mức sử dụng bộ nhớ và điều chỉnh ngưỡng ghi ra đĩa nếu khối lượng công việc của bạn yêu cầu phân bổ tài nguyên khác.



