3

複数の列を持つ列ファミリーがあります:

create column family user_attr2
with comparator = 'UTF8Type'
and default_validation_class = 'UTF8Type'
and key_validation_class = 'UTF8Type'
and column_metadata = [
 {column_name: attr_value, validation_class: UTF8Type },
 {column_name: last_sync_timestamp, validation_class: LongType},
 {column_name: last_sync_digest, validation_class: UTF8Type }
];

しかし、Astyanaxには次のものしかありません。

public class ColumnFamily<K, C> { ... }

Astyanaxを使用して上記の列ファミリーからデータを読み取る方法は?

thxチャック

4

3 に答える 3

3

Astyanax の入門ガイドには、これを行う例が記載されています。しかし、あなたの質問に基づいて、列のメタデータで指定された複数の列の値の型 (バリデーター) に混乱がありますが、ColumnFamily 契約は、ColumnFamily の値が単一の型であることを暗示しているようです。

舞台裏では、Astyanax はとにかく ByteBuffer との間でシリアライズしようとしています (プリミティブ用のシリアライザーを使用するか、指定したシリアライザーを使用します)...しかし、この ColumnFamily api/contract は、読み取り/書き込みのコンテキストで取得されます (プログラムとは対照的に)列ファミリーの定義)、誤解を招く可能性があります。

まず、Astyanax を初期化する必要があります ( Initialization )。次に、次のようにします (入門ガイドから変更):

ColumnFamily<String, String> CF_USER_ATTR =
  new ColumnFamily<String, String>(
    "user_attr2",              // Column Family Name
    StringSerializer.get(),   // Key Serializer
    StringSerializer.get());  // Column Serializer

OperationResult<ColumnList<String>> result =
  ks.prepareQuery(CF_USER_ATTR)
    .getKey("Key1")
    .execute();
ColumnList<String> columns = result.getResult();

// Lookup columns in response by name 
String attr_value        = columns.getColumnByName("attr_value").getStringValue();
long timestamp   = columns.getColumnByName("last_sync_timestamp").getLongValue();
String digest = columns.getColumnByName("last_sync_digest").getStringValue();

// Or, iterate through the columns
for (Column<String> c : result.getResult()) {
  System.out.println(c.getName());
}

詳細については、Astyanax 入門を参照してください。

于 2013-04-29T18:55:23.403 に答える
1

参考になるかわかりませんが、読み方の例はこのファイルの106行目にあります

https://github.com/deanhiller/playorm/blob/8a4f3405631ad78e6822795633da8c59cb25bb29/input/javasrc/com/alvazan/orm/layer9z/spi/db/cassandra/CursorKeysToRows.java

このファイルの86行目

https://github.com/deanhiller/playorm/blob/8a4f3405631ad78e6822795633da8c59cb25bb29/input/javasrc/com/alvazan/orm/layer9z/spi/db/cassandra/Cas​​sandraSession.java

または、playOrm のテスト ケースを実行することもできますが、FactorySingleton.java の IN_MEMORY を変更し、CASSANDRA に変更して実行およびデバッグし、動作を確認する必要があります。これにより、コピーが可能になります。

playOrm は、パーティション内でクエリ (結合を含む) を実行できるように、noSQL の上で S-SQL (スケーラブル SQL) を実行する ORM です。まもなく、パーティションをクエリするためのアドホック ツールも用意される予定です。

于 2012-09-14T19:57:10.280 に答える
0

ColumnFamily の C は列名のようです。これは、クラスの Java ドキュメントからは明らかではありません。

 * @param <C>

この場合、私は幸運です - 私の列名は文字列です。

于 2012-09-13T18:34:46.033 に答える