Многопоточный доступ на чтение базы данных - PullRequest
1 голос
/ 14 февраля 2011

У меня есть процесс (код c ++), который читает и пишет из базы данных (Oracle).Но процесс занимает много времени.

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

Я буду создавать соединение с БД на поток.write помедленнее?
Будет ли это работать?Есть ли другой способ улучшить производительность (все запросы уже настроены и оптимизированы)?

Спасибо, Nikhil

1 Ответ

0 голосов
/ 15 февраля 2011

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

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

Секционирование может улучшить производительность базы данных, как и изменение индексов в соответствующих таблицах. Если вы можете разместить отдельные разделы на отдельных физических дисках, это может улучшить ввод-вывод, когда с помощью данного оператора SQL требуется доступ только к одному разделу.

Удаление ненужных индексов, изменение порядка столбцов индекса в соответствии с запросами и даже изменение типа индекса также может повысить производительность.

Как и во всем: профилируйте его до и после каждого предложенного изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...