Я изучаю Кассандру. Я моделирую таблицу cassandra для конкретного варианта использования. Пример использования, описанный ниже -Как обрабатывать состояние гонки с обновлениями cassandra?
Пользователь может написать сообщение. Другие пользователи могут ответить на сообщение. Пользователи также могут «проголосовать» или «проголосовать» за сообщение. Пользователь сортирует сообщения по дате или по голосам или голосам вниз.
Это мое определение таблицы -
CREATE TABLE post.comments_by_post (
postid text,
parentpostid text,
createdon bigint,
username text,
userid text,
displayname text,
upvotes int,
downvotes int,
comment text,
PRIMARY KEY ((postid, parentpostid), createdon)
) WITH CLUSTERING ORDER BY (createdon DESC);
Для увеличения "upvote" У меня есть обновление запроса -
UPDATE post.comments_by_post SET upvotes = incrementedValue where postid=1 and parentpostid = 2 ;
incrementedValue рассчитывается прибавлением 1 в предыдущем значении.
incrementedValue = PreviousValue + 1
Мой вопрос, если я должен вычислить приращение на основе предыдущего значения, которое находится в таблице, то это вызовет состояние гонки и повреждения данных.
Есть ли у нас лучший способ?
Я знаю, что у cassandra есть тип определения столбца счетчика, который может использоваться для таких дополнительных значений, но для этого требуется дополнительная таблица. Столбец столбца нельзя использовать с обычными столбцами, которые не являются частью первичного ключа.
Вставка записи решит все проблемы с условиями гонки. – Gunwant