Cassandra 当列序列化程序为String时,如何插入int?

Cassandra 当列序列化程序为String时,如何插入int?,cassandra,astyanax,Cassandra,Astyanax,从Astyanax的页面: ColumnFamily<String, String> CF_USER_INFO = new ColumnFamily<String, String>( "Standard1", // Column Family Name StringSerializer.get(), // Key Serializer StringSerializer.get()); // Column Se

从Astyanax的页面:

ColumnFamily<String, String> CF_USER_INFO =
 new ColumnFamily<String, String>(
     "Standard1",              // Column Family Name
     StringSerializer.get(),   // Key Serializer
     StringSerializer.get());  // Column Serializer
最后一条putColumn语句使用“30”(int值)作为列的值。

由于前面的声明将列值设置为字符串,这是如何实现的?

您可以为每个单独的列设置序列化程序。以下是使用Hector的一种方法(以下代码是JRuby,因此没有太多类型声明):

如果有人需要这个

            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"));

我使用单元测试作为参考,有很多例子。

这是可能的两个原因:

首先,astyanax示例没有为列值(validator)设置验证类

其次,Astyanax为大多数基本类型(以及其他一些类型,如ByteBuffer、UUID等)提供强类型putColumn方法,putColumn实现代表您处理序列化

@覆盖
公共ColumnListColumn(C columnName、int值、整数ttl){
返回putColumn(columnName,value,IntegerSerializer.get(),ttl);
}


关于验证器,您可以在astyanax(和hector)中以编程方式在ColumnDefinition上设置ValidationClass,或者通过CLI设置column_元数据。请参阅:

我对Astyanax示例感兴趣。他们没有设置/覆盖putColumn的序列化程序(“age”,30,null)
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()
            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"));