18

Tôi đã nhìn thấy các ứng dụng SaaS được lưu trữ theo nhiều cách khác nhau. Có nên chia nhỏ các tính năng và mô-đun trên nhiều cơ sở dữ liệu không? Ví dụ, đặt những thứ như bảng Người dùng trên một DB và các bảng tính năng/ứng dụng cụ thể trên một DB khác và có lẽ các bảng được chia sẻ chung khác trong một DB khác?Thiết kế cơ sở dữ liệu SaaS - Nhiều Cơ sở dữ liệu? Tách?

+0

có thể trùng lặp với [Lợi ích của việc sử dụng một cơ sở dữ liệu duy nhất cho MACHI khách hàng là gì?] (Http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- database-for-each-client) – givanse

Trả lời

29

Bắt đầu với một cơ sở dữ liệu. Chia dữ liệu/chức năng khi dự án yêu cầu.

Đây là những gì chúng ta có thể học hỏi từ LinkedIn:

  • Một cơ sở dữ liệu duy nhất không làm việc
  • toàn vẹn tham chiếu sẽ không thể
  • Bất kỳ sự mất mát dữ liệu là một vấn đề
  • Caching là tốt thậm chí khi hiệu quả khiêm tốn
  • Không bao giờ đánh giá thấp quỹ đạo tăng trưởng

Nguồn:

LinkedIn architecture

LinkedIn communication architecture

0

Tự hỏi: Bạn đạt được điều gì bằng cách di chuyển mọi thứ vào cơ sở dữ liệu riêng biệt?

Rất nhiều nỗi đau về mặt quản lý sẽ là phỏng đoán của tôi. Tôi muốn cá nhân hơn để có mọi thứ trong một cơ sở dữ liệu duy nhất và nếu bạn nhấn các vấn đề không thể được giải quyết bởi một cơ sở dữ liệu duy nhất thì sau đó di chuyển dữ liệu vào nhiều cơ sở dữ liệu.

+3

Điều gì về hiệu suất và khả năng mở rộng? – Vyrotek

3

Có một cơ sở dữ liệu duy nhất là tốt nhất cho toàn vẹn dữ liệu vì sau đó bạn có thể sử dụng khóa ngoài. Bạn không thể có tính toàn vẹn dữ liệu được tích hợp này nếu bạn chia dữ liệu thành nhiều cơ sở dữ liệu. Đây không phải là vấn đề nếu dữ liệu của bạn không liên quan, nhưng nếu nó liên quan, nó sẽ có thể cho một cơ sở dữ liệu của bạn chứa dữ liệu không phù hợp với cơ sở dữ liệu khác. Trong trường hợp này, bạn sẽ cần phải viết một số mã quét cơ sở dữ liệu của bạn cho dữ liệu không nhất quán một cách thường xuyên để bạn có thể xử lý nó một cách thích hợp.

Tuy nhiên, nhiều cơ sở dữ liệu có thể cần thiết nếu bạn cần trang web/ứng dụng của mình có khả năng mở rộng cao (ví dụ: quy mô internet). Ví dụ, bạn có thể lưu trữ mỗi cơ sở dữ liệu trên một máy chủ vật lý khác nhau.

3

Tách cơ sở dữ liệu theo các tính năng có thể không phải là một ý tưởng hay trừ khi bạn thấy bằng chứng rõ ràng cho thấy cần thiết. Thông thường, bạn có thể cần phải cập nhật hai cơ sở dữ liệu như là một phần của một giao dịch đơn lẻ - và các giao dịch được phân phối sẽ khó hơn nhiều để làm việc. Hơn nữa, nếu cơ sở dữ liệu cần phải được tách ra, bạn có thể sử dụng sharding.

12

High Scalability là một blog hay để mở rộng các ứng dụng SaaS. Như đã đề cập, tách bảng trên cơ sở dữ liệu như bạn đề xuất thường là một ý tưởng tồi. Nhưng một khái niệm tương tự là sharding, nơi bạn giữ cùng một lược đồ (hoặc tương tự), nhưng chia nhỏ dữ liệu trên nhiều máy chủ. Ví dụ: người dùng 1-5000 ở trên server1 và người dùng 5000-10000 trên máy chủ2. Tùy thuộc vào các truy vấn mà ứng dụng của bạn sử dụng, nó có thể là một cách hiệu quả để mở rộng quy mô.

8

Đối với các ứng dụng SaaS, bạn sử dụng nhiều cơ sở dữ liệu cho nhiều người thuê, nhưng thường không chia nhỏ mô-đun.

Đây là mô hình phổ biến nhất mà tôi đã thấy trong thiết kế ứng dụng SaaS. Lược đồ cơ sở của bạn được nhân rộng cho từng đối tượng thuê mà bạn thêm vào ứng dụng của mình.

0

Giữ nó một thiết kế tự nhiên (denormalize càng nhiều càng cần thiết, bình thường như ít khi có yêu cầu). Chia mô hình DB thành các mô đun của nó và giữ nguyên các nguyên tắc định hướng dịch vụ bằng cách truy cập dữ liệu với một dịch vụ (sở hữu dữ liệu).

1

Có nhiều cách để thực hiện nó, nhưng các vấn đề về việc thuê nhiều người đi sâu hơn so với mô hình dữ liệu. Tôi ghét phải cắm sản phẩm, nhưng hãy xem SaaSGrid bởi công ty tôi làm việc tại, Apprenda. Chúng tôi là một hệ điều hành đám mây cho phép bạn viết các ứng dụng SOA cho thuê đơn (cảm thấy tự do sử dụng NHibernate để truy cập dữ liệu) cho thuê nhiều ứng dụng của bạn. Khi bạn xuất bản ứng dụng của mình, bạn có thể thực hiện những việc như chọn mô hình dữ liệu (cơ sở dữ liệu bị cô lập hoặc chia sẻ) và SaaSGrid sẽ triển khai tương ứng và ứng dụng của bạn sẽ chạy mà không cần bất kỳ thay đổi mã nào - chỉ cần viết mã như thể nó là dành cho người thuê nhà duy nhất!

1

Tại sao lại sử dụng cơ sở dữ liệu?

Tôi nghĩ nên sử dụng các hệ thống lưu trữ phân tán như Hadoop, Voldemort (project-voldemort.com được phát triển và sử dụng bởi LinkedIn).

Tôi nghĩ rằng db tốt cho dữ liệu nhạy cảm như hoạt động tiền, nhưng đối với mọi thứ khác, bạn có thể sử dụng kho phân phối.

Các vấn đề liên quan