Есть ли разница между пустым ключом и ключом, который не существует?

#cassandra #hector

#cassandra #гектор

Вопрос:

При использовании MultigetSliceQuery результаты будут содержать строку для каждого ключа, даже если ключ не существует. Единственным способом тестирования может быть проверка, существуют ли какие-либо столбцы для каждой строки.

Но, если я создам строку с 1 или более столбцами, а затем удалю все столбцы, результат от MultigetSliceQuery будет таким же (как если бы строка никогда не создавалась в первую очередь).

При тестировании этого с помощью командной строки «list CF» покажет пустой ключ строки, но «get CF[key]» вернет «Возвращено 0 результатов.«

Допустима ли строка без каких-либо столбцов?

Должен ли быть способ проверить результаты для пустого vs существует?

Ответ №1:

http://wiki.apache.org/cassandra/FAQ#range_ghosts

Если вы выполняете MultigetSlice и перечисляете ключи, он вернет результат для каждого ключа.

В случае командной строки смотрите

http://wiki.apache.org/cassandra/DistributedDeletes

В пустых строках на самом деле есть надгробия для удаленных столбцов.

Если вы пытаетесь извлечь всю строку целиком, а она возвращает результат без столбцов, это фактически означает, что строка не существует.

Комментарии:

1. Я не думаю, что это имеет какое-либо отношение к надгробиям, поскольку я не удаляю ключи, а только все столбцы. И я тестирую на одном узле с GCGraceSeconds = 0. Но, в конце концов, нет разницы между несуществующей строкой и строкой без столбцов.

2. Надгробия существуют для каждого столбца, поэтому у вас будет надгробие для каждого столбца, который был удален. Кроме того, даже при GCGraceSeconds = 0, перед удалением надгробий должно было произойти уплотнение.

3. Хотя надгробия могут существовать (после удаления), они не влияют на мое сканирование строк (в моем вопросе). Предполагая согласованность, я нахожу, что сканирование строк покажет все ключи, включая те, которые были удалены (либо напрямую, либо путем удаления всех столбцов). Я также обнаружил, что после удаления строк (по ключу), которые на самом деле не существуют, сканирование строк теперь будет отображать эти ключи! (так что никаких надгробий там нет).

4. Чтобы уточнить, существуют надгробия как для каждого столбца, так и для каждой строки. Когда вы удаляете строку (существует она или нет, не имеет значения — Cassandra не проверяет, существует ли она), для этой строки вслепую записывается надгробие, поэтому надгробие будет отображаться при сканировании диапазона.