当另一个表更新时,Cassandra会触发更新表

时间:2015-09-30 12:56:17

标签: java triggers cassandra cassandra-2.1

我正在经历cassandra中的触发器实现。 我想实现触发器,以便使用已修改的表的旧值更新表。 假设我有一个表在keypace keyspace1中说test_table。 我还有一个表,表示table_track在相同的键空间中,列columnname和columnvalue。 现在当在test_table中更新一行时,我想将track_table与行数据(在执行更新查询之前的test_table中)分别填入列columnname和columnvalue。

我找不到任何关于cassandra触发器的适当文档。 我设法以某种方式实现了InvertedIndex和一些小例子

public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update)
{
    List<Mutation> mutations = new ArrayList<Mutation>(update.getColumnCount());

    for (Cell cell : update)
    {
        // Skip the row marker and other empty values, since they lead to an empty key.
        if (cell.value().remaining() > 0)
        {
            Mutation mutation = new Mutation(properties.getProperty("keyspace"), cell.value());
            mutation.add(properties.getProperty("columnfamily"), cell.name(), key, System.currentTimeMillis());
            mutations.add(mutation);
        }
    }

    return mutations;
}

如何修改扩充方法以实现该功能。 TNX

1 个答案:

答案 0 :(得分:0)

您使用错误的密钥创建Mutation实例
这是工作代码

public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) 
{    
    List<Mutation> mutations = new ArrayList<Mutation>(update.getColumnCount());

    for (Cell cell : update)
    {
        if (cell.value().remaining() > 0)
        {
            Mutation mutation = new Mutation(properties.getProperty("keyspace"), key);
            mutation.add(properties.getProperty("columnfamily"), cell.name(), cell.value(), System.currentTimeMillis());
            mutations.add(mutation);
        }
   }
   return mutations;
}