pola-rs
: Lazy vs. Eager
polars
rất mạnh và sử dụng tài nguyên hiệu quả một phần nhờ vào cơ chế Lazy. Tên gọi có vẻ rất "lười" nhưng có lẽ nhờ cái sự "lười" đó nên mới tối ưu. Khác với chế độ hoạt động mặc định là Eager (nôm na là "háo hức" xử lý lệnh ngay mà chưa cần suy nghĩ nhiều), khi chỉ định chuỗi lệnh chạy trong chế độ Lazy, các API hay phương thức của polars
sẽ chưa được thực thi ngay khi được gọi đến. Thay vì thực thi ngay lập tức, toàn bộ các lệnh/phương thức xử lý trên dữ liệu sẽ được sắp xếp, tổ chức trong một phương án thi hành tối ưu hay một "logical query plan". polars
sẽ đảm bảo có phương án thi hành toàn bộ chuỗi lệnh xử lý đó một cách tối ưu nhất. Toàn bộ phương án thi hành đã được tối ưu sau đó sẽ được thực thi khi thực sự cần đến hay nói chính xác hơn là thực sự cần dùng dữ liệu đó mà thông thường sẽ được kích hoạt bởi lệnh .collect().
Như vậy, với cách thi hành này, tất cả các chuỗi lệnh xử lý dữ liệu sẽ luôn được tối ưu trước khi thi hành và nó rất phù hợp với các mã viết cho Production hay xử lý những khối dữ liệu lớn. Tất nhiên, vì các mã lệnh đã được tối ưu nên sẽ khó dò lỗi và gỡ rối chương trình khi cần. Do vậy, thường thì chúng ta sẽ dùng chế độ Eager khi thiết kế chương trình, thiết kế mô hình xử lý dữ liệu và chuyển sang Lazy khi viết mã chính thức.
Việc sử dụng chế độ Lazy cho các mã lệnh cũng khá đơn giản, chúng ta chỉ cần: (1) bật "feature" lazy khi khai báo sử dụng polars
; VÀ (2) gọi phương thức .lazy()
đầu tiên trong các chuỗi lệnh xử lý dữ liệu.
Để hiểu rõ hơn về sự khác nhau giữa Eager và Lazy cũng như cách sử dụng, hãy xem video "#0038 - Phân tích dữ liệu với polars (Phần 04)” trên kênh Youtube RustDEV Vietnam!