앱 아키텍처, 사용법 및 쿼리 패턴, 클라이언트 간의 분포 (즉, 클라이언트마다 사용 수준이 대략 동일하거나 사용하는 클라이언트가 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 달러로 생각할 수 있습니다). 또한 어떤 유형의 데이터를 저장 하느냐에 달려 있습니다 - 사용자 재무 데이터입니까 아니면 사용자 포럼일까요? 근본적으로 미래의 대기업에 대한 보안 감사를 통과해야하는 것에 대한 우려가 있다면 공유 데이터베이스 접근법에 대해 생각조차하지 마십시오.