Asked Jul 12th, 2019 4:42 AM 245 0 2
  • 245 0 2
0

Làm việc với dữ liệu lớn trong Laravel.

Share
  • 245 0 2

Chào các bác. E có sử dụng laravel, làm việc với table mới có khoảng hơn 100k bản ghi. e đã select lấy những trường cần thiết và đã đánh index các điều kiện lọc nhưng e thấy kết quả sau khi phân trang cũng rất chậm. E có thể làm cách nào tăng tốc độ xử lý được ạ?

Jul 12th, 2019 5:57 AM

Là query của mình nó bị chậm hay là cái API nó response chậm vậy bác?

0
| Reply
Share
kaka @chauchauonline
Jul 12th, 2019 6:38 AM

e query không paginate hết khoảng 900ms, thêm paginate hết khoảng 2,2s. như thế có gọi là chậm k bác?

0
| Reply
Share
Lê Vĩnh Thiện @le.vinh.thien
Jul 12th, 2019 8:57 AM

@chauchauonline bác post thử query mẫu lên đc ko chứ 100k e thấy vẫn ít mà nhể?

+1
| Reply
Share
Jul 12th, 2019 9:29 AM

@chauchauonline Mỗi một query đơn giản mà mất 900ms thì có vẻ là query bị chậm. Còn bác dùng paginate ý là dùng $query->paginate($perPage) ấy hả? Nếu dữ liệu có quá nhiều thì mình nghĩ cũng ko nên hiển thị phân trang như vậy mà đổi sang dùng simplePaginatepaginate nó còn phải count số record nên nó sẽ mất thời gian hơn. Trong doc của Laravel họ cũng có đề cập "Simple Pagination":

you may use the simplePaginate method to perform a more efficient query. This is very useful for large datasets when you do not need to display a link for each page number when rendering your view.

@le.vinh.thien 👍 +1 đồng quan điểm với bác.

0
| Reply
Share
Jul 14th, 2019 2:09 PM

Có thể mô tả bảng, cách bạn đánh index và câu query của bạn được không?

0
| Reply
Share
kaka @chauchauonline
Jul 15th, 2019 2:56 AM

@pht e chưa join gì cả, mới select mấy trường cần thiết và đánh index 2 trường where trên SQLyog thôi ạ. @huukimit e thấy dùng simplePaginate tốc độ nhanh hơn hẳn nhưng e chưa biết custom sao cho phân trang giống paginate

0
| Reply
Share
Jul 15th, 2019 3:07 AM

@chauchauonline

Dùng explain xem query nó có dùng index ko, có chắc là đánh index đúng ko?

+1
| Reply
Share

2 ANSWERS


Answered Jul 12th, 2019 4:46 AM
0

bạn thử dùng Cache xem sao

Share
kaka @chauchauonline
Jul 12th, 2019 6:42 AM

vâng. để mình thử ạ.

0
| Reply
Share
Answered Jul 16th, 2019 5:44 PM
-3

chậm ở đây bạn phải xác định là do ai chậm: db chậm hay do thuật toán xử lí độ phức tạp cao dẫn tới chậm. với số bản ghi lớn, bạn nên dùng search engine. khi query nhiều thì phải dùng eager để chống overflow bộ nhớ. không nên query quá nhiều trang 1 lần mà chỉ nên query trang cần xem

Quảng cáo 5 phút: Pomodoro Smart Timer là một ứng dụng quản lý thời gian, dựa trên kỹ thuật Pomodoro. Podomoro là một phương pháp giúp tăng năng suất. Bằng cách chia nhỏ thời gian làm việc thành các đoạn dài ví dụ 25 phút, cách nhau bởi các khoảng nghỉ ngắn. Đây là một phương pháp làm việc nổi tiếng, có tính khoa học, giúp bạn tập trung tối đa. Được rất nhiều người áp dụng. Bạn có thể tham khảo ở đây: https://vi.wikipedia.org/wiki/Pomodoro

Bạn có thể tải Pomodoro Smart Timer để ủng hộ Hà Mã Tím tại đây: https://play.google.com/store/apps/details?id=com.hamatim.podomoro

Share