Оптимизация скорости записи в HDF5 с помощью Pytables - PullRequest
2 голосов
/ 19 марта 2012

Проблема связана со скоростью записи компьютера (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 ГБ, эффективный_кэш-размер: 4 ГБ

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

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

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

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

Спасибо, Sree aurovindh V

1 Ответ

0 голосов
/ 19 марта 2012

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

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

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

Спасибо

...