Sto finendo di lavorare su un complesso motore di regole per le tariffe alberghiere con domande in tempo reale. Ci sono molte condizioni che riguardano le intersezioni dei periodi per opzioni, restrizioni e politiche. Tutti questi sono per data, il che significa che l'ora del giorno è irrilevante.
Varia in modo selvaggio, dal cliente al cliente, se il periodo dura un paio di giorni o diversi anni, quindi non è una soluzione fattibile per denormalizzare ogni giorno nel periodo per ogni cosa nel sistema.
Attualmente, sto usando skip list con 2 voci per "cosa" che ha un punto. Quindi posso intersecare "cose" che iniziano prima della fine del periodo pertinente e che terminano dopo l'inizio del periodo pertinente. Funziona bene, è il miglior compromesso finora, ma finisco per lo più allocando i nodi che non mi servono, e spendo il filtro della CPU da 'nodi' che non hanno un nodo 'to' corrispondente nel set di output.
È implementato in C # (lo stato è in-mem, caricato da eventi-stream)), oggetti per lo più immutabili, classi per cose che vengono passate molto, strutture per collezioni private all'interno delle classi.