2012-09-11 3 views
5

나는 node.js에 SaaS 애플리케이션을 구축 중이며 MongoDB를 Mongoose ODM이있는 데이터베이스로 사용하려고합니다. 수백에서 수천 사이의 여러 고객을 지원해야하며 각 고객의 데이터 간에는 상호 작용이 없습니다.MongoDB for SaaS에 대한 다중 데이터베이스

제 생각에는 각 고객에 대한 새 데이터베이스와 글로벌 정보를 보유한 단일 "마스터"데이터베이스를 만드는 것이 좋습니다. 예를 들어, 앱에 대한 단일 로그인 페이지가 있으므로 모든 사용자/비밀번호 정보를 "마스터"데이터베이스에 저장하려고했지만 고객 데이터베이스에있는 모든 사용자의 프로필 정보는 자신이 속한 데이터베이스에 저장하려고했습니다. 나는 이것이 각 고객의 데이터를 완벽하게 격리하고 고객을 개별적으로 백업/복원 할 수있는 좋은 디자인이라고 생각했습니다.

걱정되는 점은 node.js에서 여러 데이터베이스에 연결하면 성능에 영향이 있다는 것입니다. 누구든지 그 응용 프로그램이나 아키텍처에 대한 의견에 어떤 영향을 미칠지 알고 있습니까?

보너스 질문 : 리버스 작업을 수행하고 모든 고객의 데이터를 SaaS 솔루션에서 고객 ID로 구분 된 단일 DB에 저장하는 감사 관련 사항을 알고 계십니까?

답변

5

앱 아키텍처, 사용법 및 쿼리 패턴, 클라이언트 간의 분포 (즉, 클라이언트마다 사용 수준이 대략 동일하거나 사용하는 클라이언트가 10 % 정도일 수 있기 때문에 쉬운 대답은 아닙니다. 리소스의 90 %), 코드 대 운영 관리 및 기타 여러 가지 문제에 대해 지출 할 수있는 비용.

1) 데이터베이스가 하나 밖에 없기 때문에 컴퓨팅 리소스가 적게 들고 더 잘 확장 할 수 있지만 액세스 레이어를 코딩하는 것은 더 어려울 것이며 실제로 가질 수 있습니다. 확실한 이유 때문에 보안 계층을 잘 설계 할 수 있습니다. 또한 연결 수가 더 적으므로 클라이언트/웹 서버 끝에서 더 적은 리소스를 소비합니다. 하나의 모 놀리 식 데이터베이스를 접근 할 때

이 인기 스키마 옵션이 있습니다

    당신은 하나 개의 컬렉션의 모든 유사한 데이터를 넣을 수 있습니다
  • (예 : 모든 계정에 대한 프로파일이 같은 모음으로 이동) 및 각 문서에게 클라이언트 ID를 제공 어떤 데이터가 어떤 계정에 속하는지 식별하는 키. 이렇게하면 컴퓨팅 리소스를 최소화하여 수평 확장을위한 최상의 옵션 (스키마 아키텍처에 따라 다름)이 제공 될 수 있습니다.
  • 또 다른 옵션은 클라이언트 데이터를 콜렉션별로 분리하는 것입니다. 각 클라이언트는 clientid 접두어로 식별 된 데이터베이스 내에서 고유 한 콜렉션을 갖습니다 (예 : clientid_userprofiles).

2) 클라이언트 당 데이터베이스 옵션을 사용하면 더 많은 컴퓨팅 리소스가 필요하므로 더 많은 관리 작업과 비용이 추가로 발생합니다. 반면에 코드 작성이 쉬울수록 코딩 비용은 적어야합니다. 또한 무거운 사용자와 가벼운 사용자간에 리소스를보다 효과적으로 배포 할 수 있습니다. 예를 들어, 사용량이 많은 클라이언트를보다 강력한 시스템으로 이동하고 고객 단위로 샤딩을 제공 할 수 있습니다.

3) 고급 사용자를위한 전용 데이터베이스 (더 많은 비용을 지불하는 계정)와 저가형 클라이언트 및 테스트/프리 미엄 계정을위한 콜렉션으로 구분 된 데이터가 포함 된 공유 데이터베이스를 제공 할 수 있습니다.

많은 데이터베이스 경로를 탐색 할 경우 --smallfiles 시작 옵션을 살펴 봐야합니다. 이렇게하면 많은 사람들이 "테스트 계정"을 설정하지만 그 계정으로 많은 일을하지 않는 상황에 도움이됩니다.

어쨌든, 위의 내용은 생각을위한 음식을 제공합니다. 이 특정 문제에 관해 Mongo 포럼에서 많은 토론이 있었기 때문에 https://groups.google.com/forum/?fromgroups#!searchin/mongodb-user/multitenant에 대한 검색을 수행하십시오.

감사의 의미는 준수해야 할 감사의 수준에 따라 다릅니다. 운 1000 명의 고객이있을 것으로 예상된다면, 고객이 SAS70에 대해 들어 본 적이없는 신생 기업보다 컴플라이언스 요구 사항이 훨씬 높을 것입니다 (비용이 많이 드는 방식으로 10 달러에서 100 달러로 생각할 수 있습니다). 또한 어떤 유형의 데이터를 저장 하느냐에 달려 있습니다 - 사용자 재무 데이터입니까 아니면 사용자 포럼일까요? 근본적으로 미래의 대기업에 대한 보안 감사를 통과해야하는 것에 대한 우려가 있다면 공유 데이터베이스 접근법에 대해 생각조차하지 마십시오.

관련 문제