Come costruire multipla fonte di alimentazione l'analisi e consolidamento dei dati demone?

StackOverflow https://stackoverflow.com/questions/3586966

  •  01-10-2019
  •  | 
  •  

Domanda

mi viene data compito di scrivere uno script (o, meglio ancora, un demone), che ha a che fare diverse cose:

  1. Crawl più recenti dati provenienti da diversi feed XML di input. Ci sono, come, 15-20 mangimi per il momento, ma credo che il numero potrebbe salire a 50 in futuro. Dimensioni materiale varia tra 500 KB e 5 MB (molto probabilmente non andrà oltre il 10 MB). Dal momento che i feed non sono in un formato standardizzato, ci deve essere un feed parser per ogni alimentazione dalla data sorgente, in modo che i dati sono unificati in, formato comune unico.
  2. Memorizzare i dati nel database, in modo tale che ogni singola unità di dati che viene estratto dal feed è ancora disponibile.
  3. Dal momento che le modifiche dei dati nel tempo (ad esempio, le informazioni vengono aggiornate almeno una volta all'ora), è necessario per mantenere archivio dei dati modificati.

Un altra cosa che ha dimostrato di essere difficile da gestire in questo caso (ho già messo insieme qualche soluzione) è che durante la fase 2 del database comincia a rallentare a passo d'uomo, a causa del volume di query SQL che i dati inserto in più tabelle, che colpisce resto del sistema che si basa su database (si tratta di un server dedicato con diversi siti ospitati). E non ho potuto anche arrivare a step 3 ...

Eventuali suggerimenti su come dovrei affrontare questo problema? Avvertenze di prestare attenzione a? Tutto ciò che mi avrebbe aiutato a risolvere questo problema è più che benvenuto.

Grazie!

È stato utile?

Soluzione

Alcune delle mie idee:

  1. È possibile escogitare un modo intelligente di usare le transazioni di database se le transazioni di database supporti. Ho sperimentato solo con le transazioni di database, ma si dice che può aumentare la velocità di inserimento fino al 40% (mysql.com) e non si blocca tabelle.

  2. È possibile aggiungere dati in un file temporaneo, anche in un sql dati di formato e di carico amichevoli nel vostro database in una sola volta. Utilizzando LOAD DATA INFILE di solito è 20 volte più veloce (MySQL), ho usato per inserire rapidamente più di un 1 milione di voci ed è stato piuttosto veloce.

  3. Imposta un qualche tipo di sistema di assorbire tutti.

  4. Mettere un sonno o di attesa per ogni query (in python, time.sleep (1) renderà il processo di attesa 1 secondo)

Non sono esattamente sicuro di cosa si sta utilizzando db ma qui ci sono alcune indicazioni in inserti ottimizzazione:
http://dev.mysql.com/doc/refman/ 5.0 / it / insert-speed.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top