2

複合列の概要を提供する次のリンクを読んでいましたが、特にComponentEquality.EQUALとComponentEquality.GREATER_THAN_EQUALの使用法に関してはほとんど疑問がありませんでした。

次の例では:

Composite start = compositeFrom(startArg, Composite.ComponentEquality.EQUAL);
Composite end = compositeFrom(startArg, Composite.ComponentEquality.GREATER_THAN_EQUAL);
start.addComponent(1,"CA",Composite.ComponentEquality.EQUAL);
end.addComponent(1,"CA",Composite.ComponentEquality.GREATER_THAN_EQUAL);

エンドコンポーネントが等式コンポーネントとしてGREATER_THAN_EQUALを必要とする理由を理解できません。例を挙げた説明は本当に役に立ちます

4

1 に答える 1

3

cassandraでスライスクエリが機能する方法は、開始列と終了列を指定することです(limit / isDescendingフラグも指定しますが、ここでは関係ありません)。ユースケースをクエリする1つの方法は、US:CAで始まる最初の複合列とUS:CAで始まる最後の複合列の完全な(複合)列名を渡すことです。ただし、これは事前にはわかりません。

スライスクエリの良いところは、開始列と終了列が実際の列名である必要がないことです。列名は常にソートされるため、スライスクエリの開始列が存在しない場合、cassandraは指定された開始列よりも大きい次の列から開始します。

したがって、クエリの開始列と終了列を作成する必要があります。リンクで説明されているように、複合オブジェクトにはeocビットがあります。このビットはスライスクエリで使用されます。

複合カラムにはいくつかのコンポーネントがあります。各コンポーネントにはeocビットがあります。コンポーネントのこのビットがEqualに設定されている場合、Cassandraは次のコンポーネントの調査に進みます。コンポーネントのこのビットがGREATER_THAN_EQUALに設定されている場合、Cassandraは、それぞれのコンポーネントが探しているコンポーネントと等しくないものが見つかるまで、列を調べ続けます。

そこで、リンクの例を考えてみましょう。3つのコンポーネントを持つ複合コンパレータを持つ列ファミリに対してスライスクエリを実行します。最初のコンポーネントがUSで、2番目のコンポーネントがCAに等しいすべての列を取得する必要があります。

開始列と終了列を作成する必要があります。開始列には2つのコンポーネント(両方ともeocとしてEQUAL)があり、終了列にはEQUALとして最初のコンポーネントがあり、GREATER_THAN_EQUALとして2番目のコンポーネントがあります。これは、最初のコンポーネントがUSで、2番目のコンポーネントがCAであるすべての列に一致します。

このビットをEQUALに設定すると、スライスクエリは、開始コンポーネントが「CA」に等しいことを検出した最初の列に一致します。これは問題ありませんが、Cassandraはスライスクエリの終了列も知っている必要があります。このために、提供されたエンドコンポジットを確認します。

これがお役に立てば幸いです。

編集:説明をより良くするために

于 2012-07-17T14:05:11.033 に答える