Многопоточность при работе с БД |
Здравствуйте, гость ( Вход | Регистрация )
Многопоточность при работе с БД |
kibsoft |
14.2.2010, 12:17
Сообщение
#1
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
Есть примерно 58000 записей, я их через execBatch() забиваю в базу (СУБД ORACLE), на это уходит около 4 секунд..вопрос: если например запись в базу разбить на два потока, то можно ускорить запись? Хотя бы теоретически это возможно?
|
|
|
ViGOur |
14.2.2010, 12:32
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Это как я понимаю уже нужно обращаться к специфике работы самих БД.
Может не оптимальна настройка самой БД может еще чего... |
|
|
Litkevich Yuriy |
14.2.2010, 14:14
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
kibsoft, при вставке больших пачек данных, обычно блокируют (отключают) индексы, а после вставки включают вновь. Т.к. индексация осуществляется во время добавления (вставки) данных
|
|
|
SABROG |
14.2.2010, 15:15
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Можно попробовать вызывать BEGIN TRANSACTION перед вставкой, и COMMIT TRANSACTION после. И заливать данные не в таблицу, которую ты собираешься добавлять данные, а сначала во временную, а уже из неё копировать в оригинальную: INSERT INTO TABLE2 SELECT * FROM TABLE1
|
|
|
kibsoft |
15.2.2010, 17:53
Сообщение
#5
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
kibsoft, при вставке больших пачек данных, обычно блокируют (отключают) индексы, а после вставки включают вновь. Т.к. индексация осуществляется во время добавления (вставки) данных Отключаю, после выполнения запроса вставки включаю, но выдает ошибку: "ORA-01502: index 'CHASTDICT.WORDIND' or partition of such index is in unusable state Вот код:
|
|
|
MoPDoBoPoT |
15.2.2010, 18:41
Сообщение
#6
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
... query.prepare("INSERT INTO WORDS(WORD,COUNT) VALUES(?,?)"); query.addBindValue(keys); query.addBindValue(values); ... Так Оракл же даржит именное связывание, а не позиционное. Попробуй так:
|
|
|
kibsoft |
15.2.2010, 19:17
Сообщение
#7
|
Участник Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: 2 |
... query.prepare("INSERT INTO WORDS(WORD,COUNT) VALUES(?,?)"); query.addBindValue(keys); query.addBindValue(values); ... Так Оракл же даржит именное связывание, а не позиционное. Попробуй так:
Не в этом дело..без отлючения/влючения индекса и с позиционным работает...но дольше вставка идет чем без индекса, но зато обновление базы с индексом намного быстрее.. вот я и хочу на время вствки его отключать, но видимо так нельзя.. |
|
|
Litkevich Yuriy |
15.2.2010, 19:38
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
kibsoft, ты транзакции используешь?
|
|
|
MoPDoBoPoT |
15.2.2010, 20:07
Сообщение
#9
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Не в этом дело..без отлючения/влючения индекса и с позиционным работает...но дольше вставка идет чем без индекса, но зато обновление базы с индексом намного быстрее.. вот я и хочу на время вствки его отключать, но видимо так нельзя.. Я в курсе. Конечной целью у тебя является увеличить скорость записи данных в БД, потому я и сделал замечание. Собственно, подготовка запроса (prepare) служит для того, чтобы СУБД разобрало текст запроса один раз и поместила его в библиотечный кэш, а пользовалось им много раз (сам разбор запроса занимает некоторое время). Насчет индексов - спроси про это на sql.ru, там прохаванные в этом люди. kibsoft, ты транзакции используешь? Так он же execBatch() пользуется, там уже оптимизировано в этом плане. |
|
|
Litkevich Yuriy |
15.2.2010, 20:24
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 13:27 |