Равенство Компонентов Гектора


Я читал следующую ссылку , которая дает введение в составные столбцы, и у меня было мало сомнений, особенно в отношении использования ComponentEquality.Равенство и компонентное равенство.GREATER_THAN_EQUAL.

В следующем примере:

Composite start = compositeFrom(startArg, Composite.ComponentEquality.EQUAL);
Composite end = compositeFrom(startArg, Composite.ComponentEquality.GREATER_THAN_EQUAL);
start.addComponent(1,"CA",Composite.ComponentEquality.EQUAL);
end.addComponent(1,"CA",Composite.ComponentEquality.GREATER_THAN_EQUAL);

Я не могу понять, почему конечный компонент нуждается в GREATER_THAN_EQUAL в качестве компонента равенства. Объяснение с примером было бы действительно полезно

1 2

1 ответ:

Способ работы запроса среза в cassandra заключается в том, что вы указываете начальный столбец и конечный столбец(флаг limit/isDescending тоже, но здесь это не имеет значения). Один из способов запроса для вашего варианта использования-передать полное (составное)имя столбца для первого составного столбца, начинающегося с US: CA, и последнего составного столбца, начинающегося с US: CA. Однако вы не знаете этого заранее.

Хорошая вещь в запросах slice заключается в том, что начальный и конечный столбцы не должны быть фактические имена столбцов. Поскольку имена столбцов всегда сортируются, если начальный столбец в запросе среза не существует, cassandra начнет со следующего столбца, большего, чем указанный начальный столбец.

Итак, нам нужно построить начальный столбец и конечный столбец для вашего запроса. Как описано в ссылке, составной объект имеет бит e-o-C. Этот бит используется запросами среза.

Составной столбец состоит из нескольких компонентов. Каждый компонент имеет бит e-o-C. Когда компонент имеет этот бит установив значение равно, Кассандра переходит к следующему компоненту. Когда компонент имеет этот бит, установленный в GREATER_THAN_EQUAL, Кассандра будет продолжать смотреть на столбцы, пока не найдет что-то, соответствующий компонент которого не равен компоненту, который мы ищем.

Итак, теперь рассмотрим пример в ссылке: мы хотим сделать срез запроса на семейство столбцов, которое имеет составной компаратор с тремя компонентами. Мы хотим получить все столбцы, где первый компонент-это мы, а второй-это мы. компонент, равный CA.

Мы должны создать начальный столбец и конечный столбец. Начальный столбец будет иметь два компонента (оба с равными как e-o-c), а конечный столбец будет иметь первый компонент как равный и второй компонент как GREATER_THAN_EQUAL. Это будет соответствовать всем столбцам, первый компонент которых-US, а второй-CA.

Если вы установите этот бит равным, запрос среза будет соответствовать первому столбцу, который он находит с начальным компонентом, равным "CA". Это прекрасно, но ... Кассандре также необходимо знать конечный столбец для запроса среза. Для этого он будет смотреть на конечный композит, который вы предоставили.

Надеюсь, это помогло.

EDIT: чтобы сделать объяснение лучше