Я пытаюсь создать проект, где несколько услуг C++ будет держать счетчики в базе данных, что-то вроде ниже:Счетчик в Кассандре
CREATE TABLE page_view_counts
(url_name varchar,
counter_value counter,
threshold_value int,
status int,
PRIMARY_KEY (url_name)
);
Я имею в виду использовать Кассандру, но я не уверен, что если Cassandra может поддерживают следующую операцию слитно для поддержки параллелизма нескольких экземпляров службы:
READ counter_value
IF counter_value > threshold_value
SET status = 1 (BLOCKED)
ELSE
SET counter_value++
Я видел Cassandra счетчика (https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html) но мне кажется, что он не может поддерживать операцию READ - это просто гарантирует, что вы можете увеличить счетчик на некоторое значение (не зная предыдущего состояния).
Есть ли какой-либо способ для Кассандры? Должен ли я пойти на другой выбор базы данных, который может поддержать выше? Должен ли я использовать Cassandra и сохранять счетчики в памяти Redis и обновлять Cassandra на втором этапе?
Спасибо за ответ. Существует ли какое-либо обходное решение для чтения старого значения при обновлении счетчика? Или я должен использовать какой-то дополнительный механизм за пределами Кассандры (например, держать такие же счетчики в Redis)? Ваше предложение о разделении таблицы на две имеет силу. – gliatsos