2012-11-28 15 views
6

私はHectorとCassandraのチュートリアルで、DynamicCompositeTypeがあることを知りました。Cassandra CompositeType

誰もが

create column family Composite with comparator ='DynamicCompositeType 
     (t=>TimeUUIDType,s=>UTF8Type)' 
     and default_validation_class=UTF8Type and key_validation_class=UTF8Type; 

create column family Composite 
    with comparator = 'CompositeType(TimeUUIDType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type' 

の違いについて詳しく説明することができます私は、すべての列が同じ型を持つことになり、静的な複合CFでカサンドラのドキュメントに

答えて

6

:関係なく、あなたが使用しているバリデータ/コンパレータの、

  • 全てのデータは、バイトとして格納されます。バリデーターを指定するときは、Cassandraにそのバイトがあなたが望むようにエンコードされているかどうかを確認するだけです。対照的に、コンパレータは、与えたエンコーディングに固有の自然順序付けに基づいて列を並べ替えます。

  • コンポジットは、特定のエンコーディングを持つバイト配列です。このエンコーディングは非常に簡単です。各コンポーネントに対して2バイトの長さが続き、バイトエンコードされたコンポーネントの後ろに、包括的か排他的かを判断する終了ビットが続きます。何かをバイト配列で格納することができるので、異種のコンポーネントタイプを持つことができますが、それらが何であるかを知り、それらを自分でデコード/エンコードする必要があります。

  • ダイナミックコンポジットを実現するために、Hectorは追加の型データをバイト配列に書き込みます。これにより、読み込み時にバイトをデコードする方法を知ることができます。スタティックコンポジットにはタイプ情報がないため、これを行う方法はありません。

0

をそれを見つけていませんでした動的CCFと同様に、すべての列が異なるデータ型を持つことができます。

動的なCFを使用する静的な定義に固執する方がCFの内部に入るデータのタイプについて確信がある場合は、それはどのようにカサンドラの店舗データとどのような実際にされている合成し理解するのに役立つ可能性が