When processing conditional mutations tablets reads are done. The way the current implementation does tablet reads has a lot of overhead. For each condition the following is done :
- Opens and reserves iterators files.
- Parse table iterators from table config (involves scanning and filtering entire table config)
- Merges condition iterators and table iterators
- Constructs iterator stack.
I created a branch where these operations (except for constructing iterator stack) are done per tablet and/or per batch of conditional mutations. Doing this I am seeing a 3x speed up in conditional mutation processing rates when data is cached.