Cassandra触发器是异步的吗?
我正在测试cassandra触发器,并实现了Cassandra触发器是异步的吗?,cassandra,Cassandra,我正在测试cassandra触发器,并实现了ITrigger接口。 如票上所示 似乎cassandra触发器应该是异步的,这意味着在客户端进行插入之后,客户端不应该等待触发器执行 但是我在触发器中添加了一个类似睡眠的15秒,插入操作由于超时而失败。因此,它似乎在等待触发器完成它的工作 有没有办法使触发器异步工作? (根据我阅读的页面,它应该已经是异步的)否,默认情况下,Cassandra等待触发器执行。 但您可以使用带有QueryProcessor的executequery来更改这一点,并运行到
ITrigger
接口。
如票上所示
似乎cassandra触发器应该是异步的,这意味着在客户端进行插入之后,客户端不应该等待触发器执行
但是我在触发器中添加了一个类似睡眠的15秒,插入操作由于超时而失败。因此,它似乎在等待触发器完成它的工作
有没有办法使触发器异步工作?
(根据我阅读的页面,它应该已经是异步的)否,默认情况下,Cassandra等待触发器执行。 但您可以使用带有
QueryProcessor
的executequery来更改这一点,并运行到单独的线程中。请注意,如果执行此操作并且触发器执行失败,则无法从主查询中知道触发器查询失败
Cassandra 2.x的示例:
@Override
public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) {
new Thread(new Runnable() {
@Override
public void run() {
//build your own query from the ByteBuffer key and ColumnFamily update
Insert insert = QueryBuilder.insertInto("test_keyspace.test_table").value("id", 1).value("data", "Test");
//execute query
QueryProcessor.process(insert.toString(), ConsistencyLevel.LOCAL_QUORUM);
}
}).start();
return Collections.EMPTY_LIST;
}
@覆盖
公共集合扩充(ByteBuffer键,ColumnFamily更新){
新线程(newrunnable()){
@凌驾
公开募捐{
//从ByteBuffer键和ColumnFamily更新构建您自己的查询
Insert=QueryBuilder.insertInto(“test_keyspace.test_table”).value(“id”,1).value(“data”,“test”);
//执行查询
QueryProcessor.process(insert.toString(),consistentylevel.LOCAL_QUORUM);
}
}).start();
返回集合。空_列表;
}
非常感谢您,Ashraful,我正在学习cassandra中的触发器,从未见过此查询处理器,您为我节省了很长时间:)如果要同步执行,请删除线程部分