DFD, CacheTPSABC - не понял

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

DFD, CacheTPSABC - не понял

Сообщение Андрей » 21 Май 2019, 2:04

Начал знакомиться с DFD. Смотрю пример CacheTPSABC. "By
designating a TopSpeed file as the global file to load on startup, the template implicitly creates an In-
Memory dynamic table that does not have to be defined in the data dictionary."
Ух ты, как раз мне подобное нужно. Проверяю сей пример и.... не вижу никакого кэширования.
Добавляю запись в якобы кэшированном через InMemory "department" - тут же вижу в department.tps ее.
Написал кусочек кода добавления нескольких сотен записей - вижу тормоза, явно никакого InMemory нет.

Как то не так понимаю ?

kreator
Ветеран
Сообщения: 3248
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

DFD, CacheTPSABC - не понял

Сообщение kreator » 21 Май 2019, 11:10

Не касаемо DFD, IMDD. Кэширование и In-Memory актуально на операциях чтения. Как в приведённом Вами фрагменте справки - в начале работы программы данные затаскиваются в память и чтение идёт уже из памяти. А если Вы пишете, то всё равно дисковая система тормозит. Я думаю, SV революцию сотворить не судьба. Ещё пример. Режим "In-Memory" в SQL подразумевает отсутствие операций записи на диск (в том или ином виде).
We are hard at work… for you. :)

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

DFD, CacheTPSABC - не понял

Сообщение Андрей » 21 Май 2019, 13:46

kreator писал(а):
21 Май 2019, 11:10
Не касаемо DFD, IMDD. Кэширование и In-Memory актуально на операциях чтения. Как в приведённом Вами фрагменте справки - в начале работы программы данные затаскиваются в память и чтение идёт уже из памяти. А если Вы пишете, то всё равно дисковая система тормозит. Я думаю, SV революцию сотворить не судьба. Ещё пример. Режим "In-Memory" в SQL подразумевает отсутствие операций записи на диск (в том или ином виде).
Для SQL может и так. Но просто InMemory в словаре дает же записывать в память, при последующем сохранении при выходе из программы или вызова метода сохранения файла.... ?

Все же сомневаюсь, что на чтение то даже это работает (я про пример этот) как проверить ? Попробовал после открытия "кэшированной" таблицы изменить запись в файле через TopScan, после вызова ViewRecords даже для другой записи ! вижу тут же измененную запись.

kreator
Ветеран
Сообщения: 3248
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

DFD, CacheTPSABC - не понял

Сообщение kreator » 21 Май 2019, 14:24

Андрей писал(а):
21 Май 2019, 13:46
Но просто InMemory в словаре дает же записывать в память, при последующем сохранении при выходе из программы или вызова метода сохранения файла.... ?
Может и имеет смысл при однопользовательской работе. Или при каких-то специфических сценариях. А в реальной работе зачем хранить изменения в оперативной памяти локального компа?
Судя по описанию DFD, кэширование возможно с использованием IMDD. Во-всяком случае, я так понял. Динамически создаёте таблицу с типом "In-Memory", переливаете туда данные из tps, и работаете быстро. А как ещё?
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4003
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

DFD, CacheTPSABC - не понял

Сообщение Игорь Столяров » 21 Май 2019, 14:42

kreator писал(а):
21 Май 2019, 14:24
Или при каких-то специфических сценариях.
Ну, например, сценарий отложенной записи. Предположим навернули, что при закрытии накладной - нужно обновить
десятки (или сотни) записей содержания. Что бы карточка закрывалась быстро - пишем все изменения в файл IMDD.
И потом раз в N (лучше даже K) секунд или при закрытии программы запускается поток, который молча пишет из IMDD в TPS.
Работает шустро и обман практически не заметен. ;)
«V» значит Вендетта !

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

DFD, CacheTPSABC - не понял

Сообщение Андрей » 21 Май 2019, 14:43

kreator писал(а):
21 Май 2019, 14:24
Андрей писал(а):
21 Май 2019, 13:46
Но просто InMemory в словаре дает же записывать в память, при последующем сохранении при выходе из программы или вызова метода сохранения файла.... ?
Может и имеет смысл при однопользовательской работе. Или при каких-то специфических сценариях. А в реальной работе зачем хранить изменения в оперативной памяти локального компа?
Судя по описанию DFD, кэширование возможно с использованием IMDD. Во-всяком случае, я так понял. Динамически создаёте таблицу с типом "In-Memory", переливаете туда данные из tps, и работаете быстро. А как ещё?
Это то так, вот первый их пример (CACHE )
This core application demonstrates loading a TopSpeed table, which not defined in the dictionary, into an In-Memory table defined in the dictionary, using the DynFile class methods via the template support.
А вот этот пример, который меня заинтересовал
CacheTPSABC
This application demonstrates an alternate template configuration from the core CACHE application. By
designating a TopSpeed file as the global file to load on startup, the template implicitly creates an InMemory dynamic table that does not have to be defined in the data dictionary. The core example had an
In-Memory table defined in the dictionary, but referred to the TopSpeed table as an external source.
Both applications perform the same function, but we are showing the flexibility of dynamic file
configuration.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1182
Зарегистрирован: 06 Ноябрь 2014, 12:48

DFD, CacheTPSABC - не понял

Сообщение finsoftrz » 21 Май 2019, 15:07

Игорь Столяров писал(а):
21 Май 2019, 14:42
kreator писал(а):
21 Май 2019, 14:24
Или при каких-то специфических сценариях.
Ну, например, сценарий отложенной записи. Предположим навернули, что при закрытии накладной - нужно обновить
десятки (или сотни) записей содержания. Что бы карточка закрывалась быстро - пишем все изменения в файл IMDD.
И потом раз в N (лучше даже K) секунд или при закрытии программы запускается поток, который молча пишет из IMDD в TPS.
Работает шустро и обман практически не заметен. ;)
IMDD можно использовать для буферизации изменений. Например, в накладной вносим разные изменения в строках, делая это все в IMDD, потом жмем кнопку Сохранить и сохраняем все изменения сразу. Как это в 1с делают. Это уже обсуждали, такой подход имеет свои плюсы и минусы. Основной плюс - упрощение логики работы программы.
С точки зрения кэширования данных правильно в actian zen сделано (будем привыкать так называть этот продукт...). Наша программа ничего о кэшировании не знает, все делает автоматически движок. Точнее, программа может этим дополнительно управлять, указывая, какие таблицы кэшировать. Так, если не ошибаюсь, это все выглядит. Попытка задействовать дополнительные декларации IMDD в самом приложении больше похоже на костыль. Как-то это кисло с точки зрения архитектуры системы...
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1182
Зарегистрирован: 06 Ноябрь 2014, 12:48

DFD, CacheTPSABC - не понял

Сообщение finsoftrz » 21 Май 2019, 15:10

Наверно, несколько непонятно про actian zen написал. Это когда сервер на выделенном компьютере. Таблицы могут автоматически кэшироваться на клиентском компьютере, где работает наше приложение. И автоматически синхронизироваться с сервером по мере внесения в них изменений.
Рязань решает.

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

DFD, CacheTPSABC - не понял

Сообщение Андрей » 21 Май 2019, 15:14

Игорь Столяров писал(а):
21 Май 2019, 14:42
десятки (или сотни) записей содержания
Даже если не сотни.... правильно ли я понимаю, что в Clarion нет до сих пор обработки отказа от сохранения стандартного док-та с шапкой и табличным полем ?
Добавляем материнскую запись запись через FORM и в этой же форме сразу начинаем вводить табличную часть (дочерние записи). А потом передумали сохранять - но дочерние то записи уже остались в базе "сиротами" ? А вот если делаем добавление дочерних записей через InMemory, то следов не останется.... Или подчистку можно через Relation сделать ? Что то кажется не работает через Relation...

Андрей
Старожил
Сообщения: 250
Зарегистрирован: 30 Октябрь 2005, 3:58

DFD, CacheTPSABC - не понял

Сообщение Андрей » 21 Май 2019, 15:16

А вот уже finsoftrz написал ...

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4003
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

DFD, CacheTPSABC - не понял

Сообщение Игорь Столяров » 21 Май 2019, 15:29

Андрей писал(а):
21 Май 2019, 15:14
А потом передумали сохранять - но дочерние то записи уже остались в базе "сиротами" ?
Пардон - но здесь просто нужно корректно описать в словаре связь между родительским и дочерним списком, и при отказе
добавления шапки накладной - код шаблонов автоматически удалит и добавленные строки содержания. Без проблем.

Есть немного более интересная задача. Когда нужно при отказе от сохранения изменений в накладной - отменить все изменения
в содержании (в т.ч. и добавления / удаления строк содержания). Вот здесь уже хорошо использовать IMDD, хотя можно и проще
через объявление очереди с LIKE … ;)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4003
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

DFD, CacheTPSABC - не понял

Сообщение Игорь Столяров » 21 Май 2019, 15:32

finsoftrz писал(а):
21 Май 2019, 15:07
Как-то это кисло с точки зрения архитектуры системы...
Ну так ведь не от тучного изобилия прикручиваются костыли к TPS … ;)
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1182
Зарегистрирован: 06 Ноябрь 2014, 12:48

DFD, CacheTPSABC - не понял

Сообщение finsoftrz » 21 Май 2019, 15:43

Игорь Столяров писал(а):
21 Май 2019, 15:32
finsoftrz писал(а):
21 Май 2019, 15:07
Как-то это кисло с точки зрения архитектуры системы...
Ну так ведь не от тучного изобилия прикручиваются костыли к TPS … ;)
Это не для tps, а для sql прежде всего предлагается... И не только в кларионе.
Рязань решает.

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1182
Зарегистрирован: 06 Ноябрь 2014, 12:48

DFD, CacheTPSABC - не понял

Сообщение finsoftrz » 21 Май 2019, 15:50

Игорь Столяров писал(а):
21 Май 2019, 15:29
Есть немного более интересная задача. Когда нужно при отказе от сохранения изменений в накладной - отменить все изменения
в содержании (в т.ч. и добавления / удаления строк содержания). Вот здесь уже хорошо использовать IMDD, хотя можно и проще
через объявление очереди с LIKE … ;)
Ага, через очередь. Есть еще более интересная задача, когда при изменении реквизита шапки накладной надо сделать изменения во все строки. У меня это называется "критические реквизиты документа", их шаблоны автоматически отрабатывают. На самом деле с накладной вопрос довольно сложный. Если делать через IMDD, то все упрощается, но теряется итерактивность - другие пользователи не видят вносимых изменений, пока не будет сохранена вся накладная. А сохранение может происходить в других условиях по сравнением со временем внесения изменения в строки.
Рязань решает.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4003
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

DFD, CacheTPSABC - не понял

Сообщение Игорь Столяров » 21 Май 2019, 16:04

finsoftrz писал(а):
21 Май 2019, 15:50
при изменении реквизита шапки накладной надо сделать изменения во все строки
Т.е. тупо прокрутить, присвоить и сохранить. Как раз задача для отложенной записи.
А то, что эти изменения попадут на диск с запозданием в несколько секунд - не проблема.
Если конечно речь идёт не о запуске ракеты с Байконура … ;)
«V» значит Вендетта !

Ответить