почему Mutation не делает вставки для существующих столбцов

Я загружаю исходные данные (список URL-адресов для сканера) в Cassandra со статусом обхода = 0. Затем, используя Hadoop, я просматриваю все ссылки и пытаюсь изменить значение обхода с 0 на что-то другое, например 1, 2 или 3. Когда я проверяю интерфейс Cassandra cli, получаю ColumnFamily['www.somedomain.com'] значение обходчика столбец остается прежним. Если при первоначальном импорте я не упомянул столбец для обхода, он добавляется правильно. Это только одна часть алгоритма, и мне нужны дальнейшие обновления этого столбца с другими заданиями Map/Reduce и т. д.

В Thrift и Cassandra API сказано, что у нас есть только вставки и удаления. Вставка должна работать как обновление.

Для просканированного столбца у меня есть тип UTF8.

Класс мутации выглядит так:

  private static Mutation getMutationCrawled(Text crawledVal)
  {
      Text column = new Text();
      column.set("crawled");

      Column c = new Column();

      c.setName(ByteBuffer.wrap(Arrays.copyOf(column.getBytes(), column.getLength())));
      c.setValue(ByteBuffer.wrap(crawledVal.getBytes()));
      c.setTimestamp(System.currentTimeMillis());

      Mutation m = new Mutation();
      m.setColumn_or_supercolumn(new ColumnOrSuperColumn());
      m.column_or_supercolumn.setColumn(c);

      return m;
  }

person Anton    schedule 31.07.2011    source источник


Ответы (1)


Cassandra разрешает конфликты, используя отметку времени мутации, причем выигрывает самая большая отметка времени. Вы можете установить значение временной метки на любое желаемое, но соглашение заключается в том, чтобы установить временную метку как значение в микросекундах. В приведенном выше примере вы устанавливаете метку времени с помощью

 c.setTimestamp(System.currentTimeMillis());

Скорее всего, исходный код импорта для заполнения значений устанавливает метку времени в микросекундах. Значения метки времени в микросекундах больше, чем значения метки времени в миллисекундах, поэтому ваши обновления игнорируются.

person sbridges    schedule 31.07.2011