crossplatform.ru

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

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Как ускорить создание таблицы (через 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  


Цитата(panter_dsd @ 17.2.2009, 22:01) *
если тебе нужны точные данные, т.е. когда подряд делаешь несколько селектов и не хочешь, чтобы за это время кто-либо что-либо изменил


Это если говорить о базах данных вообще. Но 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  


Цитата(Rocky @ 17.2.2009, 21:37) *
Ув. форумчане, не подскажите вот при навигации по таблице БД, нужно их использовать? Или они толку не дадут?

Для ускорения навигации можно использовать следующее:
Цитата
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  


Цитата(panter_dsd @ 17.2.2009, 22:16) *
У меня нормально 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  


Цитата(panter_dsd @ 17.2.2009, 23:34) *
И изменяют нормально. Блокировки работают.
Т.е. пишут поочередно, что дает небольшие потери в скорости.

авторы скулайта предупреждали вроде,
что на смешанных архитектурах блокировки работать будут через пень колоду,
так что там танцевать надо хорошенько вокруг этого процесса - отключать кеширования дисков и
типа не любит она толи фата то-ли нтфс-а.
не помню, но читал...
Цитата
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  


Цитата(Rocky @ 18.2.2009, 0:37) *
при навигации по таблице БД, нужно их использовать? Или они толку не дадут?
для случая с SQLite наверное не нужно. А вот при использовании более продвинутых СУБД, может и понадобится. Зависит от того, как ты потроха реализовал. Напримр, если ты используешь процедуру выбора, в которой вызывается другая процедура, что-либо изменяющая в БД, то не откатывая явно транзакцию в БД будет мусор создаваться (во внутренностях) - БД будет расти. Надо будет ее чистить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.2.2009, 11:38
Сообщение #30


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Транзакции нужны для гарантирования атомарности изменений и консистентности данных.
Простой пример:
int sql_count() {
  QSqlQuery query("SELECT COUNT(*) FROM tbl");
  return query.value(0).toInt();
}

int rt_count() {
  QSqlQuery query("SELECT * FROM tbl");
  int count = 0
  while (query.next())
    ++count;
  return count;
}

bool test() {
  return sql_count() == rt_count();
}

Функция test() может вернуть false, если вызвана не внутри транзакции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 9:04