Cassandra 当列序列化程序为String时,如何插入int?
从Astyanax的页面: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
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"));