1

私はいくつかのPOCに取り組んでいます。

サーバーイベントを格納する列ファミリーがあります。行のサイズが大きくなりすぎないように、行キーで compositeType を使用して、各行を別の N 行に分割しています。

CREATE COLUMN FAMILY logs with comparator='ReversedType(TimeUUIDType)' and key_validation_class='CompositeType(UTF8Type,IntegerType)' and default_validation_class=UTF8Type;

そのため、サーバー名ごとに N 行があり、非常に単純なラウンド ロビン アルゴリズムを使用して各行にデータを書き込みます。

どの行にもデータを書き込むのに問題はありません。

   Mutator<Composite> mutator = HFactory.createMutator(keySpace, CompositeSerializer.get());
    HColumn<UUID,String> col = 
    HFactory.createColumn( TimeUUIDUtils.getUniqueTimeUUIDinMillis(), log);
    Composite rowName = new Composite();
    rowName.addComponent(serverName, StringSerializer.get());
    rowName.addComponent(this.roundRobinDestributor.getRow(), IntegerSerializer.get());
    mutator.insert(rowName, columnFamilyName, col);
}

ここまでは順調ですが、2 つの質問があります。

1) serverName のすべてのログを取得したい場合、行キーをスキャンする必要があるため、使用する必要がありますByteOrderedPartitionerか?

2) サーバー 1 ({server1:0}、{server1:1} {server1:2) などのすべての行を取得する Hector クエリを作成する方法を教えてください。CompositeType をコンパレータとして使用する例はたくさん見ましたが、キー バリデータの例はありません。

ヘルプやコメントは大歓迎です。

4

1 に答える 1

1

まず第一に、cassandra では行のオーバーサイジングが問題になることはありません。それにもかかわらず、この状況ではクラスター全体のデータ分散がより均一になるため、行をこぼす価値があるかもしれません。

  1. ByteOrderedPartitionerクラスター全体で行を均一に分散させるのは難しく、ホットスポットが発生するため、ここでは適切なオプションとは思えません。

  2. を使用する場合、キーの範囲を照会する方法はありませんRandomPartitioner。ただし、最大 N 値がかなり小さい場合 (最大 256)MultigetSliceQueryは、行セット全体を照会するために使用できます。

于 2012-12-08T16:55:55.507 に答える