问题陈述: -
我正在尝试将数据插入到Cassandra数据库中。我正在使用Netflix/Astyanax client
。
以下是使用upsert
将Cassandra database
数据转换为Astyanax client
的代码。
在我的下面的方法中,它接受两个参数。一个是userId
我将用作RowKey
和attributes
地图,其中包含column name
作为关键字,而column value
作为值Astyanax client
地图。
现在我如何使用接受这两个参数的以下方法将upsert data
attributes
用于Cassandra数据库?
我主要关注upsert
地图。我该如何将该地图用于/**
* Performs an upsert of the specified attributes for the specified id.
*/
public void upsertAttributes(final String userId, final Map<String, String> attributes) {
MutationBatch m = CassandraAstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();
m.withRow(CassandraAstyanaxConnection.getInstance().getEmp_cf(), userId)
.putColumn(attributeName from attributesMap, attributeValue from attributesMap, null)
;
try {
m.execute();
} catch (ConnectionException e) {
StringBuilder message = new StringBuilder();
message.append("Failed to read from C* = '").append(e).append("'. ");
LOG.error("Failed to write data to C*", e);
throw new RuntimeException("failed to write data to C*", e);
}
}
数据到Cassandra数据库?
{{1}}
答案 0 :(得分:2)
你几乎已经给出了解决方案,但我认为你不清楚
MutationBatch m = CassandraAstyanaxConnection.getInstance().getKeyspace().prepareMutationBatch();
ColumnListMutation<String> clm = m.withRow(CassandraAstyanaxConnection.getInstance().getEmp_cf(), userId);
for(String key: attributeMap.keySet()){
clm.putColumn(key, attributeMap.get(key), null);
}
try {
m.execute();
} catch (ConnectionException e) {
e.printStackTrace();
}
基本上 putColumn 具有不同的重载变体,因此它将支持cassandra支持的所有数据类型。