Nên dùng Stream API trong java 8 hay viết naive SQL?

A/c cho em hỏi sử dụng Stream API liệu có nhanh hơn SQL? Ví dụ e muốn đếm số lượng nhân viên có lương > 10tr thì nên viết sql bình thường hay đọc lên hết table đó lên rồi dùng stream api để đếm (list.stream().filter().count()) ? theo em biết thì stream api có xử lý song song nên ko biết có nhanh hơn hay tiện hơn viết sql bình thường ko ạ?

Hi there,

In general, Stream API không nhanh hơn SQL query đâu cậu.
SQL được design để lưu trữ và tìm kiếm dữ liệu hiệu quả, nếu cậu có index hợp lý, SQL query nên có performance tốt hơn.

Trong ví dụ của cậu, chắc chắn cậu nên dùng SQL query rồi. Đó là câu query đơn giản, không chứa logic, và kết quả trả về 1 record duy nhất.

Ý cậu chắc là parallelStream. In general, nó nhanh hơn normal stream, và trong TH của cậu có thể dùng, tuy nhiên, cậu sẽ có performance chậm hơn so với dùng SQL query vì:

  • Cậu cần deserialize dữ liệu từ kết quả mà SQL server trả về, và việc này tốn thời gian (cái này là noticable được nếu lượng record trả về của cậu lên tới hàng triệu).
  • Việc deserialize dữ liệu kể trên cũng consume heap memory của cậu (cái này có thể notice được nếu lượng record trả về của cậu lên tới hàng triệu).
  • Bên SQL server, toàn bộ dữ liệu cần được đóng gói để gửi về client (app của cậu). Dữ liệu càng nhiều thì thời gian đóng gói càng lớn (thường thì không lớn quá đâu).
  • Nếu cậu dùng 3G để gửi, cậu cũng nên lo về lượng dữ liệu gửi trong network :wink: (significant impact nếu như cậu gửi hàng triệu record)

Nếu cậu chắc chắn bảng đó của cậu chỉ có vài nghìn record đổ xuống, cậu có thể lựa chọn cách mà cậu thấy thoải mái nhất :smiley: Nếu hơn, lúc đó cậu mới cần để ý.

6 Likes

Không hiểu sao những năm gần đây người ta ngại SQL đến thế.

6 Likes

Ngoài vấn đề performace của sort, bạn quên mất chi phí để truyền tải dữ liệu đến java nữa.

4 Likes

10tr record đẩy lên hết memory để chỉ count hả :v

3 Likes

Ban đầu tớ cũng đọc nhầm như cậu :smiley:
Ý cậu ấy là tìm các record có lương lớn hơn 10 triệu :smiley:

3 Likes

vì e học ngu sql :frowning:

Khó quá thì search, làm lâu sẽ tự tìm ra thôi. Thường mấy câu truy vấn sẽ có trên stackoverflow. Với cả, nếu bạn muốn biết có nhanh hơn, hãy thử xem:

SELECT COUNT(*) FROM `NhanVien` WHERE `luong` > 10000000
4 Likes

@907pqv Kinh nghiệm cho thấy nếu em ko vững cái basic mà nhào vô framework liền thì thế nào cũng quay lại đây hỏi này hỏi nọ, vì thiếu kiến thức căn bản nên ko thể dùng cũng như search tốt. Nhiều khi nó còn tốn thời gian hơn. Thế nên khuyên là em nên nắm vững SQL cái đã. Với lại như @library đã gợi ý, ko phải cứ dùng parallel sẽ nhanh hơn, mà nó còn phụ thuộc vào nhiều thứ khác.

8 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?