Cassandra游标用于事件源

时间:2018-07-02 11:36:11

标签: cassandra event-sourcing

给出以下用于存储事件的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作为分区键来实现,但是字节分区器非常慢。有什么方法可以实现此功能?

0 个答案:

没有答案