2011-11-08 3 views
6

높은 쓰기로드와 사용자 정의/생성 된 트리를 나타내는 수천, 심지어 수백만 개의 계층 적 레코드가 있어야하는 웹 응용 프로그램을 구축하고 있습니다. 스레드가있는 포럼을 만들려고하지 않고 수천 개의 작은 계층 구조 (최대 10-20 자손을 가진 나무)를 가진 거대한 데이터베이스를 만들려고 노력하고 있습니다 ...쓰기로드가 높은 MySQL에 계층 적 데이터 저장

현재 계층 구조를 저장하기위한 여러 모델을 알고 있습니다. 중첩 세트이지만 거대한 데이터 및로드로 인한 성능 문제가 있습니다. 인접 목록 또는 이와 유사한 것이이 문제를 해결할 수 있는지 의심 스럽습니다.

저는 초고속 키/값 저장소 인 Mongo 데이터베이스를 실험 해 왔지만 MySQL 만 사용할 수 있습니다.

비슷한 문제가있는 다른 사람들의 경험에 대해 듣고 싶습니다.

+0

조금 설명해 주시겠습니까? 이 모든 것을 저장하고 계층 구조를 쿼리하고 싶습니까? 당신은 어떻게 당신의 질문을 할 것입니까? –

답변

5

MySQL 플러그인을 설치할 수 있으면 OQGraph 스토리지 엔진이 필요합니다.

+1

+1하지만 플러그인을 설치하는 것은 누구에게나 열려 있습니다. 그것이 내가 바리 헌터에게 수여 한 이유입니다. – Johan

+0

어쨌든 고마워요. OQGraph에 대해 아는 사람들이 많을수록 호스팅 회사의 기본 설치의 일부로 볼 수 있습니다. :) – Mchl

4

중첩 세트의 문제점은 무엇입니까?

노드를 추가/제거 할 때 lft/rgt 값을 다시 계산합니까?

신중한 계획을 세우면 조정할 수 있으므로 희소 한 재 계산 만하면됩니다. 나는 그것을 완전하게 시도하지는 않았지만 한 번 시스템에 대한 계획을 세웠다. (클라이언트는 결국 시스템을 원하지 않았다.)

하나를 먼저 계산할 때 하나의 값에 1000을 곱한다. 그런 다음 노드를 추가하면 값 사이에 숫자를 삽입 할 수 있습니다. 많은 수의 삽입이있는 경우에만 숫자가 부족한 상태가됩니다. 우선 순위가 낮은 일괄 처리로 트리를 다시 계산하여 새로운 삽입을위한 번호를 확보 할 수 있습니다.

숫자를 조작하여 삭제할 수도 있습니다. 실제로 자식이없는 노드는 쉽습니다. 내재 된 재 계산이 없습니다. 아이들이라면 더 복잡해진다.하지만 나는 할 수 있어야한다고 생각한다.

+0

+1 Joe Celko는 훌륭한 글을 가지고 있습니다. 이 어딘가에. 나는 그의 책 "Joe Celko의 smarties를위한 SQL"이 그것에 관한 섹션을 가지고 있다고 믿는다. Google 검색의 가치가 있습니다. –