我是jobrunr(源代码请参见github)的创建者,这是一个面向java的后台作业处理框架,我被要求添加对cassandra的支持。
作业的状态在其生命周期中变化很大(排队、处理、成功、失败等),并且作业的id是uuid。
我的要求是:
查询上次更新作业时作业和订单的状态(asc和desc)
按id查询作业
按id删除作业
我不知道如何在cassandra中解决这个问题(我可能在考虑使用关系型)而不允许过滤。我尝试过的事情:
为创建一个具有分区键的表 id
还有一个索引 state
=>除了在 updatedAt
为创建一个具有分区键的表 id
还有一个索引 state
ORDERBY子句=>不可能。错误消息 ORDER BY with 2ndary indexes is not supported.
取消规范化并添加表 jobs_by_state
打开分区键 creationDate
(yyyymmdd-因为数据是基于时间的,具有更高的基数), state
和聚类键 updatedAt
=>这是可行的,但如何删除作业?错误消息 Non PRIMARY KEY columns found in where clause: id
物化视图?我犹豫不决,因为它仍然有bug(如果我创建了一个,它会无声地更改集群密钥而不会失败)
我能想到的唯一办法就是为每个州列出包含 id
工作顺序正确。在插入和更新时,我执行批处理以保证事务性。但我不认为这是一个好主意,因为有些州可能有数百万的就业机会在该州。
肯定有更好的办法,不是吗?
暂无答案!
目前还没有任何答案,快来回答吧!