Btrieve и clarion

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
Ветеран
Сообщения: 1116
Зарегистрирован: 06 Ноябрь 2014, 12:48

Btrieve и clarion

Сообщение finsoftrz » 27 Январь 2019, 21:29

Создам отдельную тему, в которой можно поговорить про работу с btrieve из клариона. Btrieve - это первоначальное название менеджера записей. Я подразумеваю под ним транзакционную модель доступа к данным (isam) в более поздних версиях продукта, носящих название PervasiveSQL или Actian Zen DataBase. Чтобы была понятна терминология.

Некоторые спрашивали, какой смысл сейчас смотреть в сторону btrieve. Скажу по себе. Если есть хорошо работающее приложение со встроенным tps, но встает вопрос об ограничениях масштабируемости по размеру базы данных или количеству работающих пользователей, достаточно просто "на лету" подменить драйвер на btrieve. Практически полная совместимость по коду и архитектуре. Все, что разработано для tps, актуально и при работе с btrieve. И не требуется даже отдельная сборка (версия) приложения.
Рязань решает.

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

Btrieve и clarion

Сообщение finsoftrz » 27 Январь 2019, 21:39

Заметил, что btrieve более чувствителен по скорости работы к первому запуску, чем tps. Как я понимаю, он использует свою реализацию кэша и не использует кэширование винды. Также медленной операцией является первое открытие таблиц (относительно всех пользователей). Когда-то читал про "прогрев кэша". То есть запускаем обработку, которая просто читает наиболее восстребованные записи из базы данных. Это оседает в кэше и при работе других пользователей скорость увеличивается по субъективному восприятию на порядок. Поэтому включил в приложении данный механизм. Он также полезен и для tps для более менее серьезных баз от миллиона записей. Прогрев кэша можно включать как вручную, так и по расписанию в автоматическом режиме.
Вложения
cache.jpg
Рязань решает.

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

Btrieve и clarion

Сообщение finsoftrz » 27 Январь 2019, 21:48

Я написал про кэширование "на сервере". Кстати, в последних версиях btrieve (actian zen db) пишут о возможности кэширования отдельных таблиц с помощью утилиты в режиме командной строки. Думаю, что это касается механизма кэширования "на клиенте", которое появилось еще в pervasiveSQL 8 версии, если не ошибаюсь. То есть, если база данных находится на одном компьютере, а приложение работает на другом (клиент-серверная архитектура), то можно таким способом закачать нужные таблицы на клиента. И в дальнейшем информация будет читаться без обращения к серверу. Как я понимаю, btrieve синхронизирует информацию автоматически при изменениях на сервере. Наше приложение в этом участие не принимает, оно просто работает с записями, как обычно.
Рязань решает.

Аватара пользователя
morkovin
Ветеран
Сообщения: 594
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Btrieve и clarion

Сообщение morkovin » 28 Январь 2019, 5:46

оседает в кэше и при работе других пользователей скорость увеличивается по субъективному восприятию на порядок. Поэтому включил в приложении данный механизм
Когда-то делал для этого отдельную прогу - висела в трее и периодически дергала сервер (MSSQL). После перехода на терминальный сервер и более мощное железо надобность в этом отпала.
WBR, morkovin

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

Btrieve и clarion

Сообщение finsoftrz » 28 Январь 2019, 10:40

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

PS. Немного не в тему. А ms sql на том же сервере, вместе с терминалом? Насколько я знаю, оба прожорливы по ресурсам. Пользователей много?
Рязань решает.

Аватара пользователя
morkovin
Ветеран
Сообщения: 594
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Btrieve и clarion

Сообщение morkovin » 28 Январь 2019, 10:52

ms sql на том же сервере, вместе с терминалом? Насколько я знаю, оба прожорливы по ресурсам. Пользователей много?
Вcё на одном. Win2008Enterpaise x 64. i7,32gb. макс. 15-20 users. Загрузка ЦП не более 10%, памяти 20%. БД около 500мб.
WBR, morkovin

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

Btrieve и clarion

Сообщение finsoftrz » 28 Январь 2019, 11:14

Глянул в розничной сети, у них база на сервере около 4.5 ГБ плюс логи около 4 ГБ. Это на tps. Под сервер какой-то самосбор с win7. Терминальный доступ для пользователей в офисе и некоторых пользователей из магазинов через интернет. Остальные через ip-сервер. Большие таблицы, которые критичны, перешагнули 1 ГБ, и рабочая, и архив. Поэтому вся эта тема с btrieve всплыла. Скорость работы сейчас несколько напрягает только на парционном учете по всей номенклатуре. Остальное шустро бегает. В принципе, подготовлен уже расчет по средним ценам, сейчас тестируется. Должен нормализовать узкое место. Вопрос только с размером базы, много пользователей молотят данные на ввод.
Рязань решает.

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

Btrieve и clarion

Сообщение Игорь Столяров » 28 Январь 2019, 12:13

finsoftrz писал(а):
27 Январь 2019, 21:29
Практически полная совместимость по коду и архитектуре.
Только при использовании базовых типов данных ! ;) Например, вопросы с популярными BLOB и DECIMAL полями - надо разруливать.
Также нужно учесть, что в транзакции могут быть задействованы таблицы только с одним видом драйвера, и, что при работе через
File{Prop:...} драйвера по разному возвращают некоторые значения ...
«V» значит Вендетта !

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

Btrieve и clarion

Сообщение finsoftrz » 28 Январь 2019, 12:40

Это все понятно, я сразу оговорился, что в моем случае. В 2004 году интуиция сработала, аж самому страшно... :-)
Рязань решает.

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

Btrieve и clarion

Сообщение Игорь Столяров » 28 Январь 2019, 13:46

finsoftrz писал(а):
28 Январь 2019, 12:40
В 2004 году интуиция сработала
Я бы это назвал безысходностью. ;)
При росте объёма БД (и/или кол-во пользователей) нет другого варианта в Clarion, что бы относительно быстро получить
работающее приложение c лучшими показателями чем TPS. Переход на SQL всё-таки требует переделки всего приложения,
чего избалованные шаблонами программисты Clarion - не любят. Да и сама процедура запуска приложения - будет уже не "коробочной".
При этом огромный плюс Btrieve - простота запуска и обслуживания, наличие релизов "без покупки" и не привередливость к ресурсам.
«V» значит Вендетта !

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

Btrieve и clarion

Сообщение finsoftrz » 28 Январь 2019, 15:09

Почему безысходностью? Тогда продумывалась вся концепция. Был выбор, например, дробить базу на отдельные файлы по периодам, как когда-то делал еще под dos. Но это имеет свои неудобства, в частности, не прозрачно для шаблонов. А хотелось, чтобы процесс разработки был максимально автоматизирован. К чему жесткость кларионовского словаря и предрасполагает. Поэтому решено было потенциально крупные таблицы разделить на 2 физических файла идентичной структуры, рабочую часть и архив. Идея была позаимствована из одного старого приложения на акцесс. Сейчас таких таблиц две - движение товаров и кассовые чеки с ккм. Еще лог, он безразмерный, это отдельная тема. Практически для всех клиентов этого хватает за глаза. В качестве рабочей платформы была ориентировка на терминальные сервера, с которыми я работал с 2000 года и понимал их преимущества.
Дальше был вопрос о масштабируемости. А вдруг кто-то вырастет или появится жирный. Было потрачено время на изучение работы с sql серверами. Но быстро стало понятно, что другая архитектура и не встраивается в нужную концепцию. Да и вообще, прикручено к клариону сбоку. Оставался битрив-первасив. С tps были отличия в некоторых типах данных, значит их не надо использовать. Сделал на уровне автоматической пересборки проекта, заменяя декларации шаблонами. Но для большого проекта делать постоянные пересборки и выравнивать версии для тестирования накладно. Отложил, убедив себя, что и tps на терминале за глаза.
А относительно недавно сложилось. Оказалось, что драйвер можно изменять при входе в программу без пересборки проекта и клиент на это дело нарисовался...
Рязань решает.

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 846
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Btrieve и clarion

Сообщение RaFaeL » 28 Январь 2019, 16:25

Игорь Столяров писал(а):
28 Январь 2019, 13:46
Переход на SQL всё-таки требует переделки всего приложения,
чего избалованные шаблонами программисты Clarion - не любят. Да и сама процедура запуска приложения - будет уже не "коробочной".
Это почему? )

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

Btrieve и clarion

Сообщение Игорь Столяров » 28 Январь 2019, 18:11

RaFaeL писал(а):
28 Январь 2019, 16:25
Это почему? )
Ну вот предположим, делаете Вы программу с использованием Microsoft.SQL или FireBird.
Понравилось некому Василию из села Большые Салы описание Вашей программы на сайте.
Как ему её посмотреть хотя бы ? Как установить SQL или настроить ODBC источники - Вы ему никогда не сможете объяснить.

Т.е. нет варианта "скачал - нажал - установил - работает". И при этом ещё надо учитывать, что при установке сервиса
Microsoft.SQL (и прочих сопутствующих .NET) компьютер Василия может просто сдохнуть и он будет иметь к Вам вопросы
(или Вас иметь вопросами - что тоже досадно).

Btrieve - в этом плане приятней. Во первых, можно абсолютно даром собирать для таких случаев вариант программы с TPS.
Во вторых - сам Btrieve достаточно лёгкий, устанавливается просто и абсолютно не требует какой-либо настройки.
«V» значит Вендетта !

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

Btrieve и clarion

Сообщение finsoftrz » 28 Январь 2019, 18:35

Я вот гоняю тесты на расчете доходности по средним ценам. Берем за полный месяц, остатки имеются на 1 число, дальше считаем по документам. Считаем маржу с деталировкой по товарам и операциям (приходы, отгрузки, перемещения, списания, возвраты, наценка, остатки и т.п.), затем группируем по дереву товарных групп, подсчитываем итоги по операциям по каждому уровню групп. После перезагрузки компьютера первый раз очень долго, порядка 12 мин. Повторно получаем уже примерно 1 мин 20 сек. Долго происходит первичное чтение документов на непрогретом кэше. Прогрев кэша путем чтения по записям специальной процедурой, про которую я писал, тоже не быстро. Тут бы как раз пригодился расширенный get для чтения пакетами записей, наверно. Или какая-нибудь утилита, которая умеет засасывать записи в кэш страницами...
Рязань решает.

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

Btrieve и clarion

Сообщение Игорь Столяров » 28 Январь 2019, 18:55

finsoftrz писал(а):
28 Январь 2019, 18:35
После перезагрузки компьютера первый раз очень долго, порядка 12 мин.
Если это описание про Btrieve - то непонятно. Возможно следует увеличить (а лучше снять ограничение) на кеш в настройке P.SQL.
Также есть смысл обратить внимание на то, по какому ключу идёт выборка и открывать файл на выборку в режиме чтения (40H).

Что касается оптимизации - то я уже об этом говорил, вопрос в том - слушали ли Вы … ;)
1. Сделайте скрипт и создайте DDF на эту таблицу (одну !!!) с драйвером P.SQL.
2. Добавьте её в словарь и получите желанный пакет записей обычным SELECT.
3. Узрите силу и мощь SQL запросов по сравнению с выборками ISAM. :)
finsoftrz писал(а):
28 Январь 2019, 18:35
Я вот гоняю тесты на расчете доходности по средним ценам.
Вы бы хоть рассказали, как он делается (алгоритм). Я бы тогда хоть понимал в чём его смысл ...
«V» значит Вендетта !

Ответить