【问题标题】:Updating the Schema in Cassandra using hector API使用 hector API 在 Cassandra 中更新 Schema
【发布时间】:2016-06-03 13:19:59
【问题描述】:

我已经创建了如下架构:-

create column family Customer_detail_21
  with column_type = 'Standard'
  and comparator = 'UTF8Type'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and rows_cached = 0.0
  and row_cache_save_period = 0
  and row_cache_keys_to_save = 0
  and keys_cached = 0.0
  and key_cache_save_period = 0
  and read_repair_chance = 0.0
  and gc_grace = 0
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = false
  and row_cache_provider = 'ConcurrentLinkedHashCacheProvider'
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and column_metadata = [
    {column_name : 'name',
    validation_class : UTF8Type,
    index_name : 'index_name_27',
    index_type : 0,
}];

但是当我通过以下 java 代码更新上述架构时:-

public static void updateSchema() {
        System.out.println("Update Schema");
        ColumnFamilyDefinition familyDefinition = new ThriftCfDef(
                getColumnFamilyDefinition("Customer_detail_21"));
        if (familyDefinition != null) {
            if (!isColumnPresent(familyDefinition)) {
                BasicColumnDefinition columnDefinition = new BasicColumnDefinition();
                columnDefinition.setName(StringSerializer.get().toByteBuffer(
                        "pincode"));
                columnDefinition.setValidationClass(ComparatorType.INTEGERTYPE
                        .getClassName());
                columnDefinition.setIndexName("index_pincode_66");
                columnDefinition.setIndexType(ColumnIndexType.KEYS);
                familyDefinition.addColumnDefinition(columnDefinition);
                cluster.updateColumnFamily(familyDefinition, true);
            }
        }
    }

我得到的架构如下:-

create column family Customer_detail_21
  with column_type = 'Standard'
  and comparator = 'UTF8Type'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and rows_cached = 0.0
  and row_cache_save_period = 0
  and row_cache_keys_to_save = 0
  and keys_cached = 0.0
  and key_cache_save_period = 0
  and read_repair_chance = 0.0
  and gc_grace = 0
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = false
  and row_cache_provider = 'ConcurrentLinkedHashCacheProvider'
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and column_metadata = [
    {column_name : '',
    validation_class : UTF8Type,
    index_name : 'index_name_26',
    index_type : 0,
},
    {column_name : 'pincode',
    validation_class : IntegerType,
    index_name : 'index_pincode_65',
    index_type : 0,
}];

根据上面的输出,我之前的列名 = 'name' 现在更新为列名 = 空。

那么为什么更新后旧的列名变空了。

【问题讨论】:

    标签: java hector cassandra-cli


    【解决方案1】:

    由于我们无法覆盖二级索引,因此我们无法通过 hector API 更新现有架构。

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 2014-08-03
      • 2012-06-01
      • 2015-05-06
      • 2015-06-03
      • 1970-01-01
      • 2012-05-31
      • 2013-02-22
      • 2012-12-31
      相关资源
      最近更新 更多