crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Многопоточность при работе с БД
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kibsoft Дата 20.2.2010, 12:46
 
Цитата(Litkevich Yuriy @ 20.2.2010, 1:58) *
Цитата(kibsoft @ 20.2.2010, 3:19) *
Кончилось все хорошо, с 6 секунд парсинга и записи в БД "Войны и мир" ускорил до 1,6
чем ускорил?

Все оставил прежним, но индекс сделал не уникальным(уникальность у меня проверяется в программе). Ну и убрал лишний столбец ID с автоинкрементом(незнаю зачем вообще его в данном случае делал..)
Litkevich Yuriy Дата 20.2.2010, 0:58
 
Цитата(kibsoft @ 20.2.2010, 3:19) *
Кончилось все хорошо, с 6 секунд парсинга и записи в БД "Войны и мир" ускорил до 1,6
чем ускорил?
kibsoft Дата 20.2.2010, 0:19
 
Цитата(MoPDoBoPoT @ 18.2.2010, 20:02) *
Чем, собственно, все закончилось?

Кончилось все хорошо, с 6 секунд парсинга и записи в БД "Войны и мир" ускорил до 1,6 :)
MoPDoBoPoT Дата 18.2.2010, 19:02
  Чем, собственно, все закончилось?
kibsoft Дата 15.2.2010, 21:35
 
Цитата(Litkevich Yuriy @ 15.2.2010, 22:20) *
Цитата(MoPDoBoPoT @ 16.2.2010, 0:07) *
Но попробовать явно начать-закончить транзакцию все равно стоит, а то мало ли (:
тем более, что это не сложно:
QSqlDatabase::database().transaction();
...
QSqlDatabase::database().commit();



При явном указании ничего не изменилось :(
На sql.ru дали вот такой запрос:
alter session set skip_unusable_indexes=true, ошибка теперь не выводится и execBatch() возвращает true, но данные в таблицу не заносятся :huh:
Litkevich Yuriy Дата 15.2.2010, 21:20
 
Цитата(MoPDoBoPoT @ 16.2.2010, 0:07) *
Но попробовать явно начать-закончить транзакцию все равно стоит, а то мало ли (:
тем более, что это не сложно:
QSqlDatabase::database().transaction();
...
QSqlDatabase::database().commit();
MoPDoBoPoT Дата 15.2.2010, 21:07
 
Цитата(Litkevich Yuriy @ 15.2.2010, 20:24) *
вот не могу вспомнить/найти, где это обсуждалось. Явное использование транзакции помогало ускорить процесс.

Ну да, при последовательном выполнении инструкций, но здесь используется execBatch(), который поддерживается Ораклом. В этом случае данные пакуются в массивы и передаются на сервер, где уже вставляются. По-моему так :)

Но попробовать явно начать-закончить транзакцию все равно стоит, а то мало ли (:
kibsoft Дата 15.2.2010, 20:45
  Не явно их не использую..а как beginTransaction() у QSqlDriver?
просто в БД я вообще не силен, по ним ничего толком не читал..
Litkevich Yuriy Дата 15.2.2010, 20:24
 
Цитата(MoPDoBoPoT @ 15.2.2010, 23:07) *
там уже оптимизировано в этом плане.
вот не могу вспомнить/найти, где это обсуждалось. Явное использование транзакции помогало ускорить процесс.
MoPDoBoPoT Дата 15.2.2010, 20:07
 
Цитата(kibsoft @ 15.2.2010, 19:17) *
Не в этом дело..без отлючения/влючения индекса и с позиционным работает...но дольше вставка идет чем без индекса, но зато обновление базы с индексом намного быстрее.. вот я и хочу на время вствки его отключать, но видимо так нельзя..

Я в курсе. Конечной целью у тебя является увеличить скорость записи данных в БД, потому я и сделал замечание. Собственно, подготовка запроса (prepare) служит для того, чтобы СУБД разобрало текст запроса один раз и поместила его в библиотечный кэш, а пользовалось им много раз (сам разбор запроса занимает некоторое время).
Насчет индексов - спроси про это на sql.ru, там прохаванные в этом люди.
Цитата(Litkevich Yuriy @ 15.2.2010, 19:38) *
kibsoft, ты транзакции используешь?

Так он же execBatch() пользуется, там уже оптимизировано в этом плане.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 13:51