David Capwell created CASSANDRA-18519:
-----------------------------------------
Summary: CEP-15: (C*) Add notion of CommandsForRanges and make
this durable in C*
Key: CASSANDRA-18519
URL: https://issues.apache.org/jira/browse/CASSANDRA-18519
Project: Cassandra
Issue Type: Task
Components: Accord
Reporter: David Capwell
Assignee: David Capwell
To add support for range transactions in C* we need to make sure
1) their state is durable and can be recovered on restart
2) have some way to find all CommandsForKey that are contained in the range
transaction range
3) have some way to find all CommandsForRange that intersect this range
To do this, I propose the following
1) Create a new commands_for_range table that stores: (store, range) ->
list<accord_timestamp_tuple> — this is byId, not sure if repair needs
byExecuteId as well
2) For C*, store a in-memory mapping of Range -> List<TxnId>, and on-boot
repopulate this cache. This then can be used to construct the CommandsForRange
needed by the transaction. This makes an assumption that many ranges will not
exist, at least for the time being.
3) Change commands_for_keys to use LocalPartitioner, and order the table by
(store, key)
4) When C* sees a range transaction, find all keys that are contained by the
range by running the logical query "SELECT key FROM commands_for_keys WHERE key
BETWEEN range.start AND range.end". Implementation has to make sure to handle
many keys (may need to partition the range to increase parallel access, and may
need to page through the table to see all keys (aka multiple ReadCommands)).
Once all keys are found, then must load into the CommandsForKeys cache
For #4, https://github.com/apache/cassandra-accord/pull/27 maybe able to
optimize the logic to lazy load only what is actually needed rather than load
the whole world
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]