Как создать демон разбора нескольких источников и консолидацию данных? - PullRequest
0 голосов
/ 27 августа 2010

Мне дано задание написать скрипт (или, что еще лучше, демон), который должен делать несколько вещей:

  1. Сканирование самых последних данных из нескольких входных XML-каналов. В настоящее время есть около 15-20 каналов, но я считаю, что в будущем их число может возрасти до 50. Размер канала варьируется от 500 КБ до 5 МБ (скорее всего, он не превысит 10 МБ). Поскольку каналы не имеют стандартного формата, для каждого канала из данного источника должен быть синтаксический анализатор , чтобы данные были объединены в единый общий формат.
  2. Сохранение данных в базе данных таким образом, что каждая единица данных, извлеченная из каналов, все еще доступна.
  3. Поскольку данные меняются со временем (например, информация обновляется не реже одного раза в час), необходимо хранить архив измененных данных.

Еще одна вещь, с которой в этом случае оказалось трудно справиться (я уже взломал вместе какое-то решение), это то, что на шаге 2 база данных начинает замедляться из-за объема SQL запросы, которые вставляют данные в несколько таблиц, что влияет на остальную часть системы, которая опирается на базу данных (это выделенный сервер с несколькими размещенными сайтами). И я даже не смог добраться до шага 3 ...

Любые советы о том, как я должен подходить к этой проблеме? На что обращать внимание? Все, что поможет мне в решении этой проблемы, более чем приветствуется.

Спасибо!

1 Ответ

0 голосов
/ 27 августа 2010

Некоторые из моих идей:

  1. Вы можете разработать умный способ использования транзакций базы данных, если ваша база данных поддерживает транзакции.Я только экспериментировал с транзакциями базы данных, но они говорят, что это может увеличить скорость вставки до 40% (mysql.com) и не блокирует таблицы.

  2. Вы можете добавлять данные ввременный файл, даже в формате, дружественном к SQL, и загружайте данные в базу данных одновременно.Использование LOAD DATA INFILE обычно в 20 раз быстрее (mysql), я привык быстро вставлять более 1 миллиона записей, и это было довольно быстро.

  3. Настройка какой-либо системы очередей.

  4. Положите сон или ожидание для каждого запроса (в python time.sleep (1) заставит процесс ждать 1 секунду)

Я не совсем уверен, какую БД вы используете, но вот несколько советов по оптимизации вставок:
http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...