Понимание кода для вставки семейства столбцов в пространство ключей Кассендры?
Я читаю 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.