@Override
    public KeyValueIterator<Bytes, byte[]> backwardFetch(final Bytes key,
                                                         final long from,
                                                         final long to) {
        return fetch(key, from, to, false);
    }
RocksDB store backed by two SegmentedBytesStores which can optimize scan by time as well as window
lookup for a specific key.

Schema for first SegmentedBytesStore (base store) is as below:
    Key schema: | timestamp + [timestamp] + recordkey |
    Value schema: | value |. Value here is determined by caller.

Schema for second SegmentedBytesStore (index store) is as below:
    Key schema: | record + timestamp + [timestamp]|
    Value schema: ||

Note there could be two timestamps if we store both window end time and window start time.

Operations:
    Put: 1. Put to index store. 2. Put to base store.
    Delete: 1. Delete from base store. 2. Delete from index store.
Since we need to update two stores, failure can happen in the middle. We put in index store first
to make sure if a failure happens in second step and the view is inconsistent, we can't get the
value for the key. We delete from base store first to make sure if a failure happens in second step
and the view is inconsistent, we can't get the value for the key.

Note:
    Index store can be optional if we can construct the timestamp in base store instead of looking
    them up from index store.

@see RocksDBTimeOrderedSessionSegmentedBytesStore
@see RocksDBTimeOrderedWindowSegmentedBytesStore
streams/src/main/java/org/apache/kafka/streams/state/internals/AbstractRocksDBTimeOrderedSegmentedBytesStore.java