Вставка карты в семейство столбцов Cassandra CQL3 с использованием пакета мутаций Astyanax

У меня есть семейство столбцов Cassandra CQL3 со следующей структурой

CREATE TABLE mytable(
  A text,
  B text,
  C text,
  mymap map<text,text>,
  D text,
  PRIMARY KEY (A,B,C)
);

Я пытаюсь вставить в него кучу данных с помощью Astyanax.

Версия Cassandra, с которой я работаю, — 1.2, поэтому я не могу использовать ПАКЕТНУЮ вставку.

Я знаю, что могу запускать команды CQL3 в цикле for, используя подготовленные операторы.

Я хотел знать, можно ли использовать пакет мутаций Astyanax для вставки данных в указанное выше семейство столбцов? Я понимаю, что это будет использовать интерфейс Astyanax Thrift для вставки в семейство столбцов CQL3, но ради производительности записи, является ли это жизнеспособным вариантом?

Я взглянул на структуру семейства столбцов в cassandra-cli, и она выглядит примерно так.

ColumnFamily: mytable
  Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type
  Default column value validator: org.apache.cassandra.db.marshal.BytesType
  Cells sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.ColumnToCollectionType(6974656d73:org.apache.cassandra.db.marshal.MapType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)))

Хотя я могу вставлять данные в другие столбцы (т.е. A, B, C, D), создавая POJO с @Component в различных полях, я не уверен, как работать с вставкой карты, т.е. вставлять в mymap столбец.

Образец POJO, который я создал,

public class TestColumn {

  @Component(ordinal = 0)
  String bComponent;

  @Component(ordinal = 1)
  String cComponent;

  @Component(ordinal = 2)
  String columnName;

  public TestColumn() {
  }
}

Код вставки выглядит следующим образом

AnnotatedCompositeSerializer columnSerializer = new  AnnotatedCompositeSerializer(TestColumn.class);
ColumnFamily columnFamily = new ColumnFamily("mytable", StringSerializer.get(), columnSerializer);

final MutationBatch m = keyspace.prepareMutationBatch();

ColumnListMutation columnListMutation = m.withRow(columnFamily, "AVal");

columnListMutation.putColumn(new TestColumn("BVal", "CVal", null),  ByteBufferUtil.EMPTY_BYTE_BUFFER,
                timeToLive);
columnListMutation.putColumn(new ApiAvColumn("BVal", "CVal", "D"), "DVal",
                timeToLive);
m.execute;

Как именно мне изменить приведенный выше код, чтобы я мог также вставить значение карты?


person user3291408    schedule 11.02.2014    source источник
comment
Не надейтесь на пакетные вставки в Cassandra 2.0. Я попробовал это для аналогичного сценария, и он все еще в 1000 раз медленнее, чем пакет мутаций. stackoverflow.com/questions/21778671/   -  person Rüdiger Klaehn    schedule 15.02.2014


Ответы (1)


Мы решили эту проблему, используя драйвер Java DataStax вместо Astyanax.

person user3291408    schedule 27.11.2014