1

AstyanaxのGetting Startedページから:

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

したがって、キーは文字列で、列の値も文字列です。でもその後:

m.withRow(CF_USER_INFO, "acct1234")
.putColumn("firstname", "john", null)
.putColumn("lastname", "smith", null)
.putColumn("address", "555 Elm St", null)
.putColumn("age", 30, null);

最後の putColumn ステートメントは、列の値として "30" (int 値) を使用します。
前の宣言では列の値が文字列であることを示しているのに、どうしてこれが可能になるのでしょうか?

4

3 に答える 3

1

誰かがこれを必要とするなら

            ksDef = cluster.makeKeyspaceDefinition();

            ksDef.setName(keyspaceName)
                    .setStrategyOptions(keyspaceOptions)
                    .setStrategyClass("SimpleStrategy")
                        .addColumnFamily(
                                cluster.makeColumnFamilyDefinition()
                                        .setName("yourcf")
                                        .setDefaultValidationClass("UTF8Type")
                                        .setKeyValidationClass("UTF8Type")
                                        .addColumnDefinition(
                                        cluster.makeColumnDefinition()
                                                setName("flag")
                                                .setValidationClass("BooleanType"));

参照用にThrifeKeyspaceImplTest.java単体テストを使用しています。多くの例があります。

于 2012-08-14T09:45:22.793 に答える
1

個々の列ごとにシリアライザーを設定できます。Hector を使用してこれを行う 1 つの方法を次に示します (次のコードは JRuby であるため、多くの型宣言はありません)。

cluster = HFactory.getOrCreateCluster("my_cluster","localhost:9160")
keyspace = HFactory.createKeyspace("my_keyspace", cluster)
ss = StringSerializer.new
is = IntegerSerializer.new
mut = HFactory.createMutator(keyspace, ss)
mut.addInsertion("my_key", "my_column_family", HFactory.createColumn("age",50,ssis))
mut.execute()
于 2012-06-22T23:25:24.337 に答える
0

これが可能である 2 つの理由:

まず、astyanax の例では、列値 (バリデーター) の検証クラスを設定していません。

第二に、Astyanax はほとんどのプリミティブ型 (および ByteBuffer、UUID などの他のいくつか) に対して厳密に型指定された putColumn メソッドを提供し、putColumn 実装がユーザーに代わってシリアル化を処理します。

@Override 
public ColumnListMutation<C> putColumn(C columnName, int value, Integer ttl) {
    return putColumn(columnName, value, IntegerSerializer.get(), ttl);
}

/astyanax-cassandra/src/main/java/com/netflix/astyanax/AbstractColumnListMutation.java#L159を参照してください。

バリデータに関しては、astyanax (および hector) でプログラムによって、または CLI を介して column_metadata を設定することにより、ColumnDefinition で ValidationClass を設定できます。参照: http://www.datastax.com/docs/0.8/configuration/storage_configuration#column-metadata

于 2013-04-29T17:03:17.313 に答える