Здравствуйте, гость ( Вход | Регистрация )
Iron Bug | Дата 5.4.2011, 17:52 |
ну, на вид вроде вообще примитив, совершенно ничего особенного. вероятно, есть какие-то тонкости в интерфейсе со стороны Qt. может, тормозит графика, если она навешана на запрос (отрисовки гридов и т.п.) вообще, базы имеют т.н. синхронизацию: когда при каждом чтении база проверяется на то, что у неё сохранены все последние изменения. это нужно в случае, когда два приложения пишут в базу или когда обязательно считывать прямо самое последнее состояние базы каждый раз. если это не требуется, то это можно отключить и обычно работает быстрее, но я не в курсе, есть ли синхронизация у Paradox'а. но если база небольшая, то даже с синхронизацией так тормозить не должно. это какие-то запредельные тормоза. может, проблемы с потоками? никто не блокирует ресурсы во время обращения к базе? |
|
AD | Дата 5.4.2011, 8:32 |
это в любом случае наздоровые задержки. Согласен. Задержки безумно большие. Это неудобно. может, у тебя база такая кривая или запрос? какой-нибудь индекс поставлен на огромное бинарное поле, например? и он считается долго. или что-то подобное. Да вряд ли БД кривая. Схему БД придумал человек, у которого уже есть подобный опыт, в принципе. Индексов вообще нет. Поля, как правило, или строковые, или целочисленные, или вещественные (типа double). Одна табличка содержит поля данных BLOB для хранения картинок, но ее я пока даже не заполнял. Запросы все подобного плана:
|
|
Iron Bug | Дата 4.4.2011, 19:16 |
это в любом случае наздоровые задержки. может, у тебя база такая кривая или запрос? какой-нибудь индекс поставлен на огромное бинарное поле, например? и он считается долго. или что-то подобное. |
|
AD | Дата 3.4.2011, 12:59 |
я не раз сталкивалась с SQLite, на предыдущей работе мы тоже её использовали. проблем не было и всё работало. это отличная база для локального использования. лёгкая и быстрая. но мы использовали их родной API, без всяких там оболочек. у них очень простые API-функции и освоение занимает от силы пару дней. я не могу сказать, почему что-то не срабатывало у других, но это точно не проблема SQLite. коммиты и транзакции там работают, как и всё прочее. Наверное поэтому вопрос данный помимо SQLite затрагивает и Qt. Он потому и задан в разделе Qt. В данном топике меня интересует из-за чего возможны проблемы со скоростью при вставках в таблицы? данная проблема существует при работе с Paradox. Предполагаю, что скорость при работе с SQLite будет не много выше. |
|
Iron Bug | Дата 2.4.2011, 17:16 |
я не раз сталкивалась с SQLite, на предыдущей работе мы тоже её использовали. проблем не было и всё работало. это отличная база для локального использования. лёгкая и быстрая. но мы использовали их родной API, без всяких там оболочек. у них очень простые API-функции и освоение занимает от силы пару дней. я не могу сказать, почему что-то не срабатывало у других, но это точно не проблема SQLite. коммиты и транзакции там работают, как и всё прочее. | |
AD | Дата 2.4.2011, 14:13 |
Повторюсь. Проблема со скоростью - на Paradox, на SQLite вообще не удавалось записи в таблицу вставить. Даже не знаю почему... Либо он создавал в памяти образ БД, либо еще что-то. Т.е. запись вставлялась, но как только перезапускал приложение, все оставалось по прежнему... commit транзакци не срабатывал. До скорости в SQLite не успел добраться! | |
Litkevich Yuriy | Дата 2.4.2011, 9:21 |
потому что с отдельными транзакциями на каждую запись обращение к базам всегда медленнее. вставка без транзакции > 13 сек. Вставка с транзакцией я использовал одну |
|
Iron Bug | Дата 1.4.2011, 20:06 |
я месяц назад пользовал небольшую (по мегабайтам) SQLite БД, у меня было: вставка без транзакции > 13 сек. Вставка с транзакцией <1 сек. транзакция позволяет делать откаты и либо ты не коммитил (данные не сливались реально, а хранились в памяти), либо что-то неправильно делал. потому что с отдельными транзакциями на каждую запись обращение к базам всегда медленнее. кстати, вставка 13 секунд - это тоже что-то нездоровое. хотя, наверное смотря какой объём. у меня наоборот была задача: довольно мелкие записи, но очень быстро: примерно 30 записей (в разные таблицы, со связями) каждые 50миллисекунд. за час эта хрень отъедала чуть больше гигабайта на винте (но база была поделена на куски по 300 метров) и всё работало на ура и ни грамма не грузило ни проц, ни память, ни винт. при этом параллельно пользователь работал с софтиной, в которой он просматривал и сортировал выборки из данных. и даже при выборках в сотни тысяч записей ничего не тормозило. хотя юзерский интерфейс, конечно, отъедал больше ресурсов. но там ещё на каждую запись отрисовка шла и скорее всего, поэтому. сами обращения к базе не так много брали. в худших случаях ну секунд 5. но это уж когда вообще открывался один целый файл в 300 метров с хитрожопой сортировкой. |
|
Litkevich Yuriy | Дата 1.4.2011, 19:48 |
я месяц назад пользовал небольшую (по мегабайтам) SQLite БД, у меня было: вставка без транзакции > 13 сек. Вставка с транзакцией <1 сек. | |
Iron Bug | Дата 1.4.2011, 17:27 |
а что в SQLite с транзакциями? по-моему, там не было проблем с ними. я работала с SQLite - держит очень приличную скорость. я сливала данные очень быстро, и они ещё читались другой софтиной. проблем не было. но лучше транзакции начинать вручную, как уже написали выше и сливать порциями, чтобы обращение к винту было не слишком частым. и ещё у SQLite есть две фичи: 1. когда база становится жирнее 300 метров (это под вендой я работала), он начинает иногда глючить при вставке записей (возвращает SQLITE_CORRUPT. они про эту ошибку знают, но вроде пока не исправили). я не уверена, что этот предел зависит именно от размера базы, а не от количества записей. у меня их там были сотни тысяч. но, в принципе, я решила проблему созданием нового файла базы после накопления этого объёма. но если база не может быть разделена на куски и она больше 300 метров - то это может быть проблемой. 2. у него есть несколько настроек, которые позволяют ускорять работу с базой:
я их сейчас просто из кода взяла и уже не особо помню, что конкретно они делают, это надо читать в доках на SQLite, пояснения есть на их сайте. но это существенно ускоряет вставку записей в таблицы. P.S. я пользовалась стандартным интерфейсом SQLite. сама QT тоже может отъесть сколько-то времени, но не думаю, что разница будет существенной. |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 3.6.2023, 7:21 |