Là có mối quan hệ giữa các cơ sở dữ liệu riêng biệt thực hành xấu?


8

Tôi đang làm việc với một khách hàng có nhiều cơ sở dữ liệu. Có một số mastercơ sở dữ liệu cấp có mối quan hệ trở lại với chúng từ instancecơ sở dữ liệu cấp (DB cụ thể của ứng dụng). Các mối quan hệ từ instanceđến masterlà các giá trị nguyên biểu thị một khóa chính cho các bảng trong master. Các khung nhìn và các thủ tục được lưu trữ trong phần instancesđược thiết lập để tải dữ liệu từ mastercác khóa được lưu trữ này.

Rõ ràng, không có tính toàn vẹn tham chiếu thực sự, nhưng đó có phải là thông lệ xấu hay dữ liệu nên nằm trong các bảng chỉ đọc trong instancecơ sở dữ liệu?

Câu trả lời:


8

Vấn đề duy nhất là thực sự không có cách nào thuận tiện để thực thi các mối quan hệ này. Bạn có thể sử dụng một khối lượng kích hoạt hoặc lưu trữ bảng chính trong mỗi cơ sở dữ liệu cá thể và chỉ cần hiển thị tất cả chúng dưới dạng siêu dữ liệu cho chủ, có thể sử dụng chế độ xem.

Nhược điểm lớn nhất, tôi nghĩ, phải làm với việc giữ cho dữ liệu chính xác và được đồng bộ hóa, trong ít nhất ba kịch bản ngoài đỉnh đầu của tôi (tất cả vẫn có thể là một vấn đề ngay cả khi bạn sử dụng trình kích hoạt):

  • các giao dịch cơ sở dữ liệu chéo được phối hợp không đúng cách - ví dụ: một giao dịch sẽ thêm một hàng mới để làm chủ, chuyển giao danh tính cho một giao dịch khác và sau đó giao dịch đầu tiên quay trở lại.
  • phục hồi từ một lỗi cơ sở dữ liệu - một cơ sở dữ liệu gặp sự cố, bạn phải khôi phục đến một thời điểm, có thể là trước khi các giao dịch thành công khác trong cơ sở dữ liệu khác kết thúc. Điều này có thể có nghĩa là nếu một cơ sở dữ liệu cá thể phải hoàn nguyên về thời gian sớm hơn, thì nó thiếu các hàng mà chủ nhân mong đợi; nếu chủ phải hoàn nguyên, có thể tất cả các cơ sở dữ liệu cá thể sẽ có các giá trị không tồn tại trong chủ.
  • tính nhất quán sao lưu nói chung - nếu bạn cần khắc phục thảm họa, bạn sẽ gặp khó khăn trong việc giữ tất cả các bản sao lưu đầy đủ và nhật ký của bạn giao dịch nhất quán theo thời gian. Ảnh chụp nhanh hệ thống tệp không giúp ích gì cho điều này và ngay cả các Nhóm sẵn có cũng không đảm bảo tính nhất quán trong giao dịch cơ sở dữ liệu cho các cơ sở dữ liệu trong một Nhóm sẵn có. Nếu bạn gặp thảm họa và cần khôi phục cơ sở dữ liệu của mình sang một hệ thống mới, không có cách nào để chắc chắn rằng chúng sẽ nhất quán trong giao dịch.

Tất cả những gì đã nói, tôi đã luôn luôn và sẽ luôn là một fan hâm mộ của việc tách người thuê ra khỏi cơ sở dữ liệu của riêng họ và tôi thừa nhận có rủi ro liên quan đến cơ sở dữ liệu trung tâm - nhưng điều đó là cần thiết.

(Là một sang một bên, bạn nên sử dụng tên cho cơ sở dữ liệu của bạn không phải là thạc sĩ / ví dụ. masterTrong SQL Server chắc chắn có một ý nghĩa rõ ràng, và thậm chí đọc những lời của riêng tôi ở trên họ có thể mơ hồ. Tương tự cho instance. Trong một kiếp trước tôi chạy một đa hệ thống -tenant và chúng tôi đã gọi cơ sở dữ liệu trung tâm Controlvà cơ sở dữ liệu người thuê, tốt , Tenants.)


2

Nếu bạn đang theo dõi một kiến ​​trúc như microservice, thì rất cần phải có khả năng tương quan dữ liệu trên nhiều dịch vụ tự trị, mỗi dịch vụ đều có kho dữ liệu riêng. Mỗi dịch vụ sẽ hiểu rằng các quy trình kinh doanh thường được thực hiện trong một giao dịch cơ sở dữ liệu hiện có thể có khả năng hoạt động lâu hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.