우리는 웹 애플리케이션의 새 버전을 개발 중입니다. 우리는 다수의 클라이언트 (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"매개 변수로 데이터를 필터링 하시겠습니까?
현재 각 클라이언트 사이트에서 온 프레미스 SQL Server를 사용하고 있습니까? 하나의 중앙 데이터베이스로 네트워크 대기 시간을 고려해야합니다. 이 노선을 따라, 그들은 모두 지리적으로 가까이 있습니까? 보안은 당신에게 큰 관심사가 될 것입니다. –
옵션 B에 대한 우려를 완화하기 위해 테이블 –
을 파티셔닝 할 수 있습니다. 현재 모든 데이터베이스가 동일한 서버에 있습니다. 우리가 생각하는 유일한 것은 우리가 모든 클라이언트에 공통적 인 사용자를 필요로한다는 것입니다. 글로벌 플랫폼 개발 –