2010-03-14 10 views
2

숫자 쌍 (A, B)을 보유하고 있으며 각 테이블의 범위는 0에서 10,000까지이며 수레로 저장되어 있습니다.PostgreSQL : 테이블 자동 파티션

예를 들어,이 쌍은 매우 큰 성장 저장하는 PostgreSQL의 테이블 이후

(1, 9984.4), (2143.44, 124.243), (0.55, 0), ... 

, 나는 partition it into inheriting sub-tables로 결정했다. 나는 각각 1000x1000의 범위를 저장하는 100 개의 테이블을 생성하려고합니다.

문제는이 수치가 가까운 숫자의 큰 덩어리로 나타나는 경향이 있다는 것입니다. 미래에 일부 테이블은 거의 비어있을 것이고 어떤 테이블은 데이터베이스의 매우 큰 부분을 차지할 것입니다. 불행히도 미래 쌍의 분포는 아직 알려지지 않았습니다.

테이블을 자동으로 다시 분할 할 방법을 찾고 있습니다. 즉, 특정 서브 테이블이 특정 수의 쌍 이상을 보유하면 자동으로 4 개의 서브 - 서브 테이블로 분할되는 식으로 진행됩니다.

내 질문은 :

  • 재귀 분할 및 상속 PostgreSQL의 8.3에서 수 있습니까? 인덱스 및 쿼리 계획에서이를 이해합니까?
  • 서브 테이블을 너무 크게 커지면 분할하는 가장 좋은 방법은 무엇입니까? 나는 이것이 라이브 데이터베이스가 아니라는 것을 지적해야한다. 그래서 매주 몇 시간 정도의 다운 타임이 허용된다.
  • 업데이트 : 상속 테이블을 원본 테이블을 대체 할 4 개의 테이블 (즉, 마스터 테이블에서 직접 상속받는 테이블)로 분할 할 수 있습니다. 한 수준 이상의 상속을 피할 것이지만 한 테이블에서 직접 상속하는 테이블의 경우 수천 가지가 있습니다. 이 접근 방식의 장단점은 무엇입니까? 테이블이 이미 큰 경우 사전에

감사합니다,

아담 모든

+0

"대형"이란 무엇이며 해결하려는 문제는 무엇입니까? 파티셔닝은 훌륭하지만 SELECT 문에 대한 의미가있는 경우에만 가능합니다. 전체 테이블의 모든 데이터를 삭제해도 편리하지만 매일하는 일은 아닙니다. –

+0

a. 수억의 기록; 비. 그것은 실제로 SELECT 질의를위한 것이며, 앞으로 여러 대의 컴퓨터 사이에서 데이터베이스를 쉽게 분리 할 수 ​​있습니다. –

답변

2

첫째, 당신은 분포는 미래 예측에 대한 신뢰성이 확인되지입니까? 오늘 이루어진 히스토그램은 쓸모 없습니까?

재귀 상속이 가능할지라도 유지 관리 및 계획자 모두에 대해 모델에 불필요한 복잡성을 추가한다고 생각합니다.

100 개의 테이블로 파티션하면 파티션을 생성하고 자동으로 규칙/트리거를 삽입합니다.

가장 간단한 방법은 한 파티션의 데이터를 임시 테이블로 복사하고 삭제 한 다음 4 개의 파티션을 만들고 복사하는 것입니다. 나는이 연산이 재귀 적 분할보다 어렵다고 생각하지 않는다.

여러분은 PostgreSQL 메일 링리스트에서 여러분에게 물어볼 수도 있습니다. 그들은 원래 개발자를 포함하여 얻을 수있는 최고의 전문가입니다.

+0

+1 및 PostgreSQL 메일 링리스트에 대한 조언 –

관련 문제