给出以下用于存储事件的Cassandra方案
CREATE TABLE IF NOT EXISTS es.events(
${CassandraNames.AGGREGATE_TYPE} text,
${CassandraNames.AGGREGATE_ID} timeuuid,
${CassandraNames.AGGREGATE_VERSION} int,
${CassandraNames.EVENT_TYPE} text,
${CassandraNames.PAYLOAD} text,
${CassandraNames.CREATED_AT} timestamp,
${CassandraNames.TRANSACTION_ID} text,
${CassandraNames.PARTITION_NUMBER} int,
PRIMARY KEY (${CassandraNames.AGGREGATE_ID}, ${CassandraNames.AGGREGATE_VERSION})
) WITH CLUSTERING ORDER BY (${CassandraNames.AGGREGATE_VERSION} DESC);
指数:
CREATE INDEX ${CassandraNames.AGGREGATE_TYPE} ON es.events(${CassandraNames.AGGREGATE_TYPE});
CREATE INDEX ${CassandraNames.EVENT_TYPE} ON es.events(${CassandraNames.EVENT_TYPE});
如何容纳游标查询?我希望能够查询在特定日期之后创建的事件,以及特定事件类型和聚合类型的事件。最后两个条件非常容易,因为它们相等且唯一值的数量非常有限,但按时间查询完全不同。
执行事件重播是必需的(我们必须选择尚未处理的事件)。
通常可以通过使用timeuuid作为分区键来实现,但是字节分区器非常慢。有什么方法可以实现此功能?