Tôi có large datasets với hàng triệu bản ghi ở định dạng XML. Các bộ dữ liệu này là các bãi dữ liệu đầy đủ của một cơ sở dữ liệu đến một thời điểm nhất định.Làm cách nào để xác định sự khác biệt giữa hai tập dữ liệu lớn?
Giữa hai bãi mục mới có thể đã được thêm vào và các mục hiện có có thể đã được sửa đổi hoặc xóa. Giả sử lược đồ vẫn không thay đổi và mọi mục nhập đều có một ID duy nhất.
Cách tốt nhất để xác định delta giữa hai bộ dữ liệu này (bao gồm xóa và cập nhật) là gì?
Kế hoạch của tôi là tải mọi thứ vào RDBMS và đi từ đó.
Trước tiên, tải bãi chứa cũ hơn. Sau đó, tải dump mới hơn vào một lược đồ khác, nhưng khi làm như vậy, tôi sẽ kiểm tra xem mục nhập là mới hay là một bản cập nhật cho một mục nhập hiện có. Nếu có, tôi sẽ ghi lại ID trên một (các) bảng mới được gọi là "thay đổi".
Sau khi hoàn tất, tôi sẽ đi qua bãi chứa cũ đi qua tất cả các mục và xem liệu chúng có bản ghi trùng khớp (ví dụ: cùng một ID) trên bãi chứa mới hay không. Nếu không, hãy đăng nhập vào các thay đổi.
Giả sử tìm kiếm bản ghi bằng ID là hoạt động O(log n)
, điều này sẽ cho phép tôi thực hiện mọi thứ trong thời gian O(n log n)
.
Bởi vì tôi có thể xác định sự khác biệt bằng cách nhìn vào sự hiện diện hoặc vắng mặt của bản ghi chỉ với ID và ngày sửa đổi cuối cùng, tôi cũng có thể tải mọi thứ trong bộ nhớ chính. Độ phức tạp của thời gian sẽ giống nhau, nhưng với lợi ích bổ sung của I/O đĩa ít hơn, điều này sẽ làm cho điều này nhanh hơn theo thứ tự độ lớn.
Đề xuất? (Lưu ý: Đây là câu hỏi về hiệu suất nhiều hơn bất kỳ điều gì)
"Vì tôi có thể xác định ... nên làm điều này nhanh hơn theo thứ tự độ lớn". "Đây là một câu hỏi về hiệu năng hơn bất cứ điều gì". ...sooo làm điều này trong bộ nhớ sẽ nhanh hơn nhiều và bạn chủ yếu quan tâm đến hiệu suất. Có vẻ như bạn đã trả lời câu hỏi của riêng bạn. – Gerrat