Вставка нулевых значений в кассандру

У меня есть некоторые поля, которые я храню в Cassandra, но некоторые из них могут быть нулевыми в любой момент. Так как их довольно много, это делает код намного более читабельным, если я не проверяю каждый на null перед добавлением в INSERT.

Есть ли в этом какой-либо вред?

РЕДАКТИРОВАТЬ!!

Я нашел билет jira. Но я не могу понять, какое решение было наконец реализовано из билета. https://issues.apache.org/jira/browse/CASSANDRA-7304


person ArchitGarg    schedule 21.11.2016    source источник


Ответы (2)


Прелесть нового механизма хранения Cassandra заключается в возможности НЕ сохранять значения. Это означает то, чем оно должно было быть: значение null — это просто значение, которого не должно быть.

Это обеспечивает большую гибкость, поскольку нулевое значение, не вставленное явно (или неявно, см. ниже), не будет занимать место в хранилище, а также использовать вычислительную мощность и пропускную способность ввода-вывода.

Действительно, заполнить строку нулевыми значениями довольно просто:

INSERT INTO mytable (pk, c2, c3) VALUES (0x1234, null, null);

Таким образом, вы явно указываете C* хранить нулевое значение как в c2, так и в c3. Однако вы можете получить тот же макроскопический эффект с помощью:

INSERT INTO mytable (pk) VALUES (0x1234);

Обратите внимание, что я говорю макроскопический эффект, потому что, когда вы явно вставляете нулевое значение, C* будет вставлять надгробную плиту под капотом. В конечном итоге это вас укусит из-за того, как C * выполняет поиск, уплотнение и т. д., поэтому вам следует избегать, когда это возможно, вторая версия будет работать намного лучше.

Теперь есть и ловушка: вы также можете создавать надгробия неявно. Это произойдет при использовании функций TTL, встроенных в Cassandra.

В заключение, если вы заботитесь о себе, я бы посоветовал НЕ выполнять вставки нулевых значений. Сделайте проверку на уровне приложения, вы сэкономите время (и деньги) позже, например, во время чтения.

person xmas79    schedule 21.11.2016
comment
Есть ли причины явно вставлять нулевые значения? - person andreycha; 06.03.2019
comment
Нет, явное добавление нулевых значений навредит вам. - person xmas79; 07.03.2019
comment
Я это понимаю. Я к тому, что если и есть возможность явно вставлять null в CQL, то она явно оставлена ​​намеренно. Поэтому мне интересно, каковы причины вставки нулевых значений. - person andreycha; 08.03.2019
comment
Как вы могли удалить одно значение? - person xmas79; 08.03.2019
comment
Это уже будет обновление :). Но я понял вашу мысль, спасибо! - person andreycha; 11.03.2019
comment
Приведет ли вставка пустой строки ('') или пустого узла ([]) для обозначения пустоты к отрицательному влиянию на производительность? - person deepSymmetry; 18.08.2020

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

person Ashraful Islam    schedule 21.11.2016
comment
вы можете предложить что-то, что я могу сделать? Я не хочу проверять каждый столбец во время каждой вставки. Также я не хочу создавать запрос динамически в каждом случае, так как это займет много времени. - person ArchitGarg; 21.11.2016
comment
Вы можете написать свой собственный код или изменить код INSERT и UPDATE QueryBuilder, чтобы отключить его, если вставка null - person Ashraful Islam; 21.11.2016
comment
@BdLearner Cassandra 2.2 добавляет возможность различать нулевые и неустановленные параметры в собственном протоколе v4. В предыдущих версиях протокола при использовании подготовленного оператора приходилось привязывать все его параметры, иначе возникала ошибка. При использовании протокола v4+ драйвер теперь будет неявно устанавливать отсутствующие значения в значение unset (если отсутствующие значения не являются частью ключа раздела). Приложения также могут явно предоставлять неустановленные значения, используя cassandra.query.UNSET_VALUE. datastax.com/blog/2015/07/ - person Ashraful Islam; 17.10.2019