powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird + Delphi максимально ускорить выборку из Dataset-a
12 сообщений из 12, страница 1 из 1
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048070
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FB2.5 + Delphi 2007 (FibPlus 7).
Юзер запускает по горячей клавише форму куда сканирует несколько кодов построчно и нажимает кнопку "Применить коды", после чего на другой форме должны заполняться строки чека, согласно отсканированным кодам.
Кодов немного как правило - от 1 до 10, очень редко больше
Задача состоит в том чтобы максимально ускорить добавление строк в чек.
Инфа из БД выбирается из нескольких таблиц во View.
Для ускорения хотел сделать так - выборка из view в FibDataset начинается заранее, когда юзер только запустил по горячей клавише форму и еще даже не начал сканировать. Чтобы к момент окончания сканирования FibDataset уже был готов (порядка 5 тыс. записей).
Потом надо выбрать из 5 тыс. записей всего в среднем 5 записей, коды которых юзер отсканил в Memo на форме.
Хотел сделать locate по FibDataset, но пока фейл:
https://www.sql.ru/forum/1333723/fibplus-ne-v-sostoyanii-sdelat-locate-po-simvolno-cifrovomu-polu

Какой бы теперь вариант мне выбрать чтобы достичь максимальной скорости:
1. Делать insert кодов из Memo в маленькую табличку (предварительно очищая ее), потом делать inner join или merge с view (где вся необходимая инфа - название, производитель и прочие овер 10 полей) по коду.
2. Отбирать из view с параметром
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
For i:= 0 to memo2.lines.Count - 1 do
  if memo2.lines[i] <> '' then
    begin
      ReadQuery2.Close;
      ReadQuery2.SQL.Clear;
      ReadQuery2.SQL.Add('Select * From CurDataMatrixes where SGTIN = :SGTIN');
      ReadQuery2.ParamByName('SGTIN').AsString :=  copy(memo2.lines[i], 1, 27);
      ReadQuery2.ExecQuery;
  end;
...



3. Каким-то образом попытаться все таки решить вопрос c locate по заранее приготовленному FibDataset-у
4. Еще варианты

№ 3 мне кажется должен быть быстрее, так как поиск все таки идет по заранее сформированному набору значений.
№ 1 и 2 плохи тем что выполняются уже ПОСЛЕ сканирования, то есть теряется драгоценное время.
Может еще какие варианты есть для ускорения, подскажите. Есть еще мысль если № 3 не прокатит, ускорить № 1 или 2 за счет создания отдельной таблицы, которая предварительно будет заполняться из view - вроде как выборка из таблицы идет быстрее чем из view, особенно если сделать индекс по коду?

Но все равно как-то что-то не то. Из 5 тыс. записей нужно выбрать всего-то 5-10 как правило. И время теряется дофига чтобы обработать строки в memo. а потом обработать получившийся dataset. Может как-то можно избавить от цикла for для обработки строк Memo и сразу считывать все его содержимое в BLOB и в уже в запросе как то парсить?

В общем подскажите пожалуйста, как бы вы решили такую задачу оптимально
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048090
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

какой у вас опыт разработки если не секрет?
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048122
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопросы снимаются, вариант № 3 сработал
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048129
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010как бы вы решили такую задачу оптимально

Я бы выкинул "нескольких таблиц во View". Для задачи, как она поставлена, это не нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048166
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выборка "от 1 до 10" записей безо всяких датасетов обычно выполняется быстрее, чем система успеет отрисовать закрытие окошка с кодами.
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048190
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSery, круто конечно. Только как вот интересно параметры мгновенно попадут из Memo базу в качестве параметров запроса? Потом опять таки результат запроса надо обработать и визуализировать (у меня VST используется, а не гриды).
Я не знаю может есть конечно технология как считывать напрямую в базу безо всяких memo? Либо как-то максимально это ускорить.
Но пока не представляю как мне бы удалось конкретно в моем случае реализовать


авторВыборка "от 1 до 10" записей безо всяких датасетов обычно выполняется быстрее, чем система успеет отрисовать закрытие окошка с кодами
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048198
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010Но пока не представляю как мне бы удалось конкретно в моем случае реализовать

Время нанять программиста. Или начать читать статьи на ibase.ru.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048208
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Да и так работает, я же написал. Просто интересно что за нано технологии у WildSery которые делают выборку и выводят результат, пока ещё не успела закрыться форма для считывания кодов
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048212
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
арт2010
и визуализировать (у меня VST используется, а не гриды

Тем более датасет нафик не нужен.
Пустую строку с новым кодом можешь показать сразу, а значимые поля записи показать, когда они будут получены, хоть в параллельной нити.
Объемы данных у тебя мизерные, непонятно вообще цель оптимизаций.
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048217
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
арт2010
что за нано технологии у WildSery которые делают выборку


При закрытии формы для считывания ты уже знаешь, сколько позиций, эту инфу тупо передаешь своему VST, сразу же появляется нужное количество ветвей. В событии OnGetText ячейки дерева тупо обращаешься к подготовленному запросу компонента TpFIBQuery, передавая в качестве параметра код, соответствующий ветке дерева. Считанное значение кладешь в кэш, чтобы в следующий раз в OnGetText не лезть снова в базу.
Можно не по одной записи считывать, а скопом, передав список кодов.
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048218
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще, сие дельфийская тема, не фаербёрдная.
...
Рейтинг: 0 / 0
FireBird + Delphi максимально ускорить выборку из Dataset-a
    #40048219
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010
Просто интересно что за нано технологии у WildSery которые делают выборку и выводят результат, пока ещё не успела закрыться форма для считывания кодов
Никаких нанотехнологий, обычные запросы к серверу отрабатывают обычным TQuery за милисекунды.
... но если за десять дён, одному не справиться, тут помощник нужен (ц)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FireBird + Delphi максимально ускорить выборку из Dataset-a
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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