deks

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору XPerformer Тут тема такая. Так как движок используется приложением (как правило одним в один момент), то можно настраивать движок под контекст программы. Разница в перфомансе может быть в несколько раз. Основная игра заключается в управлении режимами транзакций (журнала), режим доступа с нескольких потоков, индексами, явный старт транзакций, присоединенными табличками в памяти и тп. В принципе, в указанной выше статейке на хабре есть упоминания о многих фишках. Плюс легкий бэкап (делаем копию бд при старте программы два раза в день, держим 6 месяцев архив копий) - и можно использовать небезопасные режимы работы бд - зато быстрые (когда потеря данных с последнего бэкапы не так критична, или маловероятна). Например: готовимся импортировать кучу данных (bulk import): отключаем журнал, трем индексы, стартуем транзакцию, заливаем данные, коммитим, восстанавливаем индексы, восстанавливаем режим журнала. Так быстрее. Или для отчета нужна временная таблица: присоединяем бд в памяти, делаем там временную табличку, делаем запрос к бд для отчета. Про работу в небезопасном режиме я уже говорил: отключаем журналы, отключаем синхронизации с файловой системой, отключаем многозадачность - супер профит по быстродействию. К слову: на реальных задачах вообще никогда даже не было нужды тюнинговать перфоманс SQLite даже на мобильных дивайсах! Это ж не сервер - а вспомогательная тулза на фронтэнде (менеджер кэша облачных данных, например). Ну или на сервере приложений для некритичных небольших данных (когда городить сервер бд нет резона - например я хранил пакеты команд для ик-передатчика). upd: про компоненты. Щас логичнее всего пользовать FireDAC - он же типа новый bde, и с SQLite работает. upd2: прочитал пару ссылок - вот тут (http://stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of-sqlite) граждане развлекаются вставкой большого объема данных. В зависимости от настроек время меняется от 1 часа 45 минут до 12 секунд. Зацените разницу. Кстати, там еще не игрались с размером страницы бд (должна совпадать с размером класс тера диска), и с однопотоковой версией SQLite (скомпилирована в одно потоковом режиме). Думаю, до 5-6 секунд можно соптимизировать время. | Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 23:32 19-02-2014 | Исправлено: deks, 00:03 20-02-2014 |
|