Tôi đang viết một ứng dụng xử lý nhiều tệp xml (> 1000) với cấu trúc nút sâu. Mất khoảng sáu giây với woodstox (API sự kiện) để phân tích cú pháp tệp với 22.000 Nút.Phân tích cú pháp XML song song trong Java
Thuật toán được đặt trong quá trình tương tác với người dùng, trong đó chỉ một vài giây thời gian phản hồi có thể chấp nhận được. Vì vậy, tôi cần phải cải thiện chiến lược cách xử lý các tệp xml.
- Quy trình của tôi phân tích tệp xml (chỉ trích xuất một vài nút).
- Nút được giải nén được xử lý và kết quả mới được ghi vào luồng dữ liệu mới (dẫn đến bản sao của tài liệu có các nút đã sửa đổi).
Bây giờ tôi đang suy nghĩ về một giải pháp đa luồng (có quy mô tốt hơn trên 16 lõi + phần cứng). Tôi đã nghĩ về những điều sau đây:
- Tạo nhiều trình phân tích cú pháp và chạy chúng song song với nguồn xml.
- Viết lại thuật toán phân tích cú pháp của tôi thread-lưu vào sử dụng chỉ có một thể hiện của phân tích cú pháp (nhà máy, ...)
- Chia nguồn XML vào khối và gán các khối để nhiều luồng xử lý (map-reduce xml - serial)
- Tối ưu hóa của tôi thuật toán (trình phân tích cú pháp StAX tốt hơn so với woodstox?)/Sử dụng trình phân tích cú pháp với tính năng đồng thời tích hợp
Tôi muốn cải thiện cả hiệu suất tổng thể và hiệu suất "cho mỗi tệp".
Bạn có gặp phải vấn đề như vậy không? Cách tốt nhất để đi là gì?
Không rõ cần tối đa hóa gì ở đây ... hiệu suất trên tệp SINGLE hoặc tổng hiệu suất trên tất cả 1000 tệp. –
Một đề xuất khác: nếu bạn có thể định lượng kích thước tệp, để cho phép tính toán trong suốt (megabyte trên giây được xử lý), nó có thể đưa ra ý tưởng về hiệu suất dự kiến. Tôi thường nhận được 10 - 40 MB/s để phân tích cú pháp với Woodstox khi thử nghiệm; nhưng ổ đĩa cứng của tôi chỉ có thể cung cấp 5 - 10 MB/s tốc độ bền vững. – StaxMan
Bạn đã xem vtd-xml chưa? nó là trạng thái của nghệ thuật trong xử lý nhiệm vụ nặng nề ... nó hiệu quả hơn nhiều so với SAX hay stax? –