1st - Put all the actual data in a sorted / linked list. Keep this updated as you always have
2nd - As a separate thread, Keep an ordered set of lists, each list matching a time in the past, present, future, with increasing increments as you move from the present. Each of those lists can be all the items available at that time. The past is for reporting on old events, etc.
-365 days
-180 days
-90 days
-45 days
-30 days
-29 days...
-1 day
-23 hours... -1 hour
NOW
+1 hour... +23 hours
+1 day... +30 days
+45, 90, 180, 365 days
In each of those lists, have pointers to all the relevant records in the main list.
If there's a pointer error, scan the whole list, the slow but reliable way.
1st - Put all the actual data in a sorted / linked list. Keep this updated as you always have
2nd - As a separate thread, Keep an ordered set of lists, each list matching a time in the past, present, future, with increasing increments as you move from the present. Each of those lists can be all the items available at that time. The past is for reporting on old events, etc.
In each of those lists, have pointers to all the relevant records in the main list.If there's a pointer error, scan the whole list, the slow but reliable way.