2010-08-27 5 views
0

Je me donne la tâche d'écrire un script (ou mieux encore, un démon), qui doit faire plusieurs choses:Comment construire un parsing de sources multiples et un démon de consolidation de données?

  1. Crawl données les plus récentes de plusieurs flux XML d'entrée. Il y a, comme, 15-20 feeds pour le moment, mais je crois que le nombre pourrait aller jusqu'à 50 à l'avenir. La taille du flux varie entre 500 Ko et 5 Mo (elle ne dépassera probablement pas 10 Mo). Comme les flux ne sont pas dans un format normalisé, il doit y avoir un analyseur pour chaque flux provenant d'une source donnée, de sorte que les données soient unifiées dans un format commun unique.
  2. Stocke les données dans la base de données, de sorte que chaque unité de données extraite des flux soit toujours disponible.
  3. Étant donné que les données changent au fil du temps (par exemple, les informations sont mises à jour au moins une fois par heure), il est nécessaire de conserver l'archive des données modifiées.

Une autre chose qui est avéré être difficile à gérer dans ce cas (je l'ai déjà piraté ensemble une solution) est que lors de l'étape 2 base de données commence à ralentir à une exploration, en raison du volume de requêtes SQL cela insère des données dans plusieurs tables, ce qui affecte le reste du système qui repose sur la base de données (c'est un serveur dédié avec plusieurs sites hébergés). Et je ne pouvais même pas arriver à l'étape 3 ...

Des conseils sur la façon dont je devrais aborder ce problème? Mises en garde à faire attention? Tout ce qui pourrait m'aider à résoudre ce problème est le bienvenu.

Merci!

Répondre

0

Certaines de mes idées:

  1. Vous pouvez trouver un moyen intelligent d'utiliser des transactions de base de données si votre base de données prend en charge les transactions. J'ai seulement expérimenté avec des transactions de base de données mais ils disent qu'il peut augmenter des vitesses d'insertion jusqu'à 40% (mysql.com) et il ne verrouille pas des tables.

  2. Vous pouvez ajouter des données à un fichier temporaire, même dans un format convivial SQL et charger les données dans votre base de données à la fois. Utiliser LOAD DATA INFILE est généralement 20 fois plus rapide (mysql), j'ai rapidement utilisé plus d'un million d'entrées et c'était assez rapide.

  3. Configurer une sorte de système de queing.

  4. Mettez un sommeil ou attendre sur chaque requête (en python, time.sleep (1) fera le processus d'attendre 1 seconde)

Je ne suis pas sûr de ce que vous utilisez db mais voici quelques conseils pour optimiser les insertions:
http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

+0

Je ne vous suis pas, comment les transactions peuvent-elles m'aider? Ils utilisent toujours l'heure de la base de données, pour ainsi dire, et verrouiller les tables, non? –

+0

@ mr.b J'ai seulement expérimenté avec des transactions de base de données mais ils disent qu'il peut augmenter les vitesses d'insertion jusqu'à 40% (mysql.com) et il ne verrouille pas les tables.Si vous utilisez Microsoft SQL, ou quelque chose d'autre, je ferais une recherche pour "[insert db name] optimiser insertions" – Louis

+0

J'utilise mysql (voir tags) –

Questions connexes