0

com.netflix.astyanaxを使用して、次のように特定の行のエントリを追加します。

final ColumnListMutation<String> columnList = m.withRow(columnFamily, key);
columnList.putEmptyColumn(columnName);

後で、次のコマンドですべての列を取得します。

  final OperationResult<ColumnList<String>> operationResult = keyspace
          .prepareQuery(columnFamily).getKey(key).execute();
  operationResult.getResult().getColumnNames();

以下は、私が追加したすべての列を正しく返しますが、列はデータベースに入力されたときに従って順序付けられていません。各列にはタイムスタンプが関連付けられているので、これを正確に行う方法があるはずですが、私にはわかりません。ある?

注:ない場合は、上記のコードをいつでも次のように変更できます。

columnList.putColumn(ip,new Date());

次に、列の値を取得し、それに応じて並べ替えますが、各列にはすでにタイムスタンプがあるため、面倒で非効率的でばかげているように見えます。

4

2 に答える 2

0

PlayOrm から、列スライスを実行すると、それらが順番に返されることがわかっています。実際、playorm は、パーティションで S-SQL を有効にすることを使用し、基本的に、要求された方法に応じて順番または逆の順序で返される列のスライスをバッチ処理します。0 から MAXLONG までの列スライスを行うことができます。

ただし、行を取得するかどうかはわかりません。私はそれを試していません。

ああ、PlayOrm は astyanax の上にある単なるマッピング レイヤーですが、パターン ページで示されているように、実際にはリレーショナルではなく、より SQL っぽいものではありません。

http://buffalosw.com/wiki/Patterns-Page/

于 2013-03-08T13:33:50.120 に答える
0

Cassandra は、「挿入順」で列を並べることはありません。

列は常に最も低い順に並べられます。また、cassandra が列名を解釈する方法にも依存します。列ファミリーを定義するときに設定したコンパレータで解釈を定義できます。

あなたが与えたものから、文字列のタイムスタンプ値を使用しているように見えます。単純にタイムスタンプを "123141" や "231" のようにシリアル化した場合は、UTF8Typeコンパレータ "231">"123131" を使用することに注意してください。

より良いアプローチ: Cassandra の時系列データの多くの例が提案しているように、時間ベースの UUID を列名として使用します。UUIDTypeその後、コンパレータを使用できます。

 CREATE COLUMN FAMILY timeseries_data
 WITH comparator = UUIDType
 AND key_validation_class=UTF8Type;
于 2013-08-25T17:03:13.143 に答える