2

想检查 Cassandra 中的触发器功能。有人可以提供一个创建触发器的例子吗?

从这个博客, http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-0-prototype-triggers-support

要创建触发器,您必须首先使用实现ITrigger接口的类构建一个 jar,并将其放入每个节点上的 triggers 目录中,然后执行 CQL3CREATE TRIGGER请求以将触发器绑定到 Cassandra 表(或多个表)。

根据此信息,Cassandra 中的触发器仅适用于基于 Java 的应用程序?

4

1 回答 1

5

卡桑德拉 3.0

您可以使用它,它会将插入中的所有内容作为 json 获取

public class HelloWorld implements ITrigger
{
    private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);

    public Collection<Mutation> augment(Partition partition)
    {
        String tableName = partition.metadata().cfName;
        logger.info("Table: " + tableName);

        JSONObject obj = new JSONObject();
        obj.put("message_id", partition.metadata().getKeyValidator().getString(partition.partitionKey().getKey()));

        try {
            UnfilteredRowIterator it = partition.unfilteredIterator();
            while (it.hasNext()) {
                Unfiltered un = it.next();
                Clustering clt = (Clustering) un.clustering();  
                Iterator<Cell> cells = partition.getRow(clt).cells().iterator();
                Iterator<ColumnDefinition> columns = partition.getRow(clt).columns().iterator();

                while(columns.hasNext()){
                    ColumnDefinition columnDef = columns.next();
                    Cell cell = cells.next();
                    String data = new String(cell.value().array()); // If cell type is text
                    obj.put(columnDef.toString(), data);
                }
            }
        } catch (Exception e) {

        }
        logger.debug(obj.toString());

        return Collections.emptyList();
    }
}
于 2016-09-20T18:11:25.303 回答