三叉戟风暴 - 卡桑德拉,写一个有多个主键的表

时间:2014-02-08 17:25:03

标签: java nosql cassandra apache-storm trident

我正在学习如何使用Storm的Trident和Cassandra 2.0.5,Storm版本0.9.0.1。我也在使用com.hmsonline storm-cassandra 0.4.0-rc4 contrib。

我的目标只是将一些文本行插入到具有id(int),name(文本)和句子(text)列的表中。 id和name是主键。

partitionPersist需要StateUpdater,为此我正在使用com.hmsonline.storm.cassandra.trident.CassandraUpdater<K, C, V>。 但从它看起来它只有一个键作为输入而不是两个(我需要id和名称)。 元组映射器(TridentTupleMapper)也使用一个键:

TridentTupleMapper<K, C, V> tupleMapper

也许我错过了一些东西但是如何将多列定义为键?

1 个答案:

答案 0 :(得分:2)

让我指出Brian和我一直致力于利用cassandra风暴的项目:https://github.com/hmsonline/storm-cassandra-cql

您可以查看几个示例,了解如何开发适合您的键/列映射的CqlTupleMapper。代码仍在开发中,但CQL3有一个合适的支持映射实现,可用于持久聚合以及仅存储分区持久性。

根据您的需要,您可能希望定义一个三叉戟拓扑,通过以下方法对传入的数据(句子)进行分组:

inputStream.groupBy(new Field("sentences"))

然后,您将实现一个CqlTupleMapper - 特别是具有自定义CQL插入语句的映射(K键,V值),该语句将键映射到其传递的值。您的查询类似于:

@Override
public Statement map(List<String> keys, String value) {
    Insert statement = QueryBuilder.insertInto(KEYSPACE_NAME, TABLE_NAME);
    statement.value("id", keys.get(0));
    statement.value("name", keys.get(1));
    statement.value("sentence", value);
    return statement;
}

我希望有所帮助。