我正在阅读Cassandra- The definitive guide by E.Hewitt
。我在第四章中,作者描述了样本酒店应用程序的代码。书中的图像在这里给出以供参考。
以下是在rowkeys
HotelByCity
column Family
的方法
private void insertByCityIndex(String rowKey, String hotelName) throws Exception {
Clock clock = new Clock(System.nanoTime());
Column nameCol = new Column(hotelName.getBytes(UTF8), new byte[0], clock);
ColumnOrSuperColumn nameCosc = new ColumnOrSuperColumn();
nameCosc.column = nameCol;
Mutation nameMut = new Mutation();
nameMut.column_or_supercolumn = nameCosc;
//set up the batch
Map<String, Map<String, List<Mutation>>> mutationMap =
new HashMap<String, Map<String, List<Mutation>>>();
Map<String, List<Mutation>> muts =
new HashMap<String, List<Mutation>>();
List<Mutation> cols = new ArrayList<Mutation>();
cols.add(nameMut);
String columnFamily = "HotelByCity";
muts.put(columnFamily, cols);
//outer map key is a row key
//inner map key is the column family name
mutationMap.put(rowKey, muts);
//create representation of the column
ColumnPath cp = new ColumnPath(columnFamily);
cp.setColumn(hotelName.getBytes(UTF8));
ColumnParent parent = new ColumnParent(columnFamily);
//here, the column name IS the value (there's no value)
Column col = new Column(hotelName.getBytes(UTF8), new byte[0], clock);
client.insert(rowKey.getBytes(), parent, col, CL);
LOG.debug("Inserted HotelByCity index for " + hotelName); } //end inserting ByCity index
我无法遵守代码。特别是为什么创建了这么多容器(地图)。
Mutation
对象等的目的是什么? rowkey究竟是如何插入的?
如果你能解释一下代码的每一步发生了什么,那就太好了。这本书没有解释,我无法了解这是如何完成的。
P.S:我是一名Java开发人员。所以我很熟悉地图等等。但我只是不遵循为什么地图填充在另一个地图和其他细节中
由于
答案 0 :(得分:1)
这本书描述了Cassandra的Thrift接口。它很棒,因为它允许通过将thrift API编译成您选择的语言来支持许多客户端。因此,用Thrift编写的单个服务器API允许N个客户端开箱即用。
然而,与二进制本机协议相比,节俭难以理解并且速度慢得多。 Thrift is also a legacy API并且不应该用于新的应用程序开发。新的二进制协议已经开发并集成到Cassandra的更高版本中。
不仅是你很难理解它。它是机器生成的界面,在这个时刻可能毫无意义,所以请不要打扰并查看java driver。