Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Быстродействие кода


Автор: jimbo 26.1.2010, 18:35
Привет всем!


Абстрактная задача. Поступают сообщения извне и программа должна сохранять их в БД. 
Если время на запись 50 сообщений в БД составляет 3 секунды, а за 3 секунды стабильно приходит 80 сообщений, можно ли в реальном времени загружать все сообщения?

на прием сообщений работает сокет.
функция format(char*) формирует массив строк-insert`ов. 
функция ExecQueries запихивает в БД сообщения. 

БД - MYSQL
язык C++
среда MSVS08
ОС Виста

Я реализовал так:
отдельный поток читает данные из буфера. вставляет временную метку о том во соклько пришло сообщение. формирует инсерт для БД. записывает этот инсерт в память.
Таким образом все инсерты хранятся в памяти по технологии СПИСОК.

Второй поток смотрит есть ли сообщений. и начиная с первого записывает в БД.  

Смотрю каждую секунду количество сообщений в памяти. 

0
22
33
54
и так постоянно растет! 

Можно ли сохранить в БД все сообщения? К вечеру-ночи-утру количество прибывающих сообщений уменьшается. т.е. я рассчитываю что список к утру обнулится - но пока не тестил. сегодня запущу - проверю. 

Каким образом можно ускорить процесс заливания в БД? 
использую libmysql.lib - библиотеку для взаимодействия с БД.

Через минут 5 уже 10000 сообщений не залитых:(

Автор: xvr 27.1.2010, 13:25
Заливать сразу по несколько сообщений (см insert values в SQL)

Автор: jimbo 27.1.2010, 15:18
все намного проще. 
можно заливать файлами. функция LOAD DATA INFILE

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)