- vừa được xem lúc

Tối ưu hóa vòng lặp trong Java khi xử lý dữ liệu từ cơ sở dữ liệu

0 0 1

Người đăng: Hiếu Phạm

Theo Viblo Asia

Khi phát triển ứng dụng Java, một trong những vấn đề phổ biến mà chúng ta phải đối mặt là tối ưu hóa hiệu suất khi làm việc với dữ liệu lớn từ cơ sở dữ liệu. Đặc biệt, khi cần lấy thông tin liên quan từ nhiều bảng khác nhau hoặc khi cần thực hiện nhiều truy vấn trong một vòng lặp, việc tối ưu hóa mã nguồn là rất quan trọng để tránh làm giảm hiệu suất ứng dụng.

Trong bài viết này, chúng ta sẽ xem xét một trường hợp điển hình trong đó việc tối ưu hóa vòng lặp có thể cải thiện hiệu suất rất lớn. Vấn đề Giả sử bạn có một danh sách người dùng (UserDetailVo) và muốn tạo một đối tượng ExpertVo cho mỗi người dùng này. Mỗi ExpertVo sẽ chứa thông tin về các lĩnh vực chuyên môn mà người dùng đó tham gia. Thông thường, bạn sẽ cần truy vấn dữ liệu các lĩnh vực chuyên môn (ExpertField) của từng người dùng từ cơ sở dữ liệu.

Tuy nhiên, nếu bạn thực hiện các truy vấn trong mỗi vòng lặp qua danh sách người dùng, bạn sẽ gặp phải vấn đề về hiệu suất khi số lượng người dùng và dữ liệu rất lớn. Điều này có thể dẫn đến việc ứng dụng bị chậm hoặc thậm chí bị timeout nếu có quá nhiều truy vấn.

Giải pháp tối ưu Để giải quyết vấn đề này, thay vì thực hiện nhiều truy vấn trong vòng lặp, chúng ta có thể làm như sau:

Lấy tất cả các dữ liệu cần thiết một lần: Thay vì gọi truy vấn trong mỗi vòng lặp, chúng ta có thể lấy tất cả các ExpertField và CategoryVo cần thiết trước. Sử dụng Map để tra cứu nhanh: Thay vì lặp qua toàn bộ danh sách các CategoryVo cho mỗi ExpertField, chúng ta có thể sử dụng Map để tra cứu các CategoryVo theo fieldId và giảm thiểu số lần lặp lại.

// Lấy tất cả ExpertField một lần từ cơ sở dữ liệu List<ExpertField> allExpertFields = expertFieldRepo.findAll();

// Lấy tất cả CategoryVo và tạo map theo fieldId để tra cứu nhanh Map<String, CategoryVo> categoryVoMap = new HashMap<>(); for (CategoryVo categoryVo : categoryVoArrayList) { categoryVoMap.put(categoryVo.getId(), categoryVo); }

if (!detailVos.isEmpty()) { List<ExpertVo> expertVos = new ArrayList<>();

// Duyệt qua tất cả các UserDetailVo (1 vòng)
for (UserDetailVo detailVo : detailVos) { ExpertVo expertVo = new ExpertVo(); expertVo.setId(detailVo.getId()); expertVo.setDisplayName(detailVo.getDisplayName()); expertVo.setName(detailVo.getName()); if (SecurityContext.getUserInfo() != null) { expertVo.setPhoneNumber(detailVo.getPhoneNumber()); } // Tạo danh sách CategoryVo cho ExpertVo trong vòng lặp này (1 vòng) List<CategoryVo> categoryVoArray = new ArrayList<>(); // Duyệt qua tất cả các ExpertField và chọn ra các CategoryVo phù hợp (kết hợp với map) (1 vòng) for (ExpertField expertField : allExpertFields) { if (expertField.getExpertId().equals(detailVo.getId())) { CategoryVo categoryVo = categoryVoMap.get(expertField.getFieldId()); if (categoryVo != null) { categoryVoArray.add(categoryVo); } } } expertVo.setFieldVos(categoryVoArray); expertVos.add(expertVo);
}

}

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập Trình Hướng Đối Tượng trong Python

Chào các bạn Trong bài này, bạn sẽ tìm hiểu về Lập trình hướng đối tượng (OOP) bằng Python và khái niệm cơ bản của nó và một số các ví dụ. Các bạn cùng tìm hiểu trong bài viết của mình nhé.

0 0 50

- vừa được xem lúc

So sánh các đặc điểm của Dev khi làm việc tại Nhật và tại nước ngoài

Một bài viết gần đây trên Blog Qiita của một kỹ sư Nhật Bản đã có thâm niên làm việc lâu năm với nhiều môi trường khác nhau được tổng kết lại. Chúng ta hãy cùng đọc qua để xem tác giả có suy nghĩ như thế nào về các Dev trên thế giới nhé.

0 0 35

- vừa được xem lúc

Introductory knowledge of Internet of Things (IoT)

IoT (Internet of Things) là một hệ thống phân tích và tự động hóa tiên tiến khai thác công nghệ mạng, cảm biến, big data và trí tuệ nhân tạo để cung cấp các hệ thống hoàn chỉnh cho một sản phẩm hoặc dịch vụ. Các hệ thống này cho phép tính minh bạch, kiểm soát và hiệu suất cao hơn khi áp dụng cho bất

0 0 42

- vừa được xem lúc

Kiểm thử khả năng tiếp cận

1. Kiểm tra khả năng tiếp cận là gì. Nó là một tập hợp con của Kiểm tra khả năng sử dụng. Phần mềm nhận dạng giọng nói: Nó sẽ chuyển đổi từ được nói thành văn bản, dùng làm đầu vào cho máy tính.

0 0 42

- vừa được xem lúc

Tùy chỉnh Exceptions trong Python

Chào các bạn trong bài viết này, mình sẽ giới thiệu với các bạn về cách tùy chỉnh các Exceptions trong Python.Mình sẽ giải thích cho các bạn hiểu và cách xử dụng chúng.

0 0 36

- vừa được xem lúc

Introductory knowledge of Artificial Intelligence

Kể từ khi phát minh ra máy tính và máy móc, khả năng thực hiện các nhiệm vụ khác nhau của chúng đã tăng lên theo cấp số nhân. Con người đã phát triển hệ thống máy tính trên quan điểm các lĩnh vực làm việc đa dạng, tốc độ ngày càng tăng và kích thước ngày càng giảm theo thời gian.

0 0 28