사용 사례는 다음과 같습니다. 여러 타사 소스의 데이터를 저장하고 쿼리해야합니다. 내가 가지고있는 유일한 사전 정의 된 스키마 지식은 추가 소스 구성 요소 인 (E, A, V, S)
이있는 Entity-Attribute-Value 튜플로 구성된다는 것입니다. 어떤 속성이 존재하는지 미리 알지 못합니다 (실제 속성 자체를 사용하는 것은 문제가됩니다). 조합 (E,A,V)
은 고유해야하고, 그래서 저는 복합 키가이 모델하는 가장 좋은 방법이 될 것 같은 것을 사용하여 생각, 그래서 우리는이 얻을 :Cassandra 1.2에서 동일한 테이블에 대해 두 개의 개별 복합 키를 모델링하는 방법은 무엇입니까?
CREATE TABLE t1 (
E text,
A text,
V text,
S text,
PRIMARY KEY(E, A, V)
);
이 같은 쿼리를 물어 저를 가능하게 할 것이다
- 주어진 E, 모두가 속성 그들이
- 주어진 E와 발생하는 V 및 소스 S 값 표시, 모든 V.에게
계획을 제공하는 것은 MIRR를 만드는 것입니다 S 주어진
- 주어진 A와 V. 값 : 다른이 테이블의 ORS는 나는 또한 양식의 쿼리에 응답 할 수 있도록 복합 키를 주문 튜플.
등 (사실 미러 테이블은 인덱스의 역할을하며 전체 인덱싱을 얻으려면 효과적으로 동일한 데이터의 6 개 사본이 필요합니다. 아직 그 접근법의 확장성에 대해서는 확실하지 않지만, 그러나 그것은 내가 추측하는 분리 된 질문이다).
그러나 지금까지 내가 고민하고있는 부분은 다음과 같습니다. V
사실 여러 속성을 가진 개체입니다. 이것이 관계형 모델 인 경우 V
은 id
을 type
필드와 value
필드로 매핑하는 관계를 가리키는 외래 키 필드가됩니다. 그러나 외래 키 (및 그와 함께하는 조인)를 없애는 것은 BigTable 방식의 요점이며 내 테이블에 이것을 통합하는 방법을 찾고 있습니다 t1
. 물론
, 나는 이런 식으로 뭔가를 할 수 :
CREATE TABLE t1 (
E text,
A text,
V_id text,
S text,
V_type text,
V_value text,
PRIMARY KEY(E, A, V_id)
);
그러나 내가 보는 문제는이 V
의 ID, 유형과 값 사이의 (inverse-) 함수 관계를 캡처하는 데 실패한다는 것입니다 :와 위의 표는, 내가 예를 들어, 얻을 수 :
E | A | V_id | V_type | V_value
---+----+------+--------+--------
a1 | b1 | 1 | X | foo
a1 | b1 | 2 | X | foo
a1 | b2 | 1 | Y | bar
나는 반대 V_id
, 유형과 가치 제공을 보장 할 수 있도록하려면 고유하고 있지만. 내가 뭘했는지는 이전 Cassandra 버전에서 중첩 된 슈퍼 컬럼이 될 것이라고 생각하지만 CQL3에서 필요한 것을 얻기 위해 노력하고 있습니다.
필자는 컬렉션 유형을 간략하게 살펴 보았지만 사용 사례에 맞지 않는 것 같습니다.
누구나 모델을 만드는 더 좋은 방법을 제안 할 수 있습니다. 이상적으로는 (E, A, V)
을 검색하고 가능한 한 적은 수의 쿼리를 검색 할 수 있기를 원합니다. 또는 나는 단지 그것을 overthinking하고 나는 현재 사실 괜찮습니다 (물론 응용 프로그램 수준에서 고유성을 시도하고 확인할 수 있습니다) 접근 방식입니까?
'd'는 무엇입니까? '(a, b, c_type, c_value)'를 얻고 싶다면'd'가 어디에 들어 맞을까요? 나는 당신이 방금'a','b','c''와'd'가 실제로 무엇인지 말해 주면 대답하기가 훨씬 쉬울 것이라고 생각합니다. 그것이 너무 추상적이어서. – Theo
@ Thehe 나는 그것을보다 구체적으로 만들기 위해 질문을 수정했다. –