0

我正在阅读Cassandra- The definitive guide by E.Hewitt。我在第四章,作者描述了示例酒店应用程序的代码。本书中的图片在此提供以供参考。 在此处输入图像描述

这是插入HotelByCityrowkeys的方法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对象等的目的是什么?行键到底是如何插入的?

如果你能解释一下代码的每一步发生了什么,那就太好了。这本书没有解释,我无法了解这是如何完成的。

PS:我是一名Java开发人员。所以我熟悉什么地图等。但我只是不明白为什么地图被塞进另一个地图和其他细节

谢谢

4

1 回答 1

1

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

然而,thrift 很难理解,并且与二进制本机协议相比要慢得多。Thrift 也是一个遗留 API,不应该用于新的应用程序开发。新的二进制协议被开发并集成到 Cassandra 的更高版本中。

不只你一个人难以理解。它是机器生成的接口,此时学习可能毫无意义,所以不要费心去看看java驱动程序

于 2014-07-25T15:50:11.863 回答