Несколько подготовленных операторов Cassandra для столбцов, допускающих значение NULL

Из-за ограничений инфраструктуры мы не можем обновить версию Cassandra до> 2.2, поэтому мы должны использовать 2.0.7. К сожалению, эта версия не поддерживает использование UNSET. Поскольку данные, которые мы пишем, имеют столбцы, допускающие значение NULL, насколько мне известно, мы можем либо создать собственное понятие null (т.е. пустая строка, пустая структура данных), либо создать несколько PreparedStatements (тот же запрос, но игнорируя поле, которое содержат значение null, поскольку мы не хотим связывать null с подготовленным оператором).

Кассандра теперь бросает 13:13:28.679 [cluster1-worker-5] WARN com.datastax.driver.core.Cluster - Re-preparing already prepared query. Please note that preparing the same query more than once is generally an anti-pattern and will likely affect performance. Consider preparing the statement only once.

Какой лучший обходной путь в этом сценарии? Большинство гидов советуют нам просто использовать UNSET :(.


person techalicious    schedule 22.11.2017    source источник
comment
Это не ошибка, это предупреждение, потому что вы готовите один и тот же запрос несколько раз.   -  person Ashraful Islam    schedule 23.11.2017
comment
Обход в этой статье может помочь thelastpickle.com/blog/2016/09/15/   -  person J KVS    schedule 23.11.2017


Ответы (1)


Создайте ENUM, содержащий значения по умолчанию для каждого столбца.

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

Назначьте значение по умолчанию для свойств, допускающих значение NULL, как часть проверки данных перед запросом в Cassandra.

Если вам нужна дополнительная помощь, добавьте соответствующую схему.

person 4EACH    schedule 23.11.2017
comment
Итак, вы, по сути, предлагаете хранить наше собственное представление null в БД, верно? Разве это не пустая трата места? Похоже, UNSET в Cassandra v2.2 или более поздних версиях устанавливает bytebuffer.allocate(0) (github.com/datastax/java-driver/blob/3.x/driver-core/src/main/), но в версии 2.0 нет общедоступной функции, которая позволяла бы устанавливать ее извне - person techalicious; 24.11.2017
comment
Я предлагаю вам обрабатывать unset в приложении, объявляя значения по умолчанию в вашем приложении. - person 4EACH; 26.11.2017