Здравствуйте, гость ( Вход | Регистрация )
512es | Дата 20.3.2010, 20:57 |
Извиняюсь, что тема давнешняя. Но до сих пор, (раз я сюда попал) актуальная. Так вот, хочу сказать что для ускорения инсерта в склайт базу, лучше всего подходит инсертить в темпорари таблицу, а из неё моментально всё перелетает в обычную. Вот только с постгресом это не прокатывает. Попробую через execBatch.. |
|
Tonal | Дата 18.2.2009, 13:10 |
Последовательность их вызова зависит от компилятора и оптимизатора. Но если запросы в них выполняются в разных транзакциях, как это происходит в Qt если не стартовать транзакцию явно, то между первым и вторым может вклиниться кто-то третий и изменить состав таблицы. Если же транзакция одна (с соответственным уровнем), то вклинится никто не может. |
|
SABROG | Дата 18.2.2009, 11:52 |
Функция test() может вернуть false, если вызвана не внутри транзакции. Мне память не изменяет, сначала будет вызвана rt_count(), затем sql_count()? |
|
Tonal | Дата 18.2.2009, 11:38 |
Транзакции нужны для гарантирования атомарности изменений и консистентности данных. Простой пример:
Функция test() может вернуть false, если вызвана не внутри транзакции. |
|
Litkevich Yuriy | Дата 18.2.2009, 1:49 |
при навигации по таблице БД, нужно их использовать? Или они толку не дадут? для случая с SQLite наверное не нужно. А вот при использовании более продвинутых СУБД, может и понадобится. Зависит от того, как ты потроха реализовал. Напримр, если ты используешь процедуру выбора, в которой вызывается другая процедура, что-либо изменяющая в БД, то не откатывая явно транзакцию в БД будет мусор создаваться (во внутренностях) - БД будет расти. Надо будет ее чистить. |
|
trdm | Дата 18.2.2009, 0:50 |
И изменяют нормально. Блокировки работают. Т.е. пишут поочередно, что дает небольшие потери в скорости. авторы скулайта предупреждали вроде, что на смешанных архитектурах блокировки работать будут через пень колоду, так что там танцевать надо хорошенько вокруг этого процесса - отключать кеширования дисков и типа не любит она толи фата то-ли нтфс-а. не помню, но читал... Цитата 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. |
|
panter_dsd | Дата 17.2.2009, 23:34 |
И изменяют нормально. Блокировки работают. Т.е. пишут поочередно, что дает небольшие потери в скорости. |
|
SABROG | Дата 17.2.2009, 22:42 |
У меня нормально 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 |
|
Kagami | Дата 17.2.2009, 22:40 |
Ув. форумчане, не подскажите вот при навигации по таблице БД, нужно их использовать? Или они толку не дадут? Для ускорения навигации можно использовать следующее: Цитата 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. |
|
Rocky | Дата 17.2.2009, 22:39 |
Ага, теперь разобрался.. Спасибо | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 15:40 |