Mục tiêu của tôi là thực sự đổ tất cả dữ liệu của cơ sở dữ liệu vào một tệp XML. Cơ sở dữ liệu không quá lớn, khoảng 300MB. Vấn đề là tôi có một giới hạn bộ nhớ 256MB (chỉ trong JVM). Vì vậy, rõ ràng tôi không thể chỉ đọc tất cả mọi thứ vào bộ nhớ.Xử lý số lượng dữ liệu rất lớn trong MyBatis
Tôi đã giải quyết vấn đề này bằng iBatis (có nghĩa là iBatis, không phải myBatis) bằng cách gọi số getList(... int skip, int max)
nhiều lần, với số tăng skip
. Điều đó giải quyết vấn đề bộ nhớ của tôi, nhưng tôi không ấn tượng với tốc độ. Các tên biến cho thấy rằng phương thức thực hiện dưới mui xe là đọc toàn bộ bỏ qua tập kết quả sau đó ghi lại được chỉ định. Điều này nghe khá dư thừa với tôi (tôi không nói đó là những gì phương pháp đang làm, tôi chỉ đoán dựa trên tên biến).
Bây giờ, tôi đã chuyển sang myBatis 3 cho phiên bản tiếp theo của đơn đăng ký của mình. Câu hỏi của tôi là: là có cách nào tốt hơn để xử lý số lượng lớn dữ liệu chunk bởi chunk trong myBatis? Có anyway để làm cho myBatis đầu tiên N hồ sơ, trả lại cho người gọi trong khi vẫn giữ kết quả thiết lập kết nối mở để thời gian tiếp theo người dùng gọi getList (...) nó sẽ bắt đầu đọc từ N + 1 hồ sơ mà không làm bất kỳ "bỏ qua"?
Câu trả lời của bạn thiếu một chi tiết quan trọng: bạn cần phải thêm @Options (fetchSize = Integer.MIN_VALUE) (hoặc tương đương XML) vào bảng sao kê của mình. Và nó không hoạt động trong MyBatis 3.0.5 (tôi đã kiểm tra với bộ phân tích bộ nhớ Eclipse). Tôi đã nâng cấp lên MyBatis 3.1.1 và bây giờ quá trình phát trực tuyến hoạt động tốt. –