Ho due enormi tabelle su database separati. Uno di questi ha l'informazione di tutti gli SMS che sono passati attraverso i server dell'azienda mentre l'altro ha le informazioni sulla fatturazione effettiva di quegli SMS.
Il mio lavoro consiste nel confrontare campioni di entrambe queste tabelle (ad esempio, i record tra 1 e 2 pm) per vedere se ci sono delle differenze: SMS che sono stati inviati ma non addebitati all'utente per qualunque motivo possa essere accadendo.
Le colonne che utilizzerò per confrontare sono il numero di telefono del destinatario e la data esatta in cui è stato inviato l'SMS. Un problema qui è che le date di solito sono le stesse su entrambi i lati, ma in molti casi differiscono di 1 o 2 secondi.
Ho, finora, due alternative per fare questo:
-
(PL / SQL) Crea due tabelle in cui conserverò temporaneamente tutti i record di quell'esempio di 1 ora. Uno per ciascuno dei tavoli principali. Quindi, per ciascun numero di telefono distinto, selezionare l'ora di ogni SMS inviato da quel telefono da entrambe le mie tabelle temporanee e avviare il confronto uno per uno utilizzando i cursori. In questo caso, la procedura verrebbe eseguita sul server in cui una delle sorgenti è così il contenuto dell'altro verrà cercato usando un dblink.
-
(sqlplus + c ++) Invece di memorizzare i campioni 1 ora in nuove tabelle, invia la query a un file di testo. Avrò due file di testo, uno per ogni fonte. Quindi, apri il primo file e carica tutto il suo contenuto su un hash_map (valore-chiave) usando c ++, dove la chiave sarà il numero di telefono e il valore un elenco di volte di SMS inviati da quel telefono. Infine, apri il secondo file, prendi ogni riga (in questo formato: numberX timeX), cerca la voce di numberX su hash_map (che sarà un elenco di volte) e poi controlla se timeX è in quella lista. Se non lo è, salvalo da qualche parte per archiviarlo infine su una tabella "scaricata" (questo sarebbe anche il passaggio finale del caso 1)
La mia preoccupazione principale è l'efficienza. Questi campioni hanno circa 2 milioni di record su ciascuna fonte, quindi non è possibile afferrare un record da un lato e cercare l'altro dall'altro. Questa è la ragione per cui volevo usare hash_maps
Quale pensi sia un'opzione migliore?