Tôi sẽ bắt đầu bằng cách thêm lớp cơ sở dữ liệu để chấp nhận cuộc gọi API từ lớp doanh nghiệp, sau đó ghi vào cả lược đồ cũ và mới. Điều này thêm độ phức tạp lên phía trước, nhưng nó cho phép bạn đảm bảo rằng dữ liệu vẫn được đồng bộ hóa.
Điều này sẽ yêu cầu thay đổi hệ thống cũ để gọi API thay vì phát hành các câu lệnh SQL. Nếu họ không có tầm nhìn xa để làm điều đó ban đầu, bạn có thể không có khả năng để có cách tiếp cận của tôi. Nhưng, bạn nên làm điều đó trong tương lai.
Trình kích hoạt có thể có hoặc không hoạt động. Trong các phiên bản cũ của MySQL, có thể chỉ có một kích hoạt của một kiểu đã cho trên một bảng đã cho. Điều này buộc bạn gộp những thứ không liên quan vào một kích hoạt duy nhất.
Nhân rộng có thể giải quyết một số thay đổi - Công cụ, kiểu dữ liệu, v.v. Nhưng không thể tách một bảng thành hai. Hãy cẩn thận về sự nhân bản của Triggers và nơi Trigger có hiệu lực (giữa Master và Slave). Nói chung, một thói quen được lưu trữ phải được thực hiện trên Master, cho phép hiệu ứng được nhân rộng đến slave. Nhưng nó có thể là giá trị xem xét làm thế nào để có kích hoạt chạy trong Slave để thay thế. Hoặc các trình kích hoạt khác nhau trong hai máy chủ.
Một ý nghĩ khác là thực hiện chuyển đổi theo từng giai đoạn.Bằng cách lập kế hoạch cẩn thận về thay đổi lược đồ so với ứng dụng của trigger so với thay đổi mã so với lớp cơ sở dữ liệu, bạn có thể thực hiện chuyển đổi từng phần một, đôi khi không bị mất điện lớn để cập nhật mọi thứ cùng một lúc. Một ví dụ đơn giản: (1) thay đổi mã để tự động xử lý lược đồ mới hoặc cũ, (2) thay đổi lược đồ, (3) dọn sạch mã (loại bỏ xử lý lược đồ cũ).
Nguồn
2017-03-31 19:03:35
Hệ thống cũ ít nhất có các khóa chính (hoặc thay thế) không? – joop
@joop Có. Có các phím chính –
Giữ các PK này và tham khảo chúng trong cơ sở dữ liệu mới. Điều này có thể trực tiếp, hoặc gián tiếp, thông qua một lớp bổ sung của indirection, như data-vault. – joop