Khi nào sử dụng chunk trong laravel?

Tôi đã thực hiện một số điểm chuẩn không khoa học của các phương thức có sẵn trong Laravel. Ngay cả các tài liệu chính thức cũng mô tả các đặc điểm của từng kỹ thuật, tôi muốn có một "tiêu chuẩn sân bóng" nhanh chóng để chọn cái nào. Lấy số exakt với một hạt muối lớn, quan điểm của tôi là chỉ ra sự khác biệt giữa các phương pháp

TL; DR

  • get[] – Tốc độ cao nhưng sử dụng nhiều bộ nhớ
  • chunk[] – Sử dụng bộ nhớ liên tục nhưng thấp và tốc độ thấp
  • Nhu cầu đồng thời là một yếu tố khi lựa chọn phương pháp

Đã thử nghiệm với Laravel 8. 74 và PHP 7. 4. 25 trên macOS với Laravel Valet

điểm chuẩn

10 000 hồ sơ

MethodMemoryTimeget[]26 MB261mscursor[]12 MB460mslazy[]9MB300mschunk[] by 5006MB400ms

100 000 hồ sơ

MethodMemoryTimeget[]277 MB2. 72 giâycursor[]75 MB5. 8 giây____79MB5. 4 giâychunk[] bởi 5006MB7. 56 giây

phương pháp

được[]

Nó sử dụng công cụ tìm nạp tất cả, tải tất cả các bản ghi vào bộ nhớ. Cách này nhanh nhưng chiếm nhiều bộ nhớ

  • Nhanh nhất
  • Sử dụng rất nhiều bộ nhớ

con trỏ[]

Phương thức con trỏ sử dụng tìm nạp và mỗi lần chỉ tải một bản ghi từ bộ đệm vào bộ nhớ. Một nhược điểm lớn của phương pháp này là cursor[] không thể háo hức tải các mối quan hệ. Nó sử dụng ít bộ nhớ hơn nhưng chậm hơn vì nó lặp lại từng cái một. Tùy thuộc vào cấu hình của bạn, bộ đệm có thể được lưu trữ ở phía PHP hoặc phía MySQL

  • Không thể háo hức tải mối quan hệ
  • Không thể xử lý các bộ sưu tập lớn, Cuối cùng sẽ hết bộ nhớ tùy thuộc vào bộ đệm
  • Vì nó chỉ tải một bản ghi tại thời điểm dữ liệu nên nó sẽ duy trì tính nhất quán khi xử lý các bộ dữ liệu có thể thay đổi trong khi làm như vậy

đoạn []

Sử dụng nhiều lệnh gọi tìm nạp nhỏ hơn và cố gắng giữ bộ nhớ ở mức thấp bằng cách chia kết quả truy vấn lớn thành các truy vấn nhỏ hơn bằng cách sử dụng giới hạn tùy thuộc vào kích thước khối mà bạn chỉ định. Theo một cách nào đó, nó đang cố gắng sử dụng lợi ích của cả get[]cursor[]

  • Sử dụng bộ nhớ thấp nhất
  • chậm nhất
  • Nếu bạn đang lặp lại và cập nhật bản ghi cùng một lúc, hãy sử dụng chunk[]3
  • Có thể gặp sự cố nếu bạn đang cập nhật khóa chính hoặc khóa ngoại

lười biếng[]

Trong Laravel 8 cũng có lazy[], nó tương tự chunking. Về cơ bản, nó hoạt động giống như chunk[]. Tuy nhiên, bạn không cần gọi lại vì nó sử dụng trình tạo PHP và trả về LazyCollection, điều này làm cho cú pháp rõ ràng hơn

Trong ví dụ này, tôi sẽ hướng dẫn bạn cách sử dụng phương thức chunk trong laravel. bạn có thể dễ dàng và đơn giản sử dụng phương thức chunk trong laravel

Laravel eloquent chunk method chia nhóm dữ liệu lớn thành nhóm dữ liệu nhỏ hơn

ví dụ 1

/**

* The attributes that are mass assignable.

*

* @var array

*/

public function index[]

{

$users = User::all[]->chunk[3];

dd[$users];

}

ví dụ 2

Bộ điều khiển

Trong bước này, bạn có thể lấy dữ liệu trong cơ sở dữ liệu

/**

* The attributes that are mass assignable.

*

* @var array

*/

public function index[]

{

$users = User::all[];

return view['users.user',compact['users']];

}

tập tin lưỡi

Trong bước, bạn có thể hiển thị dữ liệu trên trình duyệt

@foreach[$users->chunk[3] as $row]

{{ $row }}

@endforeach

Nó sẽ giúp bạn

Trong hướng dẫn này, bạn sẽ tìm hiểu về Laravel Chunk Eloquent Method Example và ứng dụng của nó với ví dụ thực tế

Trong hướng dẫn ví dụ về phương thức eloquent chunk trong laravel này, tôi sẽ chỉ cho bạn cách sử dụng phương thức chunk trong laravel với các bản ghi lớn trong laravel. Bạn cũng sẽ học Cách chèn dữ liệu lớn vào laravel bằng cách sử dụng chunk

Mục lục

  • Phương thức Laravel Eloquent Chunk[]
    • Sử dụng laravel chunk với Eloquent Model
    • Gửi Email với Laravel chunk
  • Chèn dữ liệu lớn vào laravel

Phương thức Laravel Eloquent Chunk[]

Trong Laravel, phương thức eloquent chunk được sử dụng để chia một lượng lớn tập dữ liệu thành nhóm tập dữ liệu con nhỏ hơn còn được gọi là chunk

Giả sử, bạn đang làm việc với một lượng lớn tập dữ liệu trong cơ sở dữ liệu ứng dụng. Điều này làm cho việc xử lý một lượng lớn tập dữ liệu trong một lần trở nên khó khăn hơn khi phương pháp chunk của laravel sẽ giúp bạn chia một nhóm dữ liệu lớn hơn thành một nhóm tập dữ liệu nhỏ hơn [khối]

Trong phương pháp này, chúng ta sẽ chứng minh việc sử dụng phương thức eloquent chunk của laravel với các ví dụ khác nhau

Sử dụng laravel chunk với Eloquent Model

1

$người dùng = Người dùng. tất cả[]; /

Lượt xem

1

2

3

4

5

6

7

8

9

@foreach[$người dùng->chunk[3] as $row]

    

        @foreach[$row as $user]

            

                        {{ $người dùng->name}}

            

        @endforeach

    

@endforeach

Phương pháp này hoạt động với tất cả các loại bộ sưu tập laravel, xem ví dụ sau

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

$màu sắc = thu thập[['orange', 'blue', 'green', 'red', 'yellow', 'purple']];

$khối = $màu->chunk[3];

print_r[$khối];

/*

đầu ra

Mảng

[

[0] => Mảng

[

[0] => cam

[1] => màu xanh lam

[2] => xanh lục

]

[1] => Mảng

[

[3] => đỏ

[4] => màu vàng

[5] => tím

]

]

*/

Gửi Email với Laravel chunk

Giả sử bạn có một danh sách lớn người dùng để gửi email và bạn phải gửi email cho tất cả người dùng. Đôi khi có vấn đề là bạn không thể gửi email trên 10000 email cùng một lúc. Trong trường hợp này, bạn có thể sử dụng phương pháp Chunk của Laravel để chia một lượng lớn danh sách người dùng thành nhóm người dùng nhỏ để bạn có thể dễ dàng gửi thư cho mọi người. Xem ví dụ sau

1

2

3

4

5

6

Người dùng. orderBy['id']->chunk[100, function [$users] {

    foreach [$người dùng as $user] {

        // viết mã gửi email của bạn tại đây

    }

}];

Chèn dữ liệu lớn vào laravel

Nếu bạn muốn chèn một lượng lớn dữ liệu vào cơ sở dữ liệu laravel thì bạn có thể thực hiện việc này với sự trợ giúp của laravel chunk như sau

Chủ Đề