![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Для более быстрого создания файла топографической библиотеки (бинарный файл, в котором хранится содержимое нескольких (многих) карт) определенного формата решено было использовать в качестве промежуточного варианта хранения данных БД. Проблема состоит в том, что после реализации этого подхода выяснилось, что вставка, изменение и выборка из таблиц СУЩЕСТВЕННО замедляет задачу, а не ускоряет ее. Как можно решить данную проблему? Заранее спасибо за подсказку! Как только я комментирую строчки, делающие выборку и внесение данных в таблицы - тут же скорость работы возрастает в разы.
Сообщение отредактировал AD - 18.3.2011, 10:39 |
|
|
![]() |
Kagami |
![]()
Сообщение
#2
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: ![]() ![]() ![]() |
Иногда работу СУБД сильно заменяют транзакции - с тем же SQLite они выполняются для каждой операции автоматически. Часто можно сильно ускорить работу если начинать транзакции вручную и завершать после выполнения всех (ну или части, если их можно сгруппировать логически) операций.
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Иногда работу СУБД сильно заменяют транзакции - с тем же SQLite они выполняются для каждой операции автоматически. Часто можно сильно ускорить работу если начинать транзакции вручную и завершать после выполнения всех (ну или части, если их можно сгруппировать логически) операций. Замедляют в смысле? А как к примеру это сделать, т.е. запускать и завершать транзакции вручную? Да читаю ассистент. Возник такой вопрос - могу использовать QSqlTableModel при работе с QSQLite? |
|
|
Kagami |
![]()
Сообщение
#4
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: ![]() ![]() ![]() |
Замедляют в смысле? Пусть тебе надо сделать 5 операций вставки. По-умолчанию для каждой операции будет сделана своя транзакция (причем автоматически), т.е. QSqlDatabase::beginTransaction(); QSqlQuery::exec("..."); QSqlDatabase::commit(); ...А как к примеру это сделать, т.е. запускать и завершать транзакции вручную? А теперь представь что у тебя таких операций в разы больше. При этом для каждой транзакции тот же QSqlLite создает журнал, а фактически - файл на жестком диске. А если начать транзакцию самому (с помощью явного вызова QSqlDatabase::beginTransaction()), выполнить все свои запросы, а затем завершить ее, то все будет работать быстрее. |
|
|
AD |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Пусть тебе надо сделать 5 операций вставки. По-умолчанию для каждой операции будет сделана своя транзакция (причем автоматически), т.е. QSqlDatabase::beginTransaction(); QSqlQuery::exec("..."); QSqlDatabase::commit(); ... А теперь представь что у тебя таких операций в разы больше. При этом для каждой транзакции тот же QSqlLite создает журнал, а фактически - файл на жестком диске. А если начать транзакцию самому (с помощью явного вызова QSqlDatabase::beginTransaction()), выполнить все свои запросы, а затем завершить ее, то все будет работать быстрее. Ясно, спасибо. При работе с SQLite буду иметь в виду. Пока еще на Paradox. Посмотрел с помощью hasFeature() поддерживает ли мой драйвер Paradox транзакции и увидел, что не поддерживает. Сообщение отредактировал AD - 18.3.2011, 22:56 |
|
|
AD |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Кто-нибудь еще может подсказать, как увеличить скорость работы запросов? СУБД - Paradox. Переход на SQLite не удался в связи с проблемой транзакций. По каким причинам время работы запроса составляет несколько секунд?
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 7:10 |