cassandra 簡述
Apache Cassandra 是一種分佈式非關係型數據庫,具有高性能、可擴展、無中心化等特徵。
一種column-based數據庫。
Cassandra所支持的基本數據模型。這些基本數據模型有:Column,Super Column,Column Family以及Keyspace。
依賴
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-extras</artifactId>
<version>3.4.0</version>
<optional>true</optional>
</dependency>
Java 查詢
使用java 的客戶端查詢 cassandra 時,返回值結構解析比較麻煩,故此封裝了一個工具。
- 根據返回值信息中的列的信息,生成列與類型的關係。
queryColumns()
- 根據傳入的Java Bean 返回 數據集。
/**
* 獲取結果集
* @param session session
* @param bindStatement 查詢的語句
* @param clazz 返回類型
* @return list
*/
public static <T> List<T> covertResult(Session session, BoundStatement bindStatement,
Class<T> clazz) {
List<JSONObject> result = new ArrayList<>();
ResultSet execute = session.execute(bindStatement);
Map<String, String> columns = queryColumns(execute);
log.info("查詢結果的列信息--->{}", columns);
for (Row row : execute) {
JSONObject json = new JSONObject();
columns.forEach((k, v) -> {
log.info("------------>{}", k);
if (columns.get(k).contains("timestamp")) {
if (row.getObject(k) != null) {
json.put(k, ((Date) row.getObject(k)).getTime());
}
} else {
json.put(k, row.getObject(k));
}
});
log.info("---------------->{}", json.toJSONString());
result.add(json);
}
return result.stream().map(m -> JSON.toJavaObject(m, clazz)).collect(Collectors.toList());
}
/**
* 查詢數據表字段名(key:字段名,value:字段類型名)
* @param rs ResultSet
* @return map
*/
public static Map<String, String> queryColumns(ResultSet rs) {
try {
ColumnDefinitions rscd = rs.getColumnDefinitions();
int count = rscd.size();
HashMap<String, String> reflect = Maps.newHashMap();
for (int i = 0; i < count; i++) {
String column = rscd.getName(i);
String type = rscd.getType(i).getName().name().toLowerCase();
reflect.put(column, type);
}
return reflect;
} catch (Exception e) {
log.error("獲取 column 信息失敗");
}
return Maps.newHashMap();
}
總結
如果感覺文章有幫助,請關注下吆。有問題可以留言。