Cassandra 3.11.0 Реализация простого триггера

Это для всех ниндзя Кассандры здесь. Заранее спасибо за вашу помощь!

Я пытаюсь сделать что-то тривиальное, дайте мне знать, возможно ли это вообще

Цель

Для каждой сделки, которую совершает пользователь, я хотел бы обновить другую таблицу/cf positions, чтобы отразить новую сделку, и сохранить эти действия атомарными и синхронизированными.

i.e.

каждый раз, когда выполняется запрос INSERT

INSERT INTO mykeyspace.trades (stockID, quantity) VALUES ("AAPL", 100)

Я хочу, чтобы соответствующая таблица позиций увеличилась на количество += 100.

(по сути, запрашивая текущее значение позиции AAPL и добавляя к нему 100)

Что я исследовал до сих пор

Если бы это была традиционная СУБД, это был бы стандартный вариант использования триггеров.

Поэтому я был рад видеть, что Cassandra предоставляет интерфейс ITrigger.

Однако вся документация о том, как реализовать ITrigger, похоже, использует более старый API, где контракт интерфейса

Collection<Mutation> augment(ByteBuffer key, ColumnFamily update);

Однако в 3.11.0 я вижу, что контракт

Collection<Mutation> augment(Partition update);

На официальном веб-сайте DataStax я вижу пример реализации AuditTrigger ЗДЕСЬ

Однако обратите внимание на строку

TableMetadata metadata = Schema.instance.getTableMetadata(auditKeyspace, auditTable);

TableMetadata не является классом по крайней мере на cassandra-all-3.11.0

Любые указатели или документы будут очень признательны здесь! Заранее спасибо!


person echen    schedule 01.07.2017    source источник
comment
Почему бы вам не использовать пакетный? В Cassandra пакет используется для достижения атомарности.   -  person Ashraful Islam    schedule 02.07.2017
comment
Есть ли понятие блокировки строк? Скажем, транзакции передаются из нескольких экземпляров через службу очередей ... мы хотим, чтобы каждая транзакция увеличивала или уменьшала таблицу «баланс». Не похоже, что пакетная обработка гарантирует отсутствие условий гонки?   -  person echen    schedule 02.07.2017
comment
Нет блокировки строк. Проверьте этот stackoverflow.com/a/43978441/2320144. Пакет не будет обеспечивать состояние гонки при увеличении или уменьшении таблицы «баланс». Также триггер вам не поможет. Вы можете использовать счетчик для сбалансированной таблицы.   -  person Ashraful Islam    schedule 02.07.2017
comment
Также вы можете использовать Легкие транзакции. Но это очень дорого.   -  person Ashraful Islam    schedule 02.07.2017
comment
Понятно, спасибо, что уделили время   -  person echen    schedule 02.07.2017
comment
Cassandra не позволяет смешивать обновления счетчика и не счетчика в пакете, поэтому пакет здесь не может быть полезен (если только счетчик не обновляется с использованием оптимистической блокировки, что было бы медленным).   -  person Apoorv    schedule 19.09.2017