Кассандра Не ​​удалось сохранить с Кундерой после удаления строки

Недавно, пытаясь работать над Casandra, мы столкнулись со странной проблемой. Наша текущая реализация — Cassandra + Spring MVC + Kundera.

Проблема: Мы пытаемся сохранить объект с помощью метода persist в EntityManager. Но поведение очень непоследовательное, иногда данные не сохраняются в БД. При проверке журналов приложений нет ошибок или исключений, скорее, они успешно сохраняются.

Другая проблема, с которой мы столкнулись, заключается в том, что при попытке отладки некоторого набора тестов мы удалили строку из Casandra. И сделал заявку на перепрошивку. Но после многократного удаления и сохранения строки теперь он не может отображать новые записи.

Сервер Casandra, который у меня есть, представляет собой сервер с одним узлом, работающий на моей машине.

Пожалуйста, предложите.


person Puneet    schedule 28.07.2014    source источник


Ответы (1)


Я столкнулся с подобными вещами, когда переписывал один и тот же столбец, это сводило меня с ума!
Столбец в Cassandra имеет неявную временную метку... просто для примера

public class Column {  

   private final String key;
   private final String value;
   private final Long timeStamp;

    public Column(String key, String value) {
        this(key, value, System.currentTimeMillis());
    }   

    private Column(String key, String value, Long timeStamp) {
        this.key = key;
        this.value = value;
        this.timeStamp = timeStamp;
    }

    //other methods etc.
}

сказал, что, если вы выполните следующие операции:

Column col = new Column("akey", "avalue");
write(cf, col); 
delete(cf, col);
write(cf, col);

Когда вы закончите следующие операции, вы ожидаете найти столбец внутри cf, но его там не будет, так как существует операция удаления с отметкой времени выше, чем отметка времени столбца, которую вы пытаетесь записать< /сильный>. Чтобы заставить его работать, вы должны снова создать столбец...

Column col = new Column("akey", "avalue");
write(cf, col); 
delete(cf, col);
Column col_new_timestamp = new Column("akey", "avalue");
write(cf, col_new_timestamp);

ХТХ, Карло

person Carlo Bertuccini    schedule 28.07.2014
comment
Привет, я уже делаю это, каждый раз создавая новый объект... и удаляя его с помощью прямого запроса cqlsh.. И после этого прошу систему вставить объект.. И это не удается.. - person Puneet; 29.07.2014
comment
Пожалуйста, обновите свой пост, добавив часть кода, например, как вы создаете объект и так далее. Я почти уверен, что это проблема временной метки - person Carlo Bertuccini; 29.07.2014