Define segmentation granularity (namely, of time) and store/retrieve under that granularity (that is, taking the smallest containing segments to respond to a query).
Examples;
- assume granularity is
100. Then when [423:746] is requested, the actual retrieval path is store[400:800][23:346]
- assume granularity is a month. Then when
[2018-02-05:2018-07-09] is requested, [2018-02-01:2018-07-31] is retrieved but [2018-02-05:2018-07-09] is still returned.
This setup helps mitigating fragmentation when caching segments.