Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.81
OMu4KA
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 5
#1

Скорость выполнения запросов в SQLite - C++

03.04.2008, 12:40. Просмотров 4474. Ответов 7
Метки нет (Все метки)

Здравствуйте!
Собственно, мне нужно осуществлять динамическую запись в журнал происходящих в программе изменений. Делаю это с помощью базы данных SQLite. Пишу на С++, используя исходные тексты на С - sqlite-source-3_3_15.
Хотелось бы оптимизировать скорость выполнения записи в таблицу. Так как вставка записей в таблицу (INSERT) происходит очень часто (несколько сотен в секунду), то программа сильно тормозит. Судя по всему, медленная работа винчестера, так как загрузка процессора при этом небольшая.
Вроде движок SQLite называют самым быстрым.
Или для этой цели вообще любая база данных не подойдет и надо использовать другие механизмы, вроде записи в текстовые или бинарные файлы?
Может кто-нибудь подсказать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2008, 12:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скорость выполнения запросов в SQLite (C++):

Тест приложения на скорость выполнения - C++ Builder
Доброго времени суток писал функции сохранения, для удобства использовал объектно-ориентированный подход для этого в функции сохранения...

Оптимизировать скорость выполнения программы - C++ Builder
написал простенькую программку но для часиков до 1мин загрузки это черезчур,вот код: #include <vcl.h> #pragma hdrstop ...

Функции времени (вычислить время выполнения запросов) - C++
Здравствуйте, мне необходимо вычислить время выполнения запросов. Я использую GetTickCount();, но есть проблема, у этой функции точность 16...

Скорость выполнения. - C++
Есть консольное приложение, работающее с огромными текстовыми файлами, сравнивает их, читает, записывает и т.д. Судя по диспетчеру...

Скорость выполнения delete - C++
Всем привет! Интересует почему скорость выполнения деструктора зависит нелинейно от объёма структуры? Есть у меня бинарное дерево...

Скорость выполнения операторов - C++
Привет всем. У меня есть задачка с которой не могу справится, она очень простая но функций с помощью которых бы смог её реализовать я не...

7
mik-a-el
Администратор
67849 / 37870 / 231
Регистрация: 10.04.2006
Сообщений: 12,826
03.04.2008, 13:06 #2
Цитата Сообщение от OMu4KA
Так как вставка записей в таблицу (INSERT) происходит очень часто (несколько сотен в секунду), то программа сильно тормозит.
Используйте ADO. Запись осуществляейте через датасет в пакетном режиме.
0
OMu4KA
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 5
04.04.2008, 07:32  [ТС] #3
Цитата Сообщение от mik-a-el Посмотреть сообщение
Используйте ADO. Запись осуществляейте через датасет в пакетном режиме.
Пыталась, но насколько я поняла, ADO не умеет создавать базы и таблицы :-(, а только подключается к уже созданным.
0
mik-a-el
Администратор
67849 / 37870 / 231
Регистрация: 10.04.2006
Сообщений: 12,826
04.04.2008, 10:38 #4
ADO умеет создавать таблицы. Базы думаю тоже, но это нуждается в проверке.
0
OMu4KA
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 5
04.04.2008, 13:55  [ТС] #5
Цитата Сообщение от mik-a-el Посмотреть сообщение
ADO умеет создавать таблицы. Базы думаю тоже, но это нуждается в проверке.
Извините, я не нашла в компонентах ADO, что-нибудь напоминающее метод CreateTable (как в BDE). :huh:

Решила проблему следующим образом:
На выполнение транзакций требуется относительно много времени.
Теперь записи накапливаю в отдельном списке, а потом все сразу записываю в таблицу в одной транзакции:
Код
BEGIN; 
INSERT INTO Log VALUES (...);
INSERT INTO Log VALUES (...);
INSERT INTO Log VALUES (...);
...
COMMIT;
(мультистроковый ввод моя версия SQLite не поддерживает).

Плюс вынесла процедуру записи в отдельный поток.
Теперь со скоростью проблем нет .

Спасибо всем!
0
mik-a-el
Администратор
67849 / 37870 / 231
Регистрация: 10.04.2006
Сообщений: 12,826
04.04.2008, 14:00 #6
Цитата Сообщение от OMu4KA
Извините, я не нашла в компонентах ADO, что-нибудь напоминающее метод CreateTable (как в BDE)
Учите SQL
0
OMu4KA
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 5
04.04.2008, 14:06  [ТС] #7
Цитата Сообщение от mik-a-el Посмотреть сообщение
Учите SQL
Тогда и нет смысла в ADO, с задачей SQL-запросов прекрасно справляется, например, тот же SQLite.
0
mik-a-el
Администратор
67849 / 37870 / 231
Регистрация: 10.04.2006
Сообщений: 12,826
04.04.2008, 14:09 #8
Цитата Сообщение от OMu4KA
Тогда и нет смысла в ADO, с задачей SQL-запросов прекрасно справляется, например, тот же SQLite.
Задача ADO - не в подмене средств выполнения запросов.
0
04.04.2008, 14:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2008, 14:09
Привет! Вот еще темы с ответами:

От чего зависит скорость выполнения программы? - C++
от чего больше всего зависит скорость выполнения программы?

Как узнать скорость выполнения программы? - C++
Должна же быть какая то функция или метод, чтобы узнать время выполнения программы, или возможно есть инструменты в MVS2010 для анализа...

Скорость выполнения, а так же работа с дв. файлами - C++
Здравствуйте. У меня есть несколько вопросов, на которые я уже давненько ищу ответы, а именно : 1) Для таких классов, как...

Влияет ли невыполняющееся условие на скорость выполнения строчки с этим условием? - C++
Здравия всем! Мне тут стало любопытно. Есть у меня, к примеру, такой код: var = 0; if (var = 1) {exit(0)} if (var = 2)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru