Tôi phải thực hiện đồng bộ hóa dữ liệu giữa hai cơ sở dữ liệu lớn có cấu trúc hoàn toàn khác nhau. Về cơ bản, tôi cần phải grap một số dữ liệu về các sản phẩm trong các bảng khác nhau trong cơ sở dữ liệu đầu tiên và sắp xếp lại chúng cho các bảng khác trong cơ sở dữ liệu thứ hai.
Tạo sản phẩm của tôi lần đầu tiên không phức tạp lắm. Nhưng tôi đang tìm cách cập nhật một số dữ liệu cụ thể - không phải tất cả dữ liệu - về từng sản phẩm.
Rõ ràng, có một vài vấn đề làm cho điều này khó khăn.
- Tôi không được phép làm bất cứ điều gì trên cơ sở dữ liệu nguồn ngoài các truy vấn chọn.
- Trên cơ sở dữ liệu đích, tôi có thể thực hiện các truy vấn thông thường (chọn, cập nhật, chèn, tạo) nhưng tôi không thể sửa đổi cấu trúc / bảng hiện có.
- Db mục tiêu và nguồn có cấu trúc hoàn toàn khác nhau, các bảng hoàn toàn không giống nhau, do đó dữ liệu thực sự phải được sắp xếp lại - so sánh các bảng sẽ không hoạt động.
- Cơ sở dữ liệu đích sử dụng máy chủ MySQL - nguồn có thể là DB2.
- Không có trường "cập nhật thời gian" ở bất cứ đâu.
Vì vậy, toàn bộ quá trình cần phải được thực hiện trong một tập lệnh Python (lý tưởng).
Tôi nghĩ về việc tạo một hàm băm cho mỗi sản phẩm, dựa trên các trường để cập nhật trong cơ sở dữ liệu đích: md5 (mã + mô tả + nhà cung cấp + khoảng 10 trường khác). Một hàm băm mới dựa trên cùng một dữ liệu sẽ được tạo ra hàng ngày từ cơ sở dữ liệu nguồn. Tôi sẽ lưu trữ tất cả các giá trị băm trong một bảng duy nhất (mã mục, current_hash, old_hash) cho mục đích biểu diễn. Sau đó so sánh và cập nhật sản phẩm nếu hàm băm mới khác với băm cũ.
Có khoảng 500 000 sản phẩm nên tôi hơi lo lắng về hiệu suất.
Đó có phải là cách tốt để đi?