데이터베이스 분할에는 다음이 포함됩니다. 1. 기능별로 나누고(수직 분할) 다양한 기능과 관련된 테이블을 다양한 데이터베이스에 배치합니다. 이 방법의 장점은 매우 직관적이라는 것입니다. 2. 테이블의 필드 값 범위에 따라; Division [Horizontal Segmentation] 특정 테이블에 수반되는 데이터의 양이 점점 늘어나고 감당할 수 없을 정도로 커지면 더 세분화해야 합니다.
데이터베이스를 분할하는 여러 가지 방법:
1. 기능별로 나누기(수직 분할)
서로 다른 기능과 관련된 테이블을 서로 다른 데이터베이스에 배치하는 방법의 장점은 매우 직관적이라는 것입니다. 그러나 기능의 특정 부분에 대한 데이터 양이나 성능 요구 사항이 제어 가능한 범위를 초과하는 경우 이를 더욱 세분화해야 합니다.
2. 테이블 내 특정 필드 값의 범위에 따라 분할(수평 분할)
특정 테이블의 데이터 양이 점점 늘어나고 감당할 수 없을 정도로 커지면 더 분할해야 합니다. 한 가지 옵션은 키 범위를 기준으로 분할하는 것입니다. 예를 들어 A에 ID 1~10000을 배치하고 B에 ID 10000~20000을 배치합니다. 이러한 확장은 예상 가능합니다. 다른 하나는 특정 필드 값에 따라 구분하는 것입니다. 예를 들어 사용자 이름의 첫 글자에 따라 A~D이면 A에 속하고 E~H는 B에 속합니다. 여기에도 불균형이 있습니다. 특정 범위가 단일 지점이 감당할 수 있는 범위를 초과하면 계속 분할되어야 합니다. 날짜별로 세분화된 것도 있습니다.
장점: 단일 테이블 크기 조절 가능, 자연스러운 수평 확장
단점: 중앙 집중식 쓰기 병목 현상을 해결할 수 없습니다.
3. 해시 기반 분할
일반적으로 분할에는 mod를 사용합니다. 먼저 분할된 데이터베이스 수를 결정하고 해시 모듈러스를 사용하여 사용할 데이터베이스를 결정합니다. 이 방법은 데이터를 고르게 분산시킬 수 있지만, 데이터의 양이 증가하여 확장이 필요한 경우 온라인 확장이 불가능합니다. 노드가 추가될 때마다 해시 알고리즘을 다시 계산해야 합니다.
그래서 이 방법에서는 일관된 해시 모드 2^n을 사용하는 것이 좋습니다
Dianping 통합 주문 데이터베이스를 예로 들어 하위 데이터베이스와 하위 테이블의 구성은 32*32, 즉 mod 32입니다. userId의 마지막 4자리를 통해 32개의 라이브러리를 가리키고, 동시에 userId의 마지막 4자리를 div 32 mod 32로 나누어 각 라이브러리를 32개의 테이블로 나누고, 총 1024개의 테이블로 나눕니다. 온라인 배포는 8개의 클러스터(마스터-슬레이브)이며 각 클러스터에는 4개의 라이브러리
4가 있습니다. 라우팅 테이블 기반 분할
이전 방법은 모두 애플리케이션 데이터를 기반으로 작업을 결정하지만 라우팅 테이블 기반 분할은 보다 완화된 방법입니다. 별도의 라우팅 테이블을 유지하고 라우팅 테이블을 검색하여 사용자의 특정 속성을 기반으로 사용할 데이터베이스를 결정하는 방법이 보다 일반적인 솔루션입니다.
장점: ID와 라이브러리의 매핑 알고리즘을 마음대로 변경할 수 있음
단점: 추가 단일 포인트가 도입될 수 있음
위 내용은 데이터베이스를 분할하는 방법에는 여러 가지가 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!