Как ускорить создание таблицы (через QSqlQuery)? |
Здравствуйте, гость ( Вход | Регистрация )
Как ускорить создание таблицы (через QSqlQuery)? |
panter_dsd |
17.2.2009, 22:01
Сообщение
#21
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
В данном случае не дадут. В основном транзакции применяются при изменении или если тебе нужны точные данные, т.е. когда подряд делаешь несколько селектов и не хочешь, чтобы за это время кто-либо что-либо изменил. Т.е. грубо транзакция - слепок БД на определенный момент времени.
|
|
|
SABROG |
17.2.2009, 22:06
Сообщение
#22
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
если тебе нужны точные данные, т.е. когда подряд делаешь несколько селектов и не хочешь, чтобы за это время кто-либо что-либо изменил Это если говорить о базах данных вообще. Но sqlite не поддерживает синхронное изменение базы данных, ни через потоки, никак вообще. Сообщение отредактировал SABROG - 17.2.2009, 22:52 |
|
|
panter_dsd |
17.2.2009, 22:16
Сообщение
#23
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
У меня нормально 5 клиентов на одной базе уживалось, все нормально было.
|
|
|
Rocky |
17.2.2009, 22:39
Сообщение
#24
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Ага, теперь разобрался.. Спасибо
|
|
|
Kagami |
17.2.2009, 22:40
Сообщение
#25
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Ув. форумчане, не подскажите вот при навигации по таблице БД, нужно их использовать? Или они толку не дадут? Для ускорения навигации можно использовать следующее: Цитата void QSqlQuery::setForwardOnly ( bool forward )
Sets forward only mode to forward. If forward is true, only next() and seek() with positive values, are allowed for navigating the results. Forward only mode can be (depending on the driver) more memory efficient since results do not need to be cached. It will also improve performance on some databases. For this to be true, you must call setForwardMode() before the query is prepared or executed. Note that the constructor that takes a query and a database may execute the query. Forward only mode is off by default. |
|
|
SABROG |
17.2.2009, 22:42
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
У меня нормально 5 клиентов на одной базе уживалось, все нормально было. В общем чтение множеством клиентов возможно, а изменение нет. Цитата (5) Can multiple applications or multiple instances of the same application access a single database file at the same time? Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however. Теперь уже сложно сказать полезен begin transaction для select'a или нет... Про forwardonly тут http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor Сообщение отредактировал SABROG - 17.2.2009, 22:56 |
|
|
panter_dsd |
17.2.2009, 23:34
Сообщение
#27
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
И изменяют нормально. Блокировки работают.
Т.е. пишут поочередно, что дает небольшие потери в скорости. |
|
|
trdm |
18.2.2009, 0:50
Сообщение
#28
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
И изменяют нормально. Блокировки работают. Т.е. пишут поочередно, что дает небольшие потери в скорости. авторы скулайта предупреждали вроде, что на смешанных архитектурах блокировки работать будут через пень колоду, так что там танцевать надо хорошенько вокруг этого процесса - отключать кеширования дисков и типа не любит она толи фата то-ли нтфс-а. не помню, но читал... Цитата SQLite uses POSIX advisory locks to implement locking on Unix. On Windows it uses the LockFile(), LockFileEx(), and UnlockFile() system calls. SQLite assumes that these system calls all work as advertised. If that is not the case, then database corruption can result. One should note that POSIX advisory locking is known to be buggy or even unimplemented on many NFS implementations (including recent versions of Mac OS X) and that there are reports of locking problems for network filesystems under Windows. Your best defense is to not use SQLite for files on a network filesystem.
Сообщение отредактировал trdm - 18.2.2009, 0:53 |
|
|
Litkevich Yuriy |
18.2.2009, 1:49
Сообщение
#29
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
при навигации по таблице БД, нужно их использовать? Или они толку не дадут? для случая с SQLite наверное не нужно. А вот при использовании более продвинутых СУБД, может и понадобится. Зависит от того, как ты потроха реализовал. Напримр, если ты используешь процедуру выбора, в которой вызывается другая процедура, что-либо изменяющая в БД, то не откатывая явно транзакцию в БД будет мусор создаваться (во внутренностях) - БД будет расти. Надо будет ее чистить.
|
|
|
Tonal |
18.2.2009, 11:38
Сообщение
#30
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Транзакции нужны для гарантирования атомарности изменений и консистентности данных.
Простой пример:
Функция test() может вернуть false, если вызвана не внутри транзакции. |
|
|
Текстовая версия | Сейчас: 19.1.2025, 9:16 |