Как создать демон разбора нескольких источников и консолидацию данных?

0

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

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

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

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

Спасибо!

Теги:
data-processing

1 ответ

0
Лучший ответ

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

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

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

  • Настройка какой-либо системы quering.

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

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

  • 0
    Я не слежу за тобой, как транзакции могут помочь мне? Они все еще используют время базы данных, так сказать, и блокируют таблицы, нет?
  • 0
    @ mr.b Я только экспериментировал с транзакциями базы данных, но они говорят, что это может увеличить скорость вставки до 40% (mysql.com) и не блокирует таблицы. Если вы используете Microsoft SQL или что-то еще, я бы сделал поиск "[insert db name] optimize inserts"
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню