문제

저는 SaaS 애플리케이션이 다양한 방식으로 호스팅되는 것을 보았습니다.여러 데이터베이스에 걸쳐 기능과 모듈을 분할하는 것이 좋은 생각입니까?예를 들어, 하나의 DB에 User 테이블을 배치하고 다른 DB에 기능/앱 관련 테이블을 배치하고 다른 DB에 일반적으로 공유되는 다른 테이블을 배치합니까?

도움이 되었습니까?

해결책

하나의 데이터베이스로 시작하세요.프로젝트에 필요할 때 데이터/기능을 분할합니다.

LinkedIn에서 배울 수 있는 내용은 다음과 같습니다.

  • 단일 데이터베이스가 작동하지 않습니다
  • 참조 무결성이 불가능합니다.
  • 모든 데이터 손실은 문제입니다
  • 캐싱은 어느 정도 효과적일 때에도 좋습니다.
  • 성장 궤적을 결코 과소평가하지 마세요

원천:

링크드인 아키텍처

LinkedIn 커뮤니케이션 아키텍처

다른 팁

높은 확장성 SaaS 애플리케이션 확장을 위한 좋은 블로그입니다.언급했듯이 제안한 대로 데이터베이스 간에 테이블을 분할하는 것은 일반적으로 나쁜 생각입니다.그러나 유사한 개념은 동일한(또는 유사한) 스키마를 유지하지만 데이터를 여러 서버에 분할하는 샤딩입니다.예를 들어 사용자 1-5000은 server1에 있고 사용자 5000-10000은 server2에 있습니다.애플리케이션에서 사용하는 쿼리에 따라 효율적인 확장 방법이 될 수 있습니다.

SaaS 애플리케이션의 경우 여러 테넌트에 대해 여러 데이터베이스를 사용하지만 일반적으로 모듈별로 분할하지 않습니다.

이는 SaaS 애플리케이션 설계에서 본 가장 일반적인 모델입니다.애플리케이션에 추가하는 각 테넌트에 대해 기본 스키마가 복제됩니다.

단일 데이터베이스를 사용하면 외래 키를 사용할 수 있으므로 데이터 무결성에 가장 좋습니다.데이터를 여러 데이터베이스로 분할하는 경우 기본 제공 데이터 무결성을 가질 수 없습니다.데이터가 관련되어 있지 않으면 문제가 되지 않지만, 관련되어 있는 경우 한 데이터베이스에 다른 데이터베이스와 일치하지 않는 데이터가 포함될 수 있습니다.이 경우 적절하게 처리할 수 있도록 정기적으로 데이터베이스에서 일관되지 않은 데이터를 검색하는 코드를 작성해야 합니다.

그러나 사이트/애플리케이션의 확장성이 높아야 하는 경우(예:인터넷 규모).예를 들어, 서로 다른 물리적 서버에서 각 데이터베이스를 호스팅할 수 있습니다.

데이터베이스를 기능별로 분할하는 것은 필요성을 시사하는 강력한 증거가 없다면 좋은 생각이 아닐 수도 있습니다.단일 트랜잭션의 일부로 두 개의 데이터베이스를 업데이트해야 하는 경우가 종종 있으며, 분산 트랜잭션은 작업하기가 훨씬 더 어렵습니다.또한 데이터베이스를 분할해야 하는 경우 샤딩을 사용할 수 있습니다.

이를 달성하는 방법은 다양하지만 다중 테넌트 문제는 단순한 데이터 모델보다 더 깊습니다.제품을 연결하는 것은 싫지만 확인해 보세요. SaaS그리드 내가 다니는 회사에서, 부록.우리는 앱에 다중 테넌트를 자동으로 주입하는 단일 테넌트 SOA 앱(데이터 액세스를 위해 NHibernate를 자유롭게 사용)을 작성할 수 있는 클라우드 운영 체제입니다.앱을 게시할 때 데이터 모델(격리된 데이터베이스 또는 공유)을 선택하는 등의 작업을 수행할 수 있으며 SaaSGrid는 그에 따라 배포되고 코드 변경 없이 앱이 실행됩니다. 단일 테넌트용인 것처럼 코드를 작성하기만 하면 됩니다!

왜 데이터베이스를 사용합니까?

Hadoop, Voldemort(LinkedIn이 개발하고 사용하는 project-voldemort.com)와 같은 분산 스토리지 시스템을 사용하는 것이 좋다고 생각합니다.

나는 돈 작업과 같은 민감한 데이터에 DB가 좋다고 생각하지만 다른 모든 것에는 분산 저장소를 사용할 수 있습니다.

자신에게 물어:모든 것을 별도의 데이터베이스로 이동하면 무엇을 얻을 수 있나요?

관리 측면에서 많은 고통이 있을 것 같아요.저는 개인적으로 모든 것을 단일 데이터베이스에 보관하고 나중에 단일 데이터베이스로 해결할 수 없는 문제가 발생하면 데이터를 여러 데이터베이스로 마이그레이션하고 싶습니다.

자연스러운 디자인을 유지하세요(필요한 만큼 비정규화하고 필요한 만큼 정규화).DB 모델을 모듈로 분할하고 데이터를 서비스(데이터를 소유하는)로 앞당겨 서비스 지향 원칙을 염두에 두세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top