2008-11-16 4 views
1

질문에 모두 나와 있습니다.다른 행렬로 데이터 행을 이동하는 가장 좋은 방법은 무엇입니까?

예 : 데이터베이스 테이블을 분할 할 계획입니다. 이 테이블에는 "활성", "완료"및 "삭제됨"으로 표시된 고객 주문이 들어 있습니다. 나는 또한 각 깃발 하나씩 세 개의 조각을 가지고 있습니다.

필자는 플래그가 변경되면 행이 오른쪽 샤드로 이동되어야 함을 이해합니다.

맞습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 트리거를 사용할 수 있습니까?

나는 행을 즉각적으로 움직이지 않을 것이라고 생각했지만 하루/주/월말에 만 생각했다.하지만 결정되지 않았다. 특정 플래그가있는 샤드가 상주하고 검색이 항상 수행되어야한다. 모든 파편들에.

편집 : 일부 설명 : 일반적으로

내가있는 행이있는 샤딩, 결정하기 위해 criterum에 선택해야합니다. 이 경우이 유형의 데이터를 분류하는 것이 가장 자연스러운 방법이기 때문에 위에서 설명한 플래그로 사용하고 싶습니다. (내 의견으로는) 매우 자주 사용되는 제한된 수의 주문이 있습니다. 드물게 액세스되는 거의 완료된 주문이 있으며 거의 ​​액세스 할 수없는 매우 많은 수의 데이터 행이 있습니다.

지금 특정 데이터 행이있는 위치로 이동하려면 모든 샤드를 검색하지 않아도됩니다. 사용자가 활성 주문을로드하려면 이미보아야하는 데이터베이스가 있는지 확인합니다.

이제 내 샤딩 기준 인 플래그가 변경되어이 사례를 처리하는 가장 좋은 방법을 알고 싶습니다. 필자의 원본 데이터베이스에 레코드를 보관하면 결국 모든 데이터가 단일 테이블에 누적됩니다.

+0

내가이 문제를 올바르게 이해하고 있다면 ... 즉시 해체 한 경우에만 테이블 샤딩 혜택을받을 수 있습니까? – BuddyJoe

+0

답변 할 문자가 충분하지 않습니다. :) 원래 질문에 설명을 추가했습니다. –

답변

1

샤딩 (Sharding)은 일반적으로 서로 다른 서버의 서로 다른 데이터베이스에서 분리하는 것을 의미합니다. 오라클은 파티션 테이블이라는 기능을 사용하여 원하는대로 할 수 있습니다.

트리거 (after/before_update/insert)를 사용하는 경우 즉각적인 이동이 가능하며 다른 방법을 사용하면 정리 될 때까지 첫 번째 샤드 (활성)에 다른 유형의 데이터가 생성됩니다.

나는이 작업을 날짜별로 수행하는 것이 좋습니다 (예 : 매월 작업으로 인해 비활성 상태이고 한 달 이상 다른 "아카이브"데이터베이스로 이동).

성능 향상을 위해이 작업을 다시 수행해 주실 것을 부탁드립니다.이 표에 테라 바이트 단위의 데이터가없는 한. 왜 당신이 파편을하고 싶은지 우리에게 말해주십시오. 우리는 모두 당신의 문제를 해결할 방법을 생각할 것입니다.

+0

샤딩에 대해 배우기 위해이 작업을 수행합니다. 실제 적용을위한 것이 아닙니다. 그러나 나는 궁금하다. 왜 아무도 대답하지 않는다. 나는 이것이 일반적인 문제 일거라 생각했다 ... –

+0

아마도 우리가 생각할 수있는 것처럼 널리 사용되지는 않는다. :) –

1

내 생각에 단일 샤드의 모든 활성 레코드를 유지하는 것은 좋은 생각이 아닙니다. 그러한 샤딩 전략에서 모든 IO는 단일 데이터베이스 인스턴스에서 수행되며 다른 모든 인스턴스는 활용도가 높습니다.

대체 샤딩 전략은 일종의 해시 함수를 사용하여 샤드간에 새로 생성 된 행을 배포하는 것일 수 있습니다. 이

  • 모든 샤드 인스턴스에서 IO를 배포 행의

    • 둘러보기 위로 수 있습니다.
    • 데이터를 한 샤드에서 다른 샤드로 이동할 필요가 없습니다 (샤드의 수를 늘리려는 경우는 제외).
  • 관련 문제