Descrizione della situazione
Sto lavorando a un'applicazione (basata su Spring Framework) utilizzando un indice di ricerca (lucene se ciò è importante) per rendere ricercabile il contenuto di tale applicazione. I documenti vengono aggiunti / aggiornati in quell'indice ogni volta che il contenuto dell'applicazione viene modificato e cancellato ogni volta che viene eliminato il contenuto corrispondente.
Abbiamo riscontrato un bug in cui il trigger per l'aggiornamento di un documento sulle modifiche del contenuto non funzionava in alcuni casi. Pertanto alcuni dei documenti contengono valori non validi (scaduti). Questo problema è stato risolto, quindi le modifiche future verranno scritte correttamente nell'indice.
Tuttavia, voglio correggere i documenti non validi nell'indice e vorrei sapere quale sarebbe la migliore strategia per farlo. Le condizioni importanti sono:
- Il ricalcolo dell'indice completo richiede più ore e l'applicazione viene ridistribuita regolarmente come parte della distribuzione continua. Pertanto, è necessario che l'applicazione venga chiusa tra il processo di aggiornamento.
- La maggior parte dei documenti non è valida.
- Non sono in grado di riconoscere documenti non validi basati solo sull'indice. Ciò richiederebbe molte informazioni da un database.
- I valori non validi dei documenti non sono particolarmente importanti. Il campo più pertinente (il nome) non è stato influenzato dal bug. Pertanto, anche i documenti con valori non validi funzionano correttamente nella maggior parte dei casi d'uso.
- Vorrei una soluzione che funzionasse anche per problemi futuri.
Penso che un caso simile si verifichi se estendiamo l'indice nelle versioni future, ad es. aggiungi un campo. Ciò richiederebbe l'aggiornamento di tutti i documenti per aggiungere il campo, mentre il caso d'uso principale dell'indice funzionerà anche senza quel campo.
Possibile soluzione
La mia idea è di aggiungere un campo versione ai documenti. Quindi aggiungerei un processo che esegue tutti i pochi minuti, recupera un batch di documenti con una versione precedente (o senza alcuna versione per l'esecuzione iniziale), ricalcola i campi richiesti, imposta il campo versione sulla versione corrente e aggiorna il documento in l'indice.
Professionisti di questa soluzione:
- Se l'aggiornamento viene interrotto, l'applicazione riconosce quali documenti sono già stati corretti e quali no.
- Questa informazione è memorizzata all'interno dell'indice, quindi dove appartiene (avevo alcune idee prima di dove avrei archiviato le informazioni nel database).
Con di questa soluzione:
- Dovrà aggiornare ogni documento, anche se non ha valori non validi.
La mia domanda
Questa è una soluzione ragionevole per il problema? Ci sono approcci migliori per fare questo? Non sono riuscito a trovare nulla su come risolvere questo problema e nessuna informazione sul fatto che sia una buona idea aggiungere una versione ai tuoi documenti.
Forse sto anche pensando troppo alla situazione e una soluzione molto più semplice è possibile?