Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / (не) Правильно настроенный компонент FDconnection для Update таблицы. / 19 сообщений из 19, страница 1 из 1
27.06.2016, 15:55
    #39263012
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
задача стояла следующая..
датчики давления диз.двигателя посылают при оборотах 1550 об.мин.( 12 циклов в секунду)
данные которые на выходе я пихаю в таблицу. Поскольку цилиндров много а прмежутки циклов для всех цилиндров одинаковы,я решил создать таблицу вот такого плана.

сложность записи для меня состояла в том что неизвестно какой цилиндр появится первым. Я решил что буду записывать в таблицу первый пришедший.

INSERT INTO wcdat (hmsmsc,dtstam,dcycle,knock"+db_cylnum+",imep"+db_cylnum+",pmax"+db_cylnum+")"
VALUES ('"+insert_wcdat_time+"','"+db_tstam+"','"+db_cycle+"','"+db_knock+"','"+db_imep+"','"+db_peak+"');

а кода появится следующий цилиндр буду писать его как

UPDATE wcdat SET" " knock"+db_cylnum+"='"+db_knock+"'"
",imep"+db_cylnum+"='"+db_imep+"'"
",pmax"+db_cylnum+"='"+db_peak+"'"
" WHERE"
" dcycle = '"+db_cycle+"'";

и все заработало.НО! запись производится круглосуточно ,и где то на десятой минуте я заметил что база начинает писать с пробелами . тоесть не успевает переварить апдэйт или я туплю.что вероятнее всего. функция записи вызывается в таймере с интервалом 10 милисекунд. так что времени должно было быть с избытком.Подозреваю что всё дело в настройках компонентов FireDac но опыта работы практически нет.
Использую как то так.
ПРОШУ помощи спецов в настройке сего чуда.код записи ниже.
...
Рейтинг: 0 / 0
27.06.2016, 15:56
    #39263013
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
Видимо таблица не попала в запись.
Прилагаю.
...
Рейтинг: 0 / 0
27.06.2016, 16:01
    #39263018
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
Наверное сумбурно написанная задача не позволит расчитывать на моментальное решение. отвечу на наводящие вопросы и на всё что необходимо было бы учесть в данном посте,посту,иликакеготам.
...
Рейтинг: 0 / 0
27.06.2016, 16:22
    #39263045
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvikзаметил что база начинает писать с пробелами . тоесть не успевает переварить апдэйт
Видимо имеется ввиду, что промежуток времени поля hmsmsc между записями начал растягиваться?

Это может быть связано с тем, что ваш код стал работать несколько медленно (утечка памяти или ещё какое-либо влияние), что не позволяет получать данные чаще, чем при запуске приложения. Пока не вижу проблем с SQLite, а с FDconnection это разбираться не сюда
...
Рейтинг: 0 / 0
27.06.2016, 16:30
    #39263052
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
или это те NULL значения? Решение точно такое же, надо проверить скорость работы вашего кода и кода при работе с БД. Может дело в архитектуре приложения, пока не ясно из описания
...
Рейтинг: 0 / 0
27.06.2016, 17:12
    #39263079
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
Огромное спасибо за скорость ответа!
Видимо имеется ввиду, что промежуток времени поля hmsmsc между записями начал растягиваться?
абсолютно верно. Но чем больше база данных те промежутки плотнее что позволяет думать что от размера базы всетаки это происходит.

и если вы меня перенаправите нафорум фаердака бу признателен.

Вопрос тогда другого плана. при записи UPDATE wcdat SET"
" knock"+db_cylnum+"='"+db_knock+"'"
",imep"+db_cylnum+"='"+db_imep+"'"
",pmax"+db_cylnum+"='"+db_peak+"'"
" WHERE"
" dcycle = '"+db_cycle+"'";

WHERE dcycle = '"+db_cycle+ -|перебирает всю таблицу? Если да ,подскажите пожалуйста как окраничиться последними тремя четырьмя строчками.
...
Рейтинг: 0 / 0
27.06.2016, 19:56
    #39263170
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvik,

У тебя изначально не верный подход к задаче.
Исходя из этого:
komvikдатчики давления диз.двигателя посылают при оборотах 1550 об.мин.( 12 циклов в секунду)
данные которые на выходе я пихаю в таблицу.Если у тебя несколько датчиков, то проще всего рассматривать каждый датчик как отдельного пользователя базы данных. Каждый датчик (его драйвер) открывает свое подключение к базе данных и простыми insert'ами кидает в базу запись типа: "время сейчас", "мой идентификатор", "значение датчика".
Какую СУБД брать под это дело - смотреть по нагрузке, но 12 записей в секунду от одного клиента при сотне одновременных клиентов выдержит практически любая СУБД.

Но! Классическая SQLite это не многопользовательская СУБД и для этой задачи не годится совсем. Если тебе действительно (очень серьезно подумай над этим) действительно надо использовать SQLite в качестве хранилища собранных данных - читать http://sqlite.org/faq.html#q5


Как вариант, сделай ОДИН процесс, который будет опрашивать все датчики по кругу, читать из них текущие значения и писать в базу.


Фраза типа:komvik неизвестно какой цилиндр появится первым. НЕ ДОЛЖНА появляться вообще. Для задачи сбора информации нет никакой разницы какой из датчиков сработает раньше, какой позже. Датчик делает замер и вместе с меткой времени отправляет свое значение в хранилище. Все!
...
Рейтинг: 0 / 0
28.06.2016, 10:05
    #39263455
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
White Owl, Спасибо за участие !
Изначально все так и происходило писались разные таблицы,каждая для своего цилиндра простым инсертом.

Все работает. Но ! Записать не проблемма проблемма показать БЫСТРО ПОКАЗАТЬ то что записалось .24 часа на 12 циклов в секунду плюс 12 а часто и 16 18 24 цилиндров TChart захлёбавался на показе72 графика по миллиону точек .короче это нюансы проги. "Лабораторным путем" :) установленно должна быть одна таблица с апдейтами. использовать только SQLite - не моя прихоть. Так что имеем что имеем.

если можешь помочь советом помоги. просьба была выше .

-как окраничиться последними тремя четырьмя строчками для апдейта .

При использовании инсерта все работает так что утечка памяти исключена .
Я всетаки полагаю что проблемма в апдейте при определённом размере файла начинаются тормоза.
вывод записать базу с быстрым апдейтом.


дополнение или апдейт происходит в последних трёх четырёх строчках... итд.

с ув.
...
Рейтинг: 0 / 0
28.06.2016, 12:54
    #39263685
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvikWhite Owl, Спасибо за участие !
TChart захлёбавался на показе72 графика по миллиону точек .короче это нюансы проги.

1. А зачем ты для графиков скармливаешь так много точек? при этом заполняешь сразу все 72 - они все видны на экране?
2. Сколько записей в таблице wcdat?
3. Какие индексы построены на wcdat + покажи структуру таблицы?
4. Какие данные хранятся в dcycle и сколько уникальных значений в этом поле?

Также тебе лучше использовать бинд-переменные и не склеивать SQL из "кусков".
...
Рейтинг: 0 / 0
28.06.2016, 13:14
    #39263725
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

грешно глумиться над ОЧАПАТКАМИ. хотя поделом, сдесь вам не это.

PPA1. А зачем ты для графиков скармливаешь так много точек? при этом заполняешь сразу все 72 - они все видны на экране?
2. Сколько записей в таблице wcdat?
3. Какие индексы построены на wcdat + покажи структуру таблицы?
4. Какие данные хранятся в dcycle и сколько уникальных значений в этом поле?

Также тебе лучше использовать бинд-переменные и не склеивать SQL из "кусков".


1.требование заказчика. все точки должны прорисовываться.
2. начало и конец рабочей таблицы выкладываю.плюс структуру таблицы.
...
почему бинд-переменные ? если можно поподробнее.
...
Рейтинг: 0 / 0
28.06.2016, 13:15
    #39263726
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

конец таблицы
...
Рейтинг: 0 / 0
28.06.2016, 13:17
    #39263729
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvik,

структура
...
Рейтинг: 0 / 0
28.06.2016, 13:23
    #39263740
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

это рабочий вариант где только инсерт. все пишется и читается. но медленно.
если нужны скрины новой таблицы с апдейтами, или есче что нибудь ,что я упустил .я выложу.
...
Рейтинг: 0 / 0
28.06.2016, 13:37
    #39263777
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvik,

1. Один лям записей это уже много...
ты не показал DDL таблицы и индексов, но я думаю у тебя нет индекса по dcycle
и если его построить ты значительно ускоришь update по этому полю.
но при этом незначительно просядет insert - попробуй на тесте

2. Покажи select которым ты достаешь графики для 72 чартов.
если выкинуть в тесте заполнение TChart и делать только select к базе - тормозов нет?

3. Пример с биндами можешь глянуть тут http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_SQLite_with_FireDAC
(ищи строчку oStmt.Prepare('select * from "Orders" where OrderID > :ID1 and OrderID < :ID2');)
...
Рейтинг: 0 / 0
28.06.2016, 13:51
    #39263801
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

спасибо за помощь ! но выложить я смогу только через полтора часа.
и буду ждать ответа:)
...
Рейтинг: 0 / 0
28.06.2016, 15:24
    #39263926
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

1. действительно лям. и таки да нет индекса. буду тестить.
2. sq = sq + " FROM wcdat_cyl12";
sq = sq + " WHERE strftime('%H:%M:%S',hmsmsc) BETWEEN '"+StartTM+"'AND'"+EndTM+"'";
FDQuery_select->SQL->Text = sq;
FDQuery_select->Open();
дальше
for (int lb =0 ; lb < FDQuery_select->RowsAffected; lb++)
{...
...
DBChart1->Series[35]->AddXY(XVal, (FDQuery_select->FieldByName("pmax")->AsFloat)/10);
FDQuery_select->Next();
..
итд
}
3. гляну обязательно.

пысы.

как же все же по поводу моего вопроса. с последними тремямчетырьмями(автор пытается шутить после перерыва).
...
Рейтинг: 0 / 0
28.06.2016, 15:49
    #39263963
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
komvikPPA,
как же все же по поводу моего вопроса. с последними тремямчетырьмями(автор пытается шутить после перерыва).

1. Для начала построй индекс по dcycle - твой update будет летать.

2. Посчитай сколько времени идет выполнения запроса на выборку из базы для графиков
WHERE strftime('%H:%M:%S',hmsmsc) BETWEEN '"+StartTM+"'AND'"+EndTM+"'";
3. Сколько записей получается в результате запроса в for (int lb =0 ; lb < FDQuery_select->RowsAffected; lb++) ?
4. Если закоментить строчки добавление в графики - DBChart1->Series[35]->AddXY(XVal, (FDQuery_select->FieldByName("pmax")->AsFloat)/10);
сколько времени идет пробежка по FDQuery_select
5. RowsAffected точно легкая проперть и не имеет побочных эффектов?
мы у себя обычно бегаем вот таким способом:
for(FDQuery_select->Open(); !FDQuery_select->Eof; FDQuery_select->Next())
{
...
Рейтинг: 0 / 0
28.06.2016, 16:04
    #39263978
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

Огромное человеческое спсб.
буду пробовать.

но всеж из любопытства есть какаянить идейка по вопросу тричепыре:)
чисто из проф любопытсва:)

з а в а т е т а
PPAfor(FDQuery_select->Open(); !FDQuery_select->Eof; FDQuery_select->Next())
отдельный гранмерси.

всё полезное интересно.
...
Рейтинг: 0 / 0
28.06.2016, 16:06
    #39263981
komvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(не) Правильно настроенный компонент FDconnection для Update таблицы.
PPA,

В догонку . ВЫ случаем не на баракадере ваяете?
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / (не) Правильно настроенный компонент FDconnection для Update таблицы. / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]