Гектор BatchInserts и BatchSizeHint

В настоящее время я делаю пакетную вставку 2000 столбцов через несколько строк в cassandra. Я делаю это с помощью addinsertion

while( cond... ){
myMutator.addInsertion(keyId, columnfamilyName,compositeColumn);
totalCount++;

    if(totalCount % 2000 == 0){
       myMutator.execute();
    }
}

Есть ли способ получить количество столбцов, добавленных в пакет, без использования переменной totalCount. BatchMutation.getSize() возвращает количество ключей, для которых обновление добавлено в пакет. Мне интересно, какая польза от sizeHint при создании мутатора. Я не могу получить подробную информацию, глядя на исходный код Гектора. Все, что я вижу, это создание внутренней мутацииMap и mutList для количества строк и количества столбцов соответственно.


person Anirudhan J    schedule 05.12.2012    source источник


Ответы (2)


BatchMutation имеет метод getSize(), который будет делать то, что вы хотите:

/**
   * Return the current size of the underlying map
   * @return
   */

public int getSize() {
    return mutationMap.size();
}
person rs_atl    schedule 05.12.2012
comment
Это не дает мне количество столбцов, которые необходимо обновить. Мне нужно сделать mutator.execute(), когда количество столбцов достигнет 2000 - person Anirudhan J; 06.12.2012
comment
В этом случае ваше решение totalSize не страшно. Почему бы просто не использовать его? Это, безусловно, более эффективно, чем любая операция с размером, которая в большинстве случаев будет O (n). - person rs_atl; 06.12.2012
comment
да.. не страшно. Я хотел знать, есть ли у меня другие варианты, когда Гектор сам где-то отслеживает счет. Спасибо. - person Anirudhan J; 07.12.2012

Похоже, Гектор не отслеживает количество столбцов. Поэтому я использую подход totalcount, который использовал ранее.

person Anirudhan J    schedule 07.12.2012