2016-12-06 1 views
1

우리는 웹 애플리케이션의 새 버전을 개발 중입니다. 우리는 다수의 클라이언트 (500+)를 보유하고 있으며, 각 클라이언트는 자체 데이터 (사용자, 제품)를 가지고 있습니다. ...복수 대 단일 데이터베이스

새 버전에서는 모든 클라이언트가 일부 데이터를 공유합니다. 플랫폼에 있지만 각 클라이언트는 자신의 사용자에게만 액세스 할 수 있지만 각 클라이언트에 대한 사용자를 가지지 않고 모든 사용자를 중앙 집중식 테이블에두고 싶어합니다.

제품, 주문 등과 같은 다른 것들은 각 클라이언트에 속할 것입니다.

각 클라이언트에는 도메인에 설치된 웹 앱의 사본이 있습니다. 우리의 응용 프로그램은 SQL Server를 사용하는 ASP MVC Entity Framework Code First입니다.

우리의 질문은 :

  • 옵션 A : 사용자 및 기타 일반적인 데이터를 저장하기 위해 자신의 테이블 (제품, 주문 ...)와 하나의 공통 데이터베이스를 포함하는 클라이언트 당 하나의 데이터베이스.

  • 옵션 B : 클라이언트가 데이터를 볼 수 있도록 all이 포함 된 하나의 큰 데이터베이스와 특정 테이블에 ClientId를 추가합니다.

장점과 단점 :

  • 우리는 여러 데이터베이스가 옵션 A와, 우리는 테이블에 100.000 주문을 가질 수 있으며 그 데이터를 검색하기 쉽습니다. 반면에 우리는 데이터베이스 간 쿼리와 2 개의 데이터 컨텍스트를 처리해야합니다. 이것은 우리가 데이터베이스, 클라이언트 특정 및 공통 데이터베이스 모두에 대한 액세스를 의미하는 대부분의 쿼리에 대해 사용자 데이터를 검색하는 데 필요한 지침입니다.

  • 옵션 B를 사용하면 1 개의 문맥 만 처리해야하며 쿼리는 훨씬 간단합니다. 이 접근 방식의 주요 관심사는 클라이언트 당 연간 10,000 개 이상의 레코드가있는 테이블을 가질 수 있다는 것입니다. 따라서 500 명의 고객이있는 10 년 동안 50 백만 개의 레코드가있는 테이블을 만들 수 있었고 성능에 영향을 미칠 수있었습니다.

귀하의 조언에 감사드립니다. 우리는 게임에서 한 가지 더 가지고 있기 때문에

편집이

여기 것은 여러 데이터베이스에 대 한 아부 문제가 아니라, 모든 클라이언트는 공통 데이터베이스에 액세스해야합니다.

편집

2의 우리가 우리의 모든 고객을위한 하나의 데이터베이스에 대한 이동하기로 결정했습니다 가정 해 봅시다. 따라서 우리는 응용 프로그램을 실행하는 여러 개의 도메인을 갖게 될 것입니다. 그러나 각각의 도메인은 자신의 데이터 만 가져와야합니다.

어떻게 할 수 있습니까? ClientId를 각 테이블에 추가하고 각 사이트의 web.config에서 "clientId"매개 변수로 데이터를 필터링 하시겠습니까?

+0

현재 각 클라이언트 사이트에서 온 프레미스 SQL Server를 사용하고 있습니까? 하나의 중앙 데이터베이스로 네트워크 대기 시간을 고려해야합니다. 이 노선을 따라, 그들은 모두 지리적으로 가까이 있습니까? 보안은 당신에게 큰 관심사가 될 것입니다. –

+0

옵션 B에 대한 우려를 완화하기 위해 테이블 ​​ –

+0

을 파티셔닝 할 수 있습니다. 현재 모든 데이터베이스가 동일한 서버에 있습니다. 우리가 생각하는 유일한 것은 우리가 모든 클라이언트에 공통적 인 사용자를 필요로한다는 것입니다. 글로벌 플랫폼 개발 –

답변

0

내 개인적인 취향은 옵션 A에 대한 것이고, 주된 이유는 보안 때문일 것입니다. 기본적으로 한 고객의 데이터를 다른 고객의 데이터로 유출하는 데는 몇 가지 실패 지점 만 있습니다.

일반적인 데이터 위에 서비스를 배치하고 사용자 데이터에 대한 빈번한 요청을 처리하여 해당 부분을 처리 할 수 ​​있습니다.

+0

여기서 가장 중요한 것은 모든 사용자와 다른 일반적인 것을 저장하는 공통 데이터베이스가 필요하며 대부분의 쿼리는 사용자 정보가 필요하기 때문에 해당 데이터베이스를 쿼리해야합니다. 또한 모든 클라이언트가 해당 사용자를 업데이트 할 수 있으므로 모든 사용자가 업데이트를 얻을 수 있습니다. 우리의 주된 문제는 EF Code Firs Context에서이를 관리하는 것입니다. 우리는 2 개의 컨텍스트가 필요하고 쿼리가 복잡하기 때문에 EF의 이점 중 일부가 손실됩니다. –

0

옵션 A는 다른 클라이언트의 요청으로 인해 모든 다른 클라이언트가 자신이 선택한 트랜잭션 레코드에서 성능 문제없이 쿼리 할 수 ​​있도록하는 방식으로 권장됩니다.

또한 옵션 A는 옵션 B를 사용하여 문제가되는 엔티티 기반 사용자 정의 (나중에 필요할 경우)를 허용합니다. 멀티 테넌트 기반 아키텍처가 권장 사항입니다.

아래 리소스는 더 많은 옵션/가능성을 제공합니다.

https://msdn.microsoft.com/en-us/library/aa479086.aspx

+0

같은 데이터베이스에서 여러 데이터베이스를 사용하는 것보다 한 데이터베이스에서 성능 문제가 더 많이 발생할 수 있다고 생각합니까? 섬기는 사람? –

+0

앞으로는 클라이언트마다 사용자 정의를하지 않을 것입니다.이 패키지는 소프트웨어 패키지입니다. 우리의 주된 문제는 공통 데이터베이스에 저장 될 클라이언트에 사용자가 생성 되더라도 모든 클라이언트는 사용자와 같은 공통 데이터를가집니다. –

+0

동일한 물리적 서버에 여러 데이터베이스를 호스트 할 수 있으며 SQL 서버를 다음과 같이 구성 할 수 있습니다. 최적의 성능을위한보다 세밀한 설정.하나의 마스터 데이터베이스는 소프트웨어 기능 요구 사항에 따라 모든 다른 데이터베이스에서 공유 될 사용자를 저장할 수 있으며 공유 및 별도 클라이언트 데이터베이스로 최상의 최적화를 얻습니다. –

관련 문제