Я работаю над проектом, который требует, чтобы я взял живой твиттер и сохранил записи из него в базе данных PostgreSQL. Проект требует сохранения данных местоположения твитов для поиска в PostGIS. Я использую скрипт perl для получения фида Twitter (используя AnyEvent :: Twitter :: Stream и API Twitter). Каждые 5000 твитов, скрипт fork() s и дочерний процесс вызывают SQL для вставки строк. Я использую AutoCommit => 0 для ускорения вставок.Вставить в базу данных PostgreSQL/PostGIS слишком медленно
Проблема заключается в том, что дочерний процесс не выполняется, сохраняя 5000 твитов до появления следующих 5000, поэтому я получаю многочисленные процессы postgres. Мне нужно выяснить, как ускорить вставки базы данных, чтобы позволить дочернему процессу выйти до следующего запуска.
задачи, которые дочерний процесс делает сейчас (для каждого твита) являются:
- Вставьте запись в таблице чириканье, используя ST_GeomFromEWKT для преобразования данных широты/долготы для ГИС координаты
- Застраховать что автор твита и любых пользователей, указанных в твиттере в таблице пользователей
- Вставить упоминает пользователей и хэштегов в соответствующих таблицах
Любые консультации по ди ускорение процесса или ускорение процесса было бы наиболее полезным. В конечном итоге это должно работать в реальном времени, поэтому временные таблицы и текстовые файлы не являются хорошими вариантами. Сервер - это сервер с двумя Xeon HP, на котором работает Debian с 8G оперативной памяти.
[Bulk нагрузки] [1], а также рассмотреть вопрос об увеличении его до более чем 5000? [1]: http://stackoverflow.com/questions/758945/whats-the-fastest-way-to-do-a-bulk-insert-into-postgres – runrig
Как вы можете спросить о производительности а затем не дают никаких цифр? Вы получаете 5000 твитов в час, минуту, секунду? На каких дисках вы используете 16 x SSD в RAID10, USB-накопитель? –