Chuyển đến nội dung chính

Cơ sở dữ liệu riêng biệt hoặc Cơ sở dữ liệu dùng chung



Khi chúng tôi đã xác định dữ liệu cụ thể của người thuê và dữ liệu được chia sẻ của người thuê , bước tiếp theo sẽ là quyết định giữa hai chiến lược chính để lưu trữ dữ liệu:
Cơ sở dữ liệu riêng biệt cho mỗi người thuê, hoặc
một cơ sở dữ liệu chung được sử dụng bởi tất cả các khách thuê

Cả hai chiến lược trên đều có ưu điểm và nhược điểm, và có nhiều sự đánh đổi để xem xét khi đưa ra lựa chọn này.

Có một Cơ sở dữ liệu riêng cho từng người thuê sẽ dễ thực hiện hơn, đặc biệt là trong trường hợp chúng tôi thêm đa nhiệm ở giai đoạn sau của dự án (sau khi một phần chức năng đã được triển khai như thể đây sẽ không phải là ứng dụng đa nhiệm). Trong trường hợp này, mỗi người thuê sẽ chỉ có quyền truy cập vào cơ sở dữ liệu của riêng mình và không nên thay đổi lược đồ dữ liệu từ phiên bản không gây đột biến.

Điều này cũng đơn giản để cô lập dữ liệu người thuê. Dựa trên người dùng hiện tại, chúng tôi biết người thuê nó thuộc về và chúng tôi sẽ kết nối với cơ sở dữ liệu của người thuê đó. Vì vậy, không có rủi ro rằng chúng tôi sẽ trộn nhiều dữ liệu người thuê. (Tất nhiên nếu chúng ta có bộ nhớ đệm ở các cấp cao hơn thì những người đó cũng nên biết, nhưng đó là một chủ đề khác.)

Để tối đa hóa lợi ích chi phí của ứng dụng đa nhiệm vụ, chúng ta nên giữ các lược đồ giống hệt nhau cho mỗi cơ sở dữ liệu của mỗi người thuê. Điều này có nghĩa là khi chúng tôi thực hiện thay đổi lược đồ (vì chúng tôi thêm một cột cho một tính năng mới), thay đổi này cần được áp dụng cho tất cả các cơ sở dữ liệu. Do đó, chúng tôi sẽ có cùng một phiên bản cơ sở dữ liệu (trên thực tế là cùng một phiên bản ứng dụng) cho tất cả những người thuê nhà. Điều này có nghĩa là công cụ triển khai tự động của chúng tôi sẽ cần nâng cấp các lược đồ của tất cả các cơ sở dữ liệu khi chúng tôi triển khai một phiên bản mới trong môi trường thử nghiệm, chấp nhận hoặc sản xuất.

Đối với người thuê chia sẻ dữ liệu, một cách tiếp cận là sao chép nó trong cơ sở dữ liệu của từng người thuê. Điều này có nghĩa là chúng ta cần đồng bộ hóa các thay đổi của nó trên tất cả các cơ sở dữ liệu. Nếu nó chỉ là dữ liệu hệ thống, thì điều này có thể được thực hiện trong cùng một quy trình với việc cập nhật các lược đồ cơ sở dữ liệu từ phiên bản này sang phiên bản khác. Mặt khác, nếu người dùng có thể thay đổi nó (dữ liệu vận hành), thì chúng ta cần đặt một cơ chế đồng bộ hóa. Trong hầu hết các trường hợp, nó không cần phải là đồng bộ hóa thời gian thực, bởi vì những thay đổi được thực hiện bởi một người thuê, trên dữ liệu được chia sẻ, không cần phải có sẵn ngay lập tức cho những người khác.

Một cách tiếp cận khác là chỉ có một cơ sở dữ liệu riêng cho dữ liệu chung của người thuê . Vì vậy, đối với người thuê, chúng tôi sẽ kết nối với cơ sở dữ liệu riêng của mình cho dữ liệu cụ thể và cơ sở dữ liệu chung của người thuê đối với dữ liệu được chia sẻ. Chúng tôi giữ sự đơn giản trong việc cô lập dữ liệu của người thuê và chúng tôi không cần thực hiện bất kỳ đồng bộ hóa dữ liệu nào. Tuy nhiên, chúng tôi sẽ cần lấy ra các bảng dữ liệu được chia sẻ của người thuê từ cơ sở dữ liệu cụ thể của người thuê và sử dụng một số GUID làm ID để liên kết với nó. Cách tiếp cận này có thể có ý nghĩa hơn nữa nếu chúng ta có một tập hợp lớn dữ liệu được chia sẻ của người thuê , thường thay đổi và nó không liên kết với dữ liệu của người thuê. Với phương pháp này, chúng tôi thậm chí có thể xem xét một cơ sở dữ liệu không liên quan đến cơ sở dữ liệu chung của người thuê.

Nhận xét

Bài đăng phổ biến từ blog này

Tổng quan Multi tenancy

Multi tenant là gì ? Multi-Tenant - Multi-tenancy có nghĩa là một phiên bản duy nhất của phần mềm và cơ sở hạ tầng hỗ trợ của nó phục vụ nhiều khách hàng. Mỗi khách hàng chia sẻ ứng dụng phần mềm và cũng chia sẻ một cơ sở dữ liệu. Dữ liệu của mỗi người khách hàng bị cô lập và vẫn vô hình đối với những khách hàng khác. Lợi ích của Multi tenant Chi phí thấp hơn thông qua tính kinh tế theo quy mô: Với nhiều khách hàng, nhân rộng có ý nghĩa cơ sở hạ tầng ít hơn nhiều so với giải pháp lưu trữ vì khách hàng mới có quyền truy cập vào cùng một phần mềm cơ bản. Hơn nữa, người dùng không cần bận tâm về việc cập nhật các tính năng và cập nhật mới, họ cũng không cần phải trả phí bảo trì hoặc chi phí khổng lồ. Các bản cập nhật là một phần của đăng ký hoặc, nếu phải trả bất kỳ khoản phí bảo trì nào, nó được chia sẻ bởi nhiều người thuê, do đó làm cho nó trở thành danh nghĩa (nhân tiện, bao gồm các bản cập nhật). Kiến trúc Multi tenant phục vụ hiệu quả tất cả mọi người từ các khách hàng...

Multi tenant là gì ?

Bài toán hướng multi-tenancy trong thực tế gặp rất nhiều, nhưng có rất nhiều developer chưa nắm được khái niệm và cách thức hoạt động của các hệ thống thiết kế theo hướng này. Qua một thời gian nghiên cứu và phát triển các hệ thống, mình đúc rút một số kinh nghiệm muốn chia sẻ cho mọi người. Thực tế ta bắt gặp rất nhiều hệ thống sử dụng multi-tenacy vd: - Hệ thống quản lý cửa hàng cho phép nhiều đại lý có thể truy cập với những tài khoản độc lập, dữ liệu độc lập, nhưng cùng chung 1 hệ thống site. - Hệ thống quản lý công văn sử dụng trong tổng công ty và nhiều công ty con, cùng site nhưng dữ liệu độc lập. - Hệ thống quản lý dự án Jira - Hệ thống CRM của zoho, saleforce... Nhiều hệ thống sử dụng SQL server, Oracle ... thiết kế hệ thống multi-tenancy theo một trong các kiến trúc sau. Phương án I . Cùng chung một cơ sở dữ liệu (database), chia sẻ bảng (table) Tất cả các bảng liên quan đều có 1 khóa ngoại là ShopId. Dữ liệu sản phẩm của từng shop đều được lưu chung trong bả...

THIẾT KẾ DATABASE THEO HƯỚNG MULTI-TENANCY

Phương án I. Cùng chung một cơ sở dữ liệu (database), chia sẻ bảng (table) Ví dụ: Một hệ thống quản lý cửa hàng, có bảng shop, bảng sản phẩm (product), bảng acccount Bảng shop Shop ( Id, Name, Notes) Bảng user User( Id, Name, UserName, Password, ShopId ) Bảng product Product ( Id int, Code varchar(50), Name varchar(255), ShopId) Tất cả các bảng liên quan đều có 1 khóa ngoại là ShopId. Dữ liệu sản phẩm của từng shop đều được lưu chung trong bảng Product, nhưng được phân biệt nhau bởi trường ShopId. Điểm mạnh: - Thiết kế lưu trữ đơn giản. - Dễ cho việc phát triển. - Không gặp phải vấn đề đồng bộ cấu trúc bảng trong quá trình phát triền. Nhược điểm: - Không độc lập database nên việc một shop có thể xem dữ liệu của shop khác nếu có quyền truy cập SQL, phân quyền trên SQL thực sự là vấn đề lớn. - Vấn đề backup, restore dữ liệu cho từng shop là gần như không thể, chỉ có thể backup cho tất cả. - Vấn đề phát sinh thực sự phức tạp khi dữ liệu phình ...