에
덕분에 당신은 또한 모든 수준에있는 항목의 예상 수에 데이터 세트를 조회 할 계획입니다.
당신이 드릴 다운되어 필요로하는 것은, 다음 디자인은 일할 수있는 경우 : 당신은 당신도 분할 충분한 사업이있는 경우 확인해야합니다 있도록
CREATE TABLE SubTask
(
ProjectId int,
<Project fields>,
MilestoneId int,
<Milestone fields>,
TaskId int,
<Task fields>,
SubTaskId int,
<SubTask fields>,
PRIMARY KEY (ProjectId, MilestoneId, TaskId, SubTaskId)
);
프로젝트 ID는, 파티션 키가 될 것입니다 클러스터 노드 사이. 복합 파티션 키 (PRIMARY KEY ((ProjectId, MilestoneId), TaskId, SubTaskId)
을 사용할 수도 있지만 프로젝트를 검색 할 수있는 가능성은 제한됩니다.
실제 ID가> 0이고 규칙 필드에 ID 0 인 행을 보관할 수 있습니다. 즉, TaskId = 0 인 행에서만 특정 제품의 중요 시점 필드를 완료하면 데이터 중복을 피할 수 있습니다.
다음과 같이 이정표에 대한 모든 작업 및 하위 작업을 조회 할 수
:
CREATE INDEX ON SubTask(SubTaskId);
: 당신은 작업 필드를하기 만한다면
SELECT <task fields>, <subtask fields>
FROM SubTask
WHERE ProjectId=xxx AND MilestoneId=yyy;
, 당신은 SubTaskId 필드에 인덱스를 필요 다음과 같이 선택하십시오.
SELECT <task fields>
FROM SubTask
WHERE ProjectId=xxx AND MilestoneId=yyy AND SubTaskId=0;
다른 해결책은 sep 모든 엔티티 (Project, Milestone, Task, SubTask)에 대해 arate 테이블을 만들었지 만 작업 및 하위 작업을 검색하려면 두 가지 쿼리가 필요합니다.
또한 작업의 하위 작업 수가 너무 높으면 Cassandra 2.1의 user defined types (현재 베타 버전)을 시험해 볼 수 있습니다.
감사합니다. 현명한 더 나은 성능이 될 것입니다 ... 당신이 제안한 것처럼 각 엔티티 또는 하나의 매우 넓은 테이블에 대한 별도의 테이블 ??? – prankyrules
이 질문에 대한 일반적인 답은 없습니다. 카산드라 데이터 모델링에 대한 올바른 접근 방식은 ** ALL ** 쿼리를 열거하는 것부터 시작하여 이러한 쿼리를 효율적으로 실행할 수 있도록 테이블을 디자인하는 것입니다. Cassandra에서는 일부 데이터 중복 및 비정규 화가 문제가되지 않습니다. – medvekoma