理解在Cassandra密钥空间中插入列族的代码?

时间:2014-07-24 17:24:34

标签: cassandra column-family super-columns

我正在阅读Cassandra- The definitive guide by E.Hewitt。我在第四章中,作者描述了样本酒店应用程序的代码。书中的图像在这里给出以供参考。 enter image description here

以下是在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开发人员。所以我很熟悉地图等等。但我只是不遵循为什么地图填充在另一个地图和其他细节中

由于

1 个答案:

答案 0 :(得分:1)

这本书描述了Cassandra的Thrift接口。它很棒,因为它允许通过将thrift API编译成您选择的语言来支持许多客户端。因此,用Thrift编写的单个服务器API允许N个客户端开箱即用。

然而,与二进制本机协议相比,节俭难以理解并且速度慢得多。 Thrift is also a legacy API并且不应该用于新的应用程序开发。新的二进制协议已经开发并集成到Cassandra的更高版本中。

不仅是你很难理解它。它是机器生成的界面,在这个时刻可能毫无意义,所以请不要打扰并查看java driver