Оптимизация скорости записи в HDF5 с помощью Pytables

Проблема связана со скоростью записи компьютера (10 * 32-битная машина) и производительностью запросов postgresql. Я подробно объясню сценарий.

У меня есть данные около 80 Гб (вместе с соответствующими индексами базы данных). Я пытаюсь прочитать его из базы данных Postgresql и записать в HDF5 с помощью Pytables. У меня есть 1 таблица и 5 массивов переменных в одном файле hdf5. Реализация Hdf5 не является многопоточной и не включена для симметричной многопроцессорной обработки. Я арендовал около 10 компьютеров. в течение дня и пытаюсь написать их, чтобы ускорить обработку данных.

Что касается таблицы postgresql, общий размер записи составляет 140 миллионов, и у меня есть 5 таблиц, ссылающихся на первичный внешний ключ. Я не использую соединения, поскольку они не масштабируются.

Итак, для одного поиска я делаю 6 поисков без объединений и записываю их в формат hdf5. Для каждого поиска я делаю 6 вставок в каждую из таблиц и соответствующих массивов.

Запросы действительно простые

select * from x.train where tr_id=1 (primary key & indexed)
select q_t from x.qt where q_id=2 (non-primary key but indexed) 

(аналогично пять запросов)

Каждый компьютер записывает два файла hdf5, поэтому общее количество файлов составляет около 20.

Некоторые расчеты и статистика:

Total number of records : 14,37,00,000
Total number of records per file : 143700000/20 =71,85,000 
The total number of records in each file : 71,85,000 * 5 = 3,59,25,000

Текущая конфигурация базы данных Postgresql:

Моя текущая машина: 8 ГБ ОЗУ с процессором i7 2-го поколения.

Я внес следующие изменения в файл конфигурации postgresql: shared_buffers: 2 ГБ Effective_cache_size: 4 ГБ

Примечание о текущей производительности:

Я запускал его около десяти часов, и производительность выглядит следующим образом: общее количество записей, записанных для каждого файла, составляет около 6 21 000 * 5 = 31 05 000.

Узким местом является то, что я могу арендовать его только на 10 часов в день (на ночь), и если он обрабатывается с такой скоростью, это займет около 11 дней, что слишком много для моих экспериментов.

Пожалуйста, предложите мне, как улучшить. Вопросы: 1. Должен ли я использовать симметричную многопроцессорную обработку на этих настольных компьютерах (у них 2 ядра и около 2 ГБ ОЗУ). Что в этом случае рекомендуется или предпочтительнее? 2. Если я изменю файл конфигурации postgresql и увеличу объем оперативной памяти, это улучшит мой процесс. 3. Должен ли я использовать многопоточность. В этом случае любые ссылки или указатели будут очень полезны

Спасибо, Шри Ауровинд В.


person Sree Aurovindh    schedule 19.03.2012    source источник
comment
Вы запрашиваете что-то и перебираете результат, чтобы что-то написать? В этом случае база данных не может быть узким местом.   -  person Jayan    schedule 19.03.2012
comment
@jayan Привет, я каждый раз делаю запрос и записываю результаты в формат hdf5. Помогите, пожалуйста, с оптимизацией.   -  person Sree Aurovindh    schedule 19.03.2012


Ответы (1)


Пожалуйста, перейдите по следующей ссылке

http://sourceforge.net/mailarchive/forum.php?thread_name=CAC4BLaLCMuA6%3DDated_MsPKp5-F_EyKbrUkMWS4g_D7grwpVXQ%40mail.gmail.com&forum_name=pytables-users

Это может быть полезно для понимания эффективности запросов.

Спасибо

person Sree Aurovindh    schedule 19.03.2012
comment
Хотите подытожить, что упоминается в ссылке? - person Ivo Flipse; 27.08.2013
comment
ссылка мертва. Не могли бы вы резюмировать, какое решение вы используете сейчас? Спасибо - person schoetbi; 13.07.2015