Shopify는 모든 상점에 대해 하나의 데이터베이스 만 사용한다는 것을 알고 있습니다. 그러나 이러한 빅 데이터로 데이터베이스를 어떻게 처리 할 수 있습니까? 50.000+ 상점에 단일 데이터베이스를 사용하는 것이 좋은 생각입니까?
Shopify는 모든 상점에 대해 하나의 데이터베이스 만 사용한다는 것을 알고 있습니다. 그러나 이러한 빅 데이터로 데이터베이스를 어떻게 처리 할 수 있습니까? 50.000+ 상점에 단일 데이터베이스를 사용하는 것이 좋은 생각입니까?
답변:
참고 : SQL Server 관점에서 대답하고 있으므로 SQL Server와 관련된 몇 가지 개념을 언급하지만 이러한 모든 개념은 다른 주요 RDBMS 플랫폼과 동등한 이점이 있으며 비슷한 이점과 제한 사항이 있습니다.
다른 잠재적 인 장단점을 생각할 때이 답변을 계속 편집 할 것입니다.
글쎄, 그것은 실제로 스키마, 볼륨 등에 달려 있습니다. 상점 저장은 정확히 무엇입니까? 고양이 50,000 마리 또는 제품 50,000 개 또는 윙넛 50,000 개에 대한 데이터를 저장하는 것과 어떻게 다릅니 까?
고객이 데이터를 완전히 분리 할 수있는 경우 (우편 번호 나 응용 프로그램 별 테이블 (단일 중앙 데이터베이스로 이동할 수 있음) :
한 고객이 응용 프로그램을 빨리 성장하는 경우, 당신은 앞서와 같은에 파티션 계획이 아니라면, 밖으로 확장 단지 그들의 데이터를 추출 등 다른 인스턴스, 서버로 이동하는 쉬운 방법이 없다 CustomerID
당신이있어 (50,000 파일 그룹이 제한은 어쨌든 15,000 개의 파티션 , 또는 이전 버전의 SQL Server 인 경우 파일 그룹이 너무 많으면 비참 할 수 있습니다 ( 1,000 ). 또한 파티셔닝에는 Enterprise Edition이 필요합니다.
모든 고객이이 인스턴스에 비해 너무 큰 것으로 판명되면 스케일 아웃이란 새로운 하드웨어를 가져와 전체 데이터베이스를 그곳으로 옮기는 것을 의미합니다.
매우 큰 테이블에서 일부 %의 행을 삭제해야하므로 고객을 삭제하는 것도 똑같이 고통 스러울 수 있습니다.
고객 데이터가 광범위하게 배포 될 수 있습니다 (한 행에 10 억 행을 보유한 고객, 5,000 명을 보유한 다른 고객). 이로 인해 카디널리티 및 계획 품질과 관련된 매개 변수 스니핑 및 유해한 성능이 발생할 수 있습니다 (매우 다른 데이터 세트에 대해 동일한 쿼리에 대해 동일한 계획을 재사용 할 것이므로).
모든 고객에게 동일한 SLA 및 HA / DR 계획이 적용됩니다. n 분 로그 백업으로 전체 데이터베이스를 전체 복구 모드로 설정했거나 단순하고 전체 + 차등 백업에 의존합니다. 고객 오류로 인해 되돌려 야하거나 특정 시점으로 데이터베이스를 복구해야하는 경우 모든 단일 고객에게 영향을 미칩니다.
예를 들어 where 절의 버그는 한 고객이 다른 고객의 데이터를 보거나 다른 고객의 모든 데이터를 보게 할 수 있습니다 .
법적 영향이있을 수 있습니다 (일부 회사는 다른 회사와 같은 데이터베이스, 특히 경쟁 업체의 데이터베이스에 데이터를 배치하지 않아야하는 엄격한 요구 사항이 있습니다).
한 고객의 데이터 보안이 중요한 경우, 테이블 내 분리보다 데이터베이스 분리를 사용하여 훨씬 쉽게 달성 할 수 있습니다.
각 고객을 별도의 데이터베이스 (또는 고객 그룹마다 각각 여러 데이터베이스를 보유)로 갖는 이점은 다음과 같습니다.
DROP DATABASE
.몇 가지 단점 :