Sto costruendo uno script che controlla una vasta rete di siti per collegamenti non validi. L'idea è di contrassegnare i collegamenti che mostrano continuamente come non disponibili in modo che possano essere puliti dal team amministrativo.
Il processo di base è questo:
- Prendi un set di pagine - circa 30K al giorno, non lo stesso 30K ogni giorno - ed estrai tutti i link dalle pagine
- Inserisci URL univoci nella tabella dei collegamenti
- Inserisci i record in LinksInPage contenenti il testo di ancoraggio per ciascun collegamento e il linkID associato per ciascun link
- Verifica lo stato di ciascun collegamento utilizzando i metodi HEAD / GET e inserendo i risultati nella tabella LinkResults
Attualmente sto pianificando di costruire questa struttura di database in un database relazionale.
Tavoli:
-
Link
- LinkID (auto inc)
- URL (varchar)
-
LinksInPage
- LinkID (chiave esterna a Links.LinkID)
- AnchorText (varchar)
- URL della pagina (varchar)
-
LinkResults
- LinkID (chiave esterna a Links.LinkID)
- DateOfCheck (data)
- StatusCode (int)
- NumFailures (int)
La mia domanda:
- Come posso gestire in modo efficiente collegamenti non univoci in questa situazione (sono aperto a cambiare completamente il modo in cui il database è disposto)?
Ad esempio, il primo giorno se controllo example.com
, inserisco un record nella tabella Links. Il secondo giorno, se ho un'altra pagina che collega anche example.com
, non voglio
una voce duplicata nella tabella Collegamenti, ma ho bisogno di un record in LinksInPage che punti allo stesso LinkID. A, supponendo almeno un link per pagina, collegamenti 30K giornalieri, non penso che la ricerca di un LinkID per ciascun inserto sia efficiente.
Memorizzare tutto in memoria sembra anche portare a un problema in futuro con l'aumentare del numero di link.
Devo anche essere in grado di gestire il LinkID quando si inseriscono i risultati del collegamento. Ancora una volta, la ricerca del LinkID su ogni inserto sembra inefficiente.
Il piano è di costruire questo utilizzando Python.