데이터베이스 샤딩 및 파티션


166

최근에 확장 가능한 아키텍처에 대해 읽었습니다. 이와 관련하여 데이터베이스와 관련하여 계속 표시되는 두 단어는 샤딩파티셔닝 입니다. 나는 설명을 찾았지만 여전히 혼란 스러웠다.

stackoverflow의 전문가가 기본을 올바르게 얻는 데 도움이 될 수 있습니까?

  • 샤딩파티셔닝 의 차이점은 무엇입니까 ?
  • 그것은 사실인가 '모든 분산됩니다 데이터베이스가 기본적으로 (서로 다른 노드 이상) 분할되어 있지만, 모든 분할 된 데이터베이스가 반드시 분산됩니다되지 않습니다' ?

digitalocean.com/community/tutorials/… 도움이 될 수 있습니다.
mchawre

답변:


130

파티셔닝은 테이블 또는 데이터베이스간에 데이터를 나누는 일반적인 용어입니다. 샤딩은 특정 유형의 파티셔닝으로, 수평 파티셔닝의 일부입니다.

여기서는 일종의 논리 또는 식별자를 사용하여 데이터를 찾을 인스턴스 또는 서버를 파악하여 (일반적으로) 여러 인스턴스 또는 서버에 스키마를 복제합니다. 이러한 종류의 식별자를 종종 "샤드 키"라고합니다.

열쇠가없는 일반적인 논리는 알파벳을 사용하여 데이터를 나누는 것입니다. AD는 인스턴스 1, EG는 인스턴스 2 등입니다. 고객 데이터는 이에 적합하지만 일부 문자가 다른 문자보다 더 일반적이라는 점을 고려하지 않으면 인스턴스간에 크기가 다소 잘못 표시됩니다.

또 다른 일반적인 기술은 인스턴스 전체에서 고유 키를 보장하는 키 동기화 시스템 또는 논리를 사용하는 것입니다.

잘 알려진 예는 Instagram이 초기에 파티션을 어떻게 해결했는지입니다 (아래 링크 참조). 그들은 Postgres를 사용하여 데이터를 가져 오기와 나누는 매우 적은 수의 서버에서 파티션을 시작했습니다. 나는 그 작은 물리적 샤드에 수천 개의 논리적 샤드라고 생각합니다. Instagram 엔지니어링-Sharding & IDs 에서 2012 년부터 멋진 글을 읽으십시오.

여기도 참조하십시오 : http://www.quora.com/Whats-the-difference-between-sharding-and-partition


16
샤딩은 HP의 한 유형입니다 . HP가 아닙니다.
NoChance

1
수평 분할은 테이블에서 행을 여러 개의 하위 테이블로 분할하는 것을 의미합니다 (동일한 스키마 또는 데이터베이스 인스턴스 내에서 가능). 분할은 수평으로 분할하는 반면 하위 테이블은 단일 데이터베이스 내에서 별도의 스키마로 두는 것입니다 또는 별도의 시스템에서 별도의 데이터베이스 인스턴스로. 아님?
Jonathan Hartley

48

다음은 두 가지 질문 모두에 대한 답변입니다.

수평 분할은 일반적으로 스키마와 데이터베이스 서버의 단일 인스턴스 내에서 하나 이상의 테이블을 행별로 분할합니다. 인덱스를 먼저 검색 할 필요없이 특정 행을 찾을 테이블을 식별 할 수있는 명확하고 강력하며 암시적인 방법이있는 경우 인덱스 크기를 줄임으로써 (따라서 검색 노력) 이점을 제공 할 수 있습니다. 'CustomersEast'및 'CustomersWest'테이블의 예. 우편 번호는 이미 찾을 위치를 나타냅니다.

샤딩 (Shading)은 문제를 뛰어 넘습니다. 문제가있는 테이블을 같은 방식으로 분할하지만 잠재적으로 여러 스키마 인스턴스에서이를 수행합니다. 큰 분할 된 테이블에 대한 검색로드를 이제 동일한 논리 서버의 여러 인덱스뿐만 아니라 여러 서버 (논리적 또는 물리적)로 분할 할 수 있다는 것이 분명한 이점입니다.

출처 : Wiki-Shard .

샤딩은 여러 머신에 데이터 레코드를 저장하는 프로세스이며 데이터 증가 요구를 충족시키기위한 MongoDB의 접근 방식입니다. 데이터의 크기가 증가함에 따라 단일 시스템으로는 데이터를 저장하거나 읽기 및 쓰기 처리량을 수용하기에 충분하지 않을 수 있습니다. 샤딩은 수평 스케일링 문제를 해결합니다. 샤딩을 사용하면 데이터 증가 및 읽기 및 쓰기 작업 요구를 지원하는 머신을 더 추가 할 수 있습니다.

출처 : MongoDB를 .


41

나는 이것에 대해서도 뛰어 들었으며, 그 문제에 대한 언급은 많지 만 수집 한 주요 사실과 공유하고 싶은 점이 거의 없습니다.

파티션은 논리적으로 별개의 데이터베이스 또는 독립된 부분으로 그 구성 요소의 부분이다. 데이터베이스 파티셔닝 은 일반적으로로드 밸런싱과 같이 관리 효율성, 성능 또는 가용성 이유로 수행됩니다.

https://ko.wikipedia.org/wiki/Partition_ (데이터베이스)

샤딩 은 HP ( Horizontal Partitioning) 와 같은 파티션 유형입니다.

또한이 수직 분할 은 작은 별개의 부분으로 테이블을 분할함으로써 (부사장). 정규화에는 테이블에서 열을 분할하는 것도 포함되지만 수직 분할은이 범위를 넘어 이미 정규화되어 있어도 열을 분할합니다.

https://ko.wikipedia.org/wiki/Shard_(database_architecture)

Quora에 대한 Tony Baco의 답변을 정말 좋아합니다. 열과 행이 아닌 스키마 측면에서 생각하게합니다. 그는 ...

" 수평 분할 "또는 샤딩은 스키마를 복제 [복사] 한 다음 샤드 키를 기준으로 데이터를 분할합니다.

" 수직 파티셔닝 "은 스키마를 나누는 것과 관련이 있습니다 (그리고 데이터는 데이터를 옮깁니다).

https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

Oracle Database Partitioning Guide에는 멋진 수치가 있습니다. 나는 기사의 발췌 부분을 복사했습니다.

https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm

테이블을 분할하는시기

다음은 테이블을 분할 할 때 권장되는 사항입니다.

  • 2GB보다 큰 테이블은 항상 파티셔닝 후보로 간주해야합니다.
  • 새 데이터가 최신 파티션에 추가되는 히스토리 데이터가 포함 된 테이블. 일반적인 예는 현재 월의 데이터 만 업데이트 가능하고 다른 11 개월은 읽기 전용 인 기록 테이블입니다.
  • 테이블의 내용을 다른 유형의 저장 장치에 분산시켜야하는 경우

파티션 정리

분할 프 루닝은 분할을 사용하여 성능을 향상시키는 가장 단순하고 가장 중요한 수단입니다. 파티션 정리는 종종 쿼리 성능을 몇 배 정도 향상시킬 수 있습니다. 예를 들어, 응용 프로그램에 주문 내역 레코드가 포함 된 Orders 테이블이 있고이 테이블이 주 단위로 분할되었다고 가정하십시오. 1 주일 동안 주문을 요청하는 쿼리는 Orders 테이블의 단일 파티션에만 액세스합니다. Orders 테이블에 2 년의 기록 데이터가있는 경우이 쿼리는 104 개의 파티션 대신 하나의 파티션에 액세스합니다. 이 쿼리는 파티션 정리 때문에 단순히 100 배 더 빠르게 실행될 수 있습니다.

파티셔닝 전략

  • 범위
  • 해시시
  • 명부

텍스트를 읽고 모든 것을 잘 설명하는 이미지를 시각화 할 수 있습니다.

마지막으로 데이터베이스는 리소스를 매우 많이 사용한다는 것을 이해해야합니다.

  • CPU
  • 디스크
  • I / O
  • 기억

많은 DBA는 동일한 머신에서 파티션을 작성하며, 여기서 파티션은 모든 자원을 공유하지만 데이터 및 / 또는 인덱스를 분할하여 디스크 및 I / O를 향상시킵니다.

다른 전략은 샤드가 CPU, 디스크, I / O 및 메모리의 100 % 자체를 갖는 별도의 별개의 컴퓨팅 장치 (노드)에 상주하는 "비공유"아키텍처를 사용합니다. 고유 한 장점과 복잡성을 제공합니다.

https://ko.wikipedia.org/wiki/Shared_nothing_architecture


"수평 분할"또는 샤딩은 스키마를 복제 한 다음 샤드 키를 기준으로 데이터를 분할합니다. " -이것은 팽팽합니다.
8bitjunkie

그래서 거울이 있고 그것은 조각화되어 어원입니다.
mckenzm

5

1 백만 개의 행과 100 개의 열이있는 데이터베이스의 테이블을 고려하십시오. 파티셔닝 에서 테이블을 다음과 같은 특성을 갖는 2 개 이상의 테이블로 나눌 수 있습니다.

  1. 0.4 백만 행 (table1), 600 만 행 (table2)

  2. 1 백만 행 및 60 열 (table1) 및 1 백만 행 및 40 열 (table2)

    그런 경우가 여러 번있을 수 있습니다

이것은 일반적인 파티셔닝입니다

그러나 Sharding 은 행을 기준으로 데이터를 나누는 첫 번째 사례를 말합니다. 테이블을 여러 테이블로 나누는 경우 여러 테이블이 있으므로 유사한 스키마의 여러 ​​복사본을 유지해야합니다.


1

파티션이 여러 데이터베이스 인스턴스에 걸쳐있을 때 특수한 수평 파티셔닝샤딩 . 데이터베이스가 샤딩 된 경우 데이터베이스가 정의에 따라 파티션되어 있음을 의미합니다.


1

파티셔닝에 대해 이야기 할 때는 복제 또는 복제라는 용어를 사용하지 마십시오. 복제는 다른 개념이며이 페이지의 범위를 벗어납니다. 파티셔닝에 대해 이야기 할 때 더 나은 단어는 나누고 샤딩에 대해 이야기 할 때 더 나은 단어가 배포됩니다. 파티션에서 (일반적으로 그리고 일반적으로 항상 이해하는 것은 아님) 큰 데이터 세트 테이블의 행은 둘 이상의 분리 된 (행을 공유하지 않음) 그룹으로 나뉩니다. 각 그룹을 파티션이라고 부를 수 있습니다. 이러한 그룹 또는 모든 파티션은 RDMB 인스턴스를 한 번 제어 할 수 있으며 이는 모두 논리적입니다. 각 그룹의 기본은 해시 또는 범위 등이 될 수 있습니다. 테이블에 10 년 데이터가있는 경우 각 연도의 데이터를 별도의 파티션에 저장할 수 있으며이를 기준으로 파티션 경계를 설정하여 달성 할 수 있습니다. 널이 아닌 열 CREATE_DATE. db를 쿼리 한 후 01-01-1999와 31-12-2000 사이의 작성 날짜를 지정하면 두 개의 파티션 만 발생하고 순차적입니다. 나는 DB에서 10 억 + 레코드와 비슷한 작업을했으며 SQL 시간은 인덱스 등을 사용하여 30 초에서 50 밀리 초가되었습니다. 샤딩은 각 파티션을 다른 노드 / 컴퓨터에서 호스팅한다는 것입니다. 이제 파티션 / 샤드 내부를 동시에 검색 할 수 있습니다.


0

다른 데이터베이스 인스턴스 * 로 이동할 때의 수평 파티션데이터베이스 샤드가 됩니다.

데이터베이스 인스턴스 는 동일한 머신 또는 다른 머신에있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.