2012-03-14 42 views
8

Tôi có tệp lớn khoảng 10 GB. Tôi phải thực hiện các thao tác như sắp xếp, lọc, vv trên các tệp trong Java. Mỗi thao tác có thể được thực hiện song song.Xử lý các tệp lớn trong java

Có tốt để bắt đầu 10 chuỗi và đọc tệp song song không? Mỗi chủ đề đọc 1 GB của tệp. Có tùy chọn nào khác để giải quyết sự cố với các tệp cực lớn và xử lý chúng nhanh nhất có thể không? NIO có tốt cho các tình huống như vậy không?

Hiện tại, tôi đang thực hiện các hoạt động liên tục và mất khoảng 20 phút để xử lý các tệp đó.

Cảm ơn,

+0

Nếu bạn có quyền truy cập vào nhiều máy, Map/Reduce có thể là giải pháp khác mà bạn có thể xem. – Jochen

Trả lời

11

Có tốt để bắt đầu 10 đề và đọc file song song?

Hầu như chắc chắn không - mặc dù điều đó phụ thuộc. Nếu từ SSD (nơi không có thời gian tìm kiếm hiệu quả) thì có thể là. Nếu đó là một đĩa truyền thống, chắc chắn là không.

Điều đó không có nghĩa là bạn không thể sử dụng nhiều chủ đề - bạn có thể tạo một chủ đề để đọc tệp, chỉ thực hiện các tác vụ thô sơ nhất để đưa dữ liệu vào các phần có thể xử lý được. Sau đó, sử dụng hàng đợi của nhà sản xuất/người tiêu dùng để cho nhiều luồng quá trình dữ liệu.

Nếu không biết nhiều hơn "sắp xếp, bộ lọc, v.v." (chúng khá mơ hồ), chúng tôi thực sự không thể hiểu được quá trình song song ở vị trí đầu tiên như thế nào - nhưng cố gắng thực hiện IO song song trên một tệp có lẽ không được trợ giúp.

1

Hãy thử định dạng mã để xem vị trí tắc nghẽn. Bạn đã cố gắng có một thread đọc toàn bộ tập tin (hoặc càng nhiều càng tốt), và cho rằng tắt đến 10 chủ đề để xử lý? Nếu File I/O là nút cổ chai của bạn (có vẻ hợp lý), điều này sẽ cải thiện thời gian chạy tổng thể của bạn.

Các vấn đề liên quan