18

여러 가지 방법으로 호스팅되는 SaaS 애플리케이션을 보았습니다. 기능과 모듈을 여러 데이터베이스로 분할하는 것이 좋은 생각입니까? 예를 들어 하나의 DB에 User 테이블, 다른 DB에 피쳐/앱 특정 테이블, 다른 DB에 공통적으로 공유되는 다른 테이블 등을 추가 할 수 있습니까?SaaS 데이터베이스 디자인 - 다중 데이터베이스? 스플릿?

+0

가능한 복제본 [각 클라이언트에 단일 데이터베이스를 사용하면 어떤 이점이 있습니까?] (http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single- database-for-each-client) – givanse

답변

29

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

  • 하나의 데이터베이스가
  • 참조 무결성은 모든 데이터 손실이
  • 캐싱도 좋은 문제가
  • 할 수 없습니다 작동하지 않습니다 여기에

    우리가 링크드 인에서 배울 수있는 무엇 그다지 효과가 없을 때
  • 성장 궤도를 절대로 과소 평가하지 마십시오.

출처 :

LinkedIn architecture

LinkedIn communication architecture

0

자신에게 질문하십시오 : 모든 것을 별도의 데이터베이스로 옮김으로써 얻게되는 이점은 무엇입니까?

경영 측면에서 많은 고통이 있습니다. 저는 개인적으로 단일 데이터베이스에서 모든 것을 갖고 싶어합니다. 그리고 단일 데이터베이스로는 해결할 수없는 문제가 발생하면 데이터를 여러 데이터베이스로 마이그레이션하십시오.

+3

성능 및 확장 성은 어떻습니까? – Vyrotek

3

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

그러나 사이트/애플리케이션의 확장 성 (예 : 인터넷 규모)이 필요한 경우 여러 데이터베이스가 필요할 수 있습니다. 예를 들어, 서로 다른 실제 서버에서 각 데이터베이스를 호스트 할 수 있습니다.

3

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

12

는 SaaS 애플리케이션을 확장하기위한 좋은 블로그입니다. 앞서 언급했듯이, 제안한대로 데이터베이스간에 테이블을 분할하는 것은 일반적으로 좋지 않습니다. 하지만 비슷한 개념은 동일한 (또는 유사한) 스키마를 유지하면서 여러 서버에 데이터를 분할하는 샤딩 (sharding)입니다. 예를 들어, 사용자 1-5000은 server1에 있고 사용자 5000-10000은 server2에 있습니다. 응용 프로그램에서 사용하는 쿼리에 따라 효율적으로 확장 할 수 있습니다.

8

SaaS 애플리케이션의 경우 여러 테넌트에 여러 데이터베이스를 사용하지만 대개 모듈별로 분할하지 마십시오.

이것은 SaaS 애플리케이션 디자인에서 본 가장 일반적인 모델입니다. 응용 프로그램에 추가하는 각 테넌트에 대해 기본 스키마가 복제됩니다.

0

이 자연스러운 디자인으로 유지하고 (필요에 따라 필요한만큼이 비정규 덜으로 정상화). DB 모델을 모듈로 분할하고 데이터 (데이터를 소유하고있는)로 데이터를 접함으로써 서비스 지향 원칙을 염두에 두십시오.

1

다양한 방법으로이를 수행 할 수 있지만 멀티 테넌시 문제는 데이터 모델보다 중요합니다. 나는 제품을 꽂는 것을 싫지만, Apprenda에서 일하는 나의 회사에 의해 SaaSGrid을 체크 아웃한다. 우리는 당신이 하나의 세입자 SOA 애플 리케이션 (데이터 액세스를 위해 NHibernate를 자유롭게 사용하자)을 작성할 수있게 해주는 클라우드 운영 시스템이다. 귀하의 앱에 멀티 테넌시. 응용 프로그램을 게시 할 때 데이터 모델 (격리 된 데이터베이스 또는 공유)을 선택하면 SaaSGrid가 적절하게 배포되고 코드 변경없이 응용 프로그램이 실행됩니다. 마치 단일 임차인처럼 코드를 작성하십시오!

1

데이터베이스를 사용하는 이유는 무엇입니까?

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

돈 운영과 같은 감각적 인 데이터에 대해서는 db가 좋지만 다른 모든 것에 대해서는 분산 된 저장소를 사용할 수 있다고 생각합니다.

관련 문제