Проблема связана со скоростью записи компьютера (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. Должен ли я использовать многопоточность. В этом случае любые ссылки или указатели будут очень полезны
Спасибо, Шри Ауровинд В.