powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Delphi, FireBird создать таблицу в памяти клиента
25 сообщений из 368, страница 9 из 15
Delphi, FireBird создать таблицу в памяти клиента
    #39280365
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogвот есть ли преимущество перед звездочкой?

есть - это более "fail early" и более определённе поведение

если ты потом таблицу поменяешь и в ней убьются некоторые столбцы - то у тебя "фиксированный2 запрос явно и сразу выдаст ошибку, а "звёздочка" сделает вид что так и хорошо и программа споткнеся уже где-то сильно позже.

но вот тупой пример с потолка - мы обновляем данные по массиву record'ов, соответсвенно поля таблицы соответсвуют переменным членам record'a. Если поля в SQL-запросе заданы жестко (формируются из типа record'a) и какое-то из полей пропало в результате неудачного развития проги, сервер сразу скажет "нет такого столбца, иди лесом". А в случае звёздочки этого поля просто не будет в запросе. Предположим, далее ты для каждой строки перебираешь все столбцы запроса и их значения запихиваешь в MyRecordArray[i] в соотв. поля - тогда поле одноименное исчезнутому столбцу ты просто пропустишь и сам этого не заметишь, оно просто не будет обновляться из БД и получить "мусор в памяти".

пример с потолка, но идею ругани, возможно отражает

----

Кстати, в достаточно современной Дельфи пробег по SQL-запросу можно организовать не только как FieldXXX.AsInteger и потом Query.Next, но иногда и таким трюком:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 

type t_0001 = record (* поля запроса и их типы *) end;
var row; t_0001;
begin
....
   for row in MyQuery1.All<t_0001> do begin
        xxxxx := row.FieldX;
        yyyy := row.ColumnY;
        ..........
   end;
   MyQuery1.Close;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280380
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТолько вот он подымет сложность алгоритма до O(N^2)...

В смысле, будут пробеги по всей таблице главной базы для каждой записи локальной? Ну да, зато сервак не тормозит :)

2 Di_LIne
>У тебя чё, состав полей в табле меняется, как настрояниее у бушек, по 5 раз на дню?

Нет, но меньше действий - меньше вероятность ошибиться/забыть. А если таких таблиц сто?

>А от разовых 6 килобайт - так пипец, как вся сеть ляжет.

От разовых нет, а ну как они раз в секунду перегоняются? От ситуации зависит

>- А ты и не дергай каждый раз. :-)
Справочник он и в африке справочник. В данном случае для проверки дельт.

Опять же, по ситуации. У тебя шаблон использования такой, у кого-то - другой...

>- А есле полей нуна не под 600, а 500? Тогда чё?
Бушь в каждой итерации тягать излишки на клиента, напрягая сеть и сервер.

Ежели не подтягивать все записи разом, то оверхед мб незначительный.

>И тырканье "селект * фром Табля" больше грит о лености прогера и его не желания думать головом ДО.

Леность - двигатель прогресса :)

В общем, не думаю, что запрет на применение "*" должен иметь статус непогрешимой заповеди. Лучше уж в каждом случае руководствоваться здравым смыслом и целесообразностью.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280390
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Го-стхиЛеность - двигатель прогресса :)

- Брехня! (из кины про Неуловимых)
Миф для самоуспокоения лохов и гнилая отмаска, которая не катит. :-)

Прогресс двигает только шевеление извилины.
Но ни как не коденг "по шаблону из книшки".
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280694
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280761
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокAriochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами

И вот о чем в моей ветке все эти люди спорят? О_о И кто эти люди? о_О
Шучу, шучу. Я не все понимаю из ваших диалогов, но интересно да. На подкорку пишется, время придет вспонится, осмыслится.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280804
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отчитываюсь, кому интересно:
1. Сдвинув папироску в уголок рта поставил ультиматум начальству: Сейчас импортируем КАК ЕСТЬ. Паралельно полностью переделываю импорт. (дали срок две недели, хмыкнул сказал, что за две недели они получат очередную заплатку, но сам думаю, что впринципе, если не отвлекаться и обложиться грамотными примерами ... управлюсь)
2. Покурили с 1Сником, у него там в 1С есть "ПланВыгрузки". Т.е. при выходе из 1С бухгалтера внесшего свежие проводки, (теоретически) он выгружает все изменения в файл (XML) Который я считываю. Собственно ЭТО ОЧЕНЬ БОЛЬШОЕ ПОДСПОРЬЕ для меня.
2.1 не лезу медленным COM соединением к базам.
2.2 не лезу в базы в которых нет изменений.
2.3 получаю болеменее актуальные данные, а не тыркаю базу на проверки всех проводок за период.

Вот баз 1С у нас большинство. Жду значит, решение от 1Сника до пятницы. Посмотрю в каком формате он может выкидывать данные и насколько эти данные актуальны.

Вопрос к знающим(треп на тему приветствуется):
Допустим есть у меня 200 потенциальных файлов на импорт (формат не суть, любой разберу, но скорей всего будет XML). Которые надо проверить, отфильтровать и только потом влить в основные таблички базы.

Беда в том, что файлы появляются не одномоментно. Т.е. если бы они были все разом сформированы, считал их в TempTable, обработал процедурами и всё.

Но, на деле будет так: появился файл, я его увидел, тутже кинулся считал. Кинул в TempTable обрабатываю... тут появляется еще 4 файла, один из этой же конторы, 3 других из других.... И чего бы сделать, в коем-то веке правильного?
1. Дать какой-то индекс данным из определенного файла и работать с этим куском (паралельно добавляя в TempTable другие файлы и обрабатывать их, каждый отдельно по индексу?
2. Под каждый кусок импорта создавать временную таблицу? И расстреливать ее по окончании обработки?
3. Другие варианты?
(тут кто-то говорил про какие-то ГлобалТмпТабле... вроде, но мне не до них было, сейчас найду сообщение еще про них почитаю...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280818
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

фишка GTT в том что сами таблицы (метаданные) постоянные их не надо каждый раз создавать и удалять, а вот данные в них временные: либо на время сессии, либо на время транзакции. Соответственно каждая сессия/транзакция видит и работает только со своими данными.

Почитать можно здесь и здесь
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280819
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще вопрос, на сколько я правильно понял механизм:

Есть Query для чтения. Дал ему отдельную транзакцию (read)

"write
nowait
rec_version
read_committed
"
Select в query забит жестко, не изменяется никогда.
Стартую транзакцию.
Выполняю Запрос.
(Жарптица строит план, выполняет, отдает данные)
Получаю данные обрабатываю...
Закрываю транзакцию. (Вот здесь, ЖарПтичка похоронит план да? и не будет держать его в кэше? Я правильно понял?)

( как правильно? Стартавать транзакцию Реад перед выполнением запроса, или стартануть ее скажем при открытии формы и обрывать по закрытию формы? Как дольше держать план выполнения запроса в кэше?)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280821
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

1. план получается при препарировании запроса. Поэтому до тех пор пока ты не грохнешь свой query, или не закроешь коннект, или не сделаешь ему повторный prepare, или не вызовешь unprepare с планом ничего не будет.
2. Если у тебя основные действия будут делаться в ХП, то планы её внутренних запросов кешируются во время загрузки процедуры в кеш метаданных, который для классика будет жить до конца коннекта.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280835
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

2. Если у тебя основные действия будут делаться в ХП, то планы её...
Понял. Спасибо. Но нет это не ХП, это справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят (ну тут еще и DbGridEh, но пока хочу правильно сделать сами запросы, выжать максимум). Т.е. при закрытии транзакции Птичка план оставит до поры до времени? (FB Classic 2.1)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280838
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

фишка GTT в том что сами таблицы (метаданные) постоянные их не надо каждый раз создавать и удалять, а вот данные в них временные: либо на время сессии, либо на время транзакции. Соответственно каждая сессия/транзакция видит и работает только со своими данными.

Почитать можно здесь и здесь

(похоже) То что доктор прописал. Ушел эксперементировать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280844
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

план запроса никак не связан с транзакцией и временем её жизни
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280846
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по GTT? (ответ на вопрос сэкономит мне час на эксперименты)
Создавая CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT в одной копии программы, следить чтоб другая копия одновременно создавала CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT_1

Или это проблема сервера? И я в каждой копии создаю CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT и CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT и они не пересекуться (для каждой копии программы свой набор данных)?

А как это скажется на мусоре? А производительность сильно просядет от GTT (это ведь надо создать ГТтаблю. Запихать туда данные. Желательно проиндексировать... выполнить пару ХП... грохнуть ГТтаблю)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280852
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попутный вопрос: ГТТ создается в памяти (ну если логику включить)? Какая интересно логика у разработчиков и как это конкретно работает...


Форум КЛАСС. Где я раньше был? Спасибо вам ребята. Все пинки в основном в нужную сторону
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280865
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogПопутный вопрос: ГТТ создается в памяти (ну если логику включить)? Какая интересно логика у разработчиков и как это конкретно работает...

Вопрос снят. Нашел сообщение Dimitr где то в других постах "для начала они в страничном кеше ФБ, как и любые другие таблицы. Затем в кеше оси. И уже потом на диске."
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280869
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

надо не просто на буквы глядеть, но и хоть чуток разобраться что тебе пишут. GTT создаётся ровно один раз и не в твоей программе, а в любом средстве администрирования IBExpert, isql и т.д. Метаданные (поля и их типы) общие, а данные раздельные. И в плане мусора там всё норм. Данные GTT хранится не в самом файле БД, а во временных файлах или оперативной памяти. За временем жизни временных файлов следит сам FB. Ну релиз ноты почитай уже.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280921
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

надо не просто на буквы глядеть, но и хоть чуток разобраться что тебе пишут. GTT создаётся ровно один раз и не в твоей программе, а в любом средстве администрирования IBExpert, isql и т.д. Метаданные (поля и их типы) общие, а данные раздельные. И в плане мусора там всё норм. Данные GTT хранится не в самом файле БД, а во временных файлах или оперативной памяти. За временем жизни временных файлов следит сам FB. Ну релиз ноты почитай уже.

Хм. Уже пинают. И это еще Di_LIne и Arioch спят... те выйдут вообще на ноль поделят ,проиндексируют и спишут как ненужную GTTешечку.

Денис - да я вкурсе, что надо читать. Что никто конкретную задачу не разгребет кроме недотепы-автора. Но руки и глаза разбегаются, времени катастрофически не хватает. Я вот сюда (на форум) пришел с одной задачкой... а напинали так, что я сижу и перелопачиваю свой код вообще в других модулях. И ДА, помогает.))) Тема GTT в голове, но руки не доходят, ну и кидаю вопросы которые могут возникнуть. За тычок в сторону GTT признателен. За объяснения, даже сквозь зубы СПАСИБИЩЕ. Твои ссылки про GTT прочитал по диагонали. Пока руки заняты перебивкой всяких Query вертятся вопросы, вот и кидаю их, а вдруг кто ответит и хоть часть инфы копать не надо будет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280927
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280928
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы вот сам про GTT когда бы узнал, и что это применимо к моим задачам. А так раз пнули, два пнули, башкой в унитаз макнули... О тооочно. Во! то что нужно - GTT)))) Так что не стесняйтесь)))

Уяснить надо много. ОЧЕНЬ МНОГО в короткий срок: от правильной конфигурации Птицы, до правильного написания кода в приложении. Чередую задачи, чтоб не свихнуться)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280934
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Го-стхиdgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

Яндексы-Хренадексы не вкурсе запроса "firebird разрядная сетка". Ладно, отложим понимание этого. Или подскажете со временем или... или Яндекс вспотеет в выходные.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280950
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокAriochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами

копай в обе стороны от 14633271
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280963
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogХм. Уже пинают. И это еще Di_LIne и Arioch спят... те выйдут вообще на ноль поделят ,проиндексируют и спишут как ненужную GTTешечку.

щаззз

стану я попусту индексировать то, что все равно под списание? а потом индексы еще чистить?
так спишешься бе церемоний! :-P
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280967
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

если поделить ТСа на 0, то он в теории должен в бесконечность превратится
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280968
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Го-стхиdgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

Просто я не могу описать все задачи. Отсюда конечно непонимание... Эти query еще срабатывают после Post в табличке. И пересобирают PickListы. Поэтому если уж залез бух править эту табличку, то вызываются эти запросы часто. Переписал, пересобрал. За одно нашел не проиндексированный справочник))) Чисто субъективно, все начало работать быстрее.

Господа ээээ... НОРМАЛЬНЫЕ программисты, (одел каску, залажу под стол... ибо можете ведь и покалечить) PfibDataset.FetchALL это не по феншую??? Это зло? (110 тысяч записей выкидывает, да тормозит. Но они все прям позарез нужны бухгалтеру, "ВСЕ И СРАЗУ!")
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280973
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogГо-стхипропущено...

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

Яндексы-Хренадексы не вкурсе запроса "firebird разрядная сетка". Ладно, отложим

Он имеет в виду, что сколько бы у тебя в запросе строк ВСЕГО не было - на экран влезет несколько десятков, в память подтянется (чтобы быть под руками заранее) может быть еще пара сотен. И всё.

Остальные данные как правило гриду не нужны, пока юзер не прокрутит его сильно-сильно вниз (что в 90% случаев не делается, люди не читают строки тысячами как правило, а уточняют отбор)

Исключение - если ты например в гриде включил какие-нибудь навороты типа "показывать общее количество строк" - тогда да, пока всю выборку до конца не вычитает, рисоваться не начнёт.
...
Рейтинг: 0 / 0
25 сообщений из 368, страница 9 из 15
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Delphi, FireBird создать таблицу в памяти клиента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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