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?
Trả lời
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:
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.
Điều gì về hiệu suất và khả năng mở rộng? – Vyrotek
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.
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.
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ô.
Đố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.
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).
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!
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.
- 1. Mẫu thiết kế dữ liệu/cơ sở dữ liệu?
- 2. thay đổi nhiều cơ sở dữ liệu mysql cùng một lúc (thay đổi cơ sở dữ liệu SAAS)
- 3. Thừa kế trong thiết kế cơ sở dữ liệu
- 4. Lỗi khi tách cơ sở dữ liệu SQLite - cơ sở dữ liệu bị khóa
- 5. Một cơ sở dữ liệu người dùng phục vụ nhiều cơ sở dữ liệu ứng dụng
- 6. Câu hỏi thiết kế cơ sở dữ liệu
- 7. cơ sở dữ liệu-thiết kế: bảng thích?
- 8. Thiết kế một cơ sở dữ liệu Schema Localized
- 9. Thiết kế cơ sở dữ liệu thời gian trong Cassandra
- 10. Thiết kế cơ sở dữ liệu tài chính cá nhân
- 11. Phương pháp thiết kế cơ sở dữ liệu đồ thị
- 12. thiết kế trường bảng trong cơ sở dữ liệu mysql?
- 13. công cụ thiết kế cơ sở dữ liệu câu hỏi
- 14. Thiết kế cơ sở dữ liệu Thực tiễn tốt nhất
- 15. Tư vấn thiết kế cơ sở dữ liệu cần
- 16. Thiết kế cơ sở dữ liệu nào tốt hơn?
- 17. Thiết kế bảng cơ sở dữ liệu chung
- 18. Thiết kế cơ sở dữ liệu thanh toán định kỳ
- 19. Một cơ sở dữ liệu và nhiều cơ sở dữ liệu
- 20. Kết hợp nhiều cơ sở dữ liệu vào một cơ sở dữ liệu đơn
- 21. Chia nhỏ tệp mysqldump với nhiều cơ sở dữ liệu, theo cơ sở dữ liệu
- 22. Cơ sở dữ liệu người dùng đơn và cơ sở dữ liệu nhiều người dùng
- 23. Mẫu nhà máy cơ sở dữ liệu với nhiều cơ sở dữ liệu
- 24. Thiết kế cơ sở dữ liệu tốt (lược đồ) cho cơ sở dữ liệu tham dự là gì?
- 25. Chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác
- 26. Zend Framework nhiều cơ sở dữ liệu
- 27. LINQ trên nhiều cơ sở dữ liệu
- 28. Nhiều cơ sở dữ liệu trong Rails
- 29. MagicalRecord: nhiều cơ sở dữ liệu
- 30. thừa kế trong cơ sở dữ liệu tài liệu?
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