Laravel "Chunk" - Hãy cẩn thận!

09.11.2020

0/5 (0 Reviews)

Phương thức Chunk của Laravel được sử dụng rộng rãi để phân chia các truy vấn lớn thành các phần truy vấn nhỏ hơn khi xử lý với một cơ sở dữ liệu lớn.

    Tại sao chia sẻ điều này?

    Phương thức Chunk của Laravel được sử dụng rộng rãi để phân chia các truy vấn lớn thành các phần truy vấn nhỏ hơn khi xử lý với một cơ sở dữ liệu lớn. Nhưng có một vấn đề nếu thuộc tính được sử dụng trong truy vấn sẽ bị thay đổi trong callback function. Nó rất dễ bị bỏ qua và do đó thường bị sử dụng sai.

    Vấn đề ở đây là gì?

    Vui lòng xem ví dụ dưới đây:

    Giả định: tổng số người dùng chưa xử lý là 400 (Id là 1 - 400)

    Vấn đề là: Chỉ có một nửa số người dùng được xử lý.

    Phân tích

    Mỗi chunk đang được fetch thông qua single query sử dụng kết hợp với limit và offset. Chúng ta hãy xem chức năng chunk sẽ hoạt động như thế nào.

    • Ban đầu, người dùng chưa được xử lý là 400 (Id 1 - 400), đối với truy vấn chunk thứ nhất: select * from `users` where `processed` = 0 limit 100 offset 0 và 100 người dùng đầu tiên Ids (1-100) được xử lý

    • Sau lần chunk thứ nhất, người dùng chưa được xử lý là 300 (Id 101 - 400), truy vấn chunk thứ 2: select * from `users` where `processed` = 0 limit 100 offset 100 và 100 người dùng tiếp theo với Ids (201-300) được xử lý

    • Sau lần chunk thứ 2, người dùng chưa được xử lý là 200 (Id 101 - 200 và 301 - 400), đối với truy vấn đoạn thứ 3: select * from `users` where `processed` = 0 limit 100 offset 200 và không có 1 người dùng nào được xử lý

    Kết quả là: 200 người dùng được xử lý, nhưng 200 người dùng vẫn chưa được xử lý.

    - Giải pháp

    Bạn nên sử dụng phương thức chunkById thay cho phương thức chunk trong tình huóng này, chúng có vai trò tương tự như nhau. Sự khác biệt duy nhất là cách xây dựng truy vấn. ChunkById sử dụng 'id' và 'limit' trong khi chunk sử dụng 'limit' và 'offset'. Code sửa đổi sẽ như sau:

    Khi sử dụng chunkById, một câu truy vấn chunk sẽ giống như dưới đây:

    Truy vấn chunk thứ nhất: select * from `users` where ``processed` = 0 and `id` > 0 order by `id` asc limit 100

    Truy vấn chunk thứ 2: select * from `users` where ``processed` = 0 and `id` > 100 order by `id` asc limit 100

    Truy vấn chunk thứ 3: select * from `users` where ``processed` = 0 and `id` > 200 order by `id` asc limit 100

    Truy vấn chunk thứ 4: select * from `users` where ``processed` = 0 and `id` > 300 order by `id` asc limit 100

    Do đó, kết quả tìm nạp sẽ là 1-100, 101- 200, 201 -300, 301- 400 theo trình tự và tất cả người dùng đều được xử lý.

    Bài viết được sưu tầm và dịch từ nhiều nguồn trên Internet, mục đích chia sẻ kiến thức, nếu bạn là chủ nhân tác giả bài viết này xin hãy liên hệ với chúng tôi để cập nhật thông tin tác giả.

    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    LPStack Server: Giải pháp thay thế XAMPP và MAMP năm 2026

    10.03.2026

    Bạn đã chán ngấy XAMPP hay MAMP chậm chạp? Khám phá LPStack Server – Môi trường Local Development siêu nhẹ của người Việt với Auto Vhost, Public Tunnel, chuyển đổi PHP 1-click và quản lý Database Native chuyên nghiệp

    thumbnail

    Global Entreprep Incubator 2025: Cùng mang Start up của bạn ra thế giới cùng VinUni

    11.08.2025

    Chương trình Vườn ươm Khởi nghiệp Toàn cầu VinUni 2025 (GE25) được định vị là một chương trình tăng tốc chuyên sâu kéo dài 12 tuần, được thiết kế đặc biệt cho các startup công nghệ

    thumbnail

    Hướng Dẫn Tạo Trò Chơi Cờ Caro Nâng Cao bằng HTML

    19.03.2025

    Chào các bạn! Trong bài viết này, chúng ta sẽ cùng nhau xây dựng một trò chơi Cờ Caro đơn giản nhưng có nhiều tính năng thú vị như giới hạn nước đi, pháo hoa khi chiến thắng, chọn chế độ chơi và đếm thời gian.

    thumbnail

    Grok AI: Giới thiệu chi tiết về chatbot của Elon Musk

    04.03.2025

    Grok là một chatbot AI tiên tiến, được phát triển bởi xAI, công ty do Elon Musk sáng lập. Ra mắt lần đầu vào tháng 11/2023, Grok được thiết kế để cạnh tranh với các mô hình AI nổi tiếng như ChatGPT

    thumbnail

    Hướng dẫn xoá Google Analytics Universal mới nhất

    10.07.2024

    Một số người dùng đang gặp vấn đề khi muốn xoá tài khoản Google Analytics Universal ra khỏi GA của mình nhưng không xoá được, đây là hướng dẫn dành cho bạn