Понимание кода для вставки семейства столбцов в пространство ключей Кассендры?

Я читаю Cassandra- The definitive guide by E.Hewitt, Я нахожусь в четвертой главе, где автор описывает код для примера приложения Hotel. Изображение из книги приведено здесь для справки.

Вот метод для вставки rowkeys в column Family HotelByCity

    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. так что я знаю, что такое Карты и т. д. Но я просто не понимаю, почему Карта вставлена ​​в другую Карту и другие детали.

Спасибо

1 ответ

Решение

В книге описан интерфейс Thrift к Кассандре. В то время это было здорово, так как позволяло поддерживать многих клиентов путем компиляции thrift API на выбранный вами язык. Таким образом, API-интерфейс одного сервера, написанный на Thrift, позволял N клиентам из коробки.

Тем не менее, thrift болезненно понимать и намного медленнее по сравнению с двоичным протоколом. Thrift также является устаревшим API и не должен использоваться для разработки новых приложений. Новый двоичный протокол был разработан и интегрирован в более поздние версии Cassandra.

Трудно понять это не только вам. Это сгенерированный машиной интерфейс, который, вероятно, бессмысленно изучать в данный момент, так что не беспокойтесь и взгляните вместо этого на драйвер java.

Другие вопросы по тегам