Первасив. Есть ли ограничение на размер файла?

Clarion, Clarion 7

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

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

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Когда-то в 2003-2004 годах :-) продумывал стратегию с масштабированием основного проекта.

Было решено сделать так. Вначале на tps. Выделены крупные таблицы. Их было 2 - товарные движения и лог. Для них созданы вторые таблицы с такой же структурой, названные архивными. Периодически данные можно переливать из оперативной в архивную, а программа работает с ними как с одной общей. В этом случае вся структура объявлена в словаре и прозрачна для шаблонов (чего нет при использовании фрагментации на файлы с переменными именами). На модификации держим относительно небольшую таблицу, а по мере накопления раз в год или несколько лет переносим в архив, который только на чтение. Это существенно расширяет время хранения информации и надежность работы в целом.

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

Лог постепенно стал безразмерным. Это особая таблица, которую можно дефрагментировать на неограниченное количество файлов и работать с ними как с одним через специальный класс. С рабочими таблицами так делать не хочется.

Для "интерпрайз" клиентов предполагалось использовать первасив, который практически полностью совместим по прикладному коду с tps. Это была одна из причин, почему я использую только базовые типы данных и практически не использую memo (blob совсем не использую).

Для сборки версии под первасив была сделана опция словаря. Делается полная копия проекта для сборки под первасив, затем по мере изменений в нее копируются модифицированные app и dct. Если обновили dct, то в нем просто ставим флажок сборки под первасив. Описание таблиц не трогаем. Два небольших шаблона используются для автоматической конвертации всех таблиц в словаре из tps в первасив и обратно. В общем, все собиралось и работало практически в автоматическом режиме. Плотно я тогда сборку под первасив не тестировал, так как реальных клиентов не было. А сейчас вот начал один расти как на дрожжах, и надо какой-то вариант заранее предусмотреть...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Первасив. Есть ли ограничение на размер файла?

Сообщение Игорь Столяров »

Не, ну использовать только базовые типы данных тоже жесткий вариант ...
Иногда нужна сортировка списка по сумме документа, не вести же финансы числа в REAL ... :(

Вообще, если у новых хозяев P.SQL есть маркетолог, то должно быть понимание, что в линейке
предложений должен быть бесплатный продукт, например тот же BTRIEVE.
И эта была бы идеальная NoSQL БД под приложения Clarion ....
Последний раз редактировалось Игорь Столяров 30 Ноябрь 2017, 13:37, всего редактировалось 1 раз.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

У меня все именно в real и никаких проблем не испытывал. Сортировки и фильтрация по суммам без проблем работает. В tps во всяком случае... Единственное, при расчетах надо round применять.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Вряд ли у них появится бесплатная линейка. Нет смысла. Живут на поддержке работающих проектов, которых много. Новых клиентов, думаю, мало приходит. Сложно перекричать крупных поставщиков ПО типа ms или oracle. У сибейза вроде как тоже все платное, они в такой же ситуации. Главное, чтобы с приходом новых владельцев команда разработчиков не разбежалась, а то получится как у SV...
C6/C11, ШВС, tps/btrieve.
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Первасив. Есть ли ограничение на размер файла?

Сообщение George »

finsoftrz писал(а): 30 Ноябрь 2017, 12:00Когда-то в 2003-2004 годах :-) продумывал стратегию с масштабированием основного проекта.

Было решено сделать так. Вначале на tps. Выделены крупные таблицы. Их было 2 - товарные движения и лог. Для них созданы вторые таблицы с такой же структурой, названные архивными. Периодически данные можно переливать из оперативной в архивную, а программа работает с ними как с одной общей.
...
А можно пример (можно в личку), как работать с двумя таблицами как с одной общей. :shock:
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Либо просто в коде вначале с одной таблицей, затем с другой, а результат в кьюшке объединить.
Или можно сделать специальный класс. Пример работы через него выглядит так. Вначале делается выборка по архиву, по том по оперативной таблице. Когда выбираем из архива, буфер оперативной таблице устанавливается равным буферу архива.

myrout_r routine
DATA
FsSupTabL FsSupTab
CODE

FsSupTabL.init(TableOper,TableArh)
FsSupTabL.ClearRecord(-1)
FsSupTabL.SetField(TableOper.ParentID,ParentID)
FsSupTabL.SetKeyKey(KeyOper)
Loop
if FsSupTabL.TryNext()=0
break
end
if TableOper.ParentID<>ParentID
break
end
...
end
FsSupTabL.kill
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Первасив. Есть ли ограничение на размер файла?

Сообщение Игорь Столяров »

Могу упрощённо рассказать как нечто подобное делал DIASOFT 20 лет назад (есстесно, тогда без классов).
- Есть операции неважно какие (у них был банковский опердень), каждый день тысячи операций.
- В папке архива создаются файлы, по одному файлу на календарный день, имя файла = дата.
- Пишутся методы, например:
- Добавить один документ: AddDoc(Date, *RecordDocument)
- Добавить несколько документов: AddDocs(Date, *QueueRecordDoc)
- Прочитать документы за день: GetDocDate(Date, *QueueRecordDoc)
- Удалить документ: DelDoc(Date,DocID)
- Найти документы за период: FindDocs(DateStart,DateEnd,FindRequest,*QueueRecordDoc)
и т.д.

Ну а далее понятно.
- Когда надо добавить документ, указываем дату и указатель на RECORD документа.
Метод AddDoc() сам откроет нужный файл с датой и добавит в него документ.
...
- Для выборки документов указываем период и получаем QUEUE со списком документов из нескольких файлов.

Получалась своего рода, "распределённая" по файлам БД документов (операций), которую легко можно было архивировать.
Несмотря на тривиальность, всё это достаточно шустро работало с MKD файлами под сетью Novell NetWare .... :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Я тоже когда-то делал банковскую систему, еще на cpd 2.1 под dos. Там тоже были дневные файлы операций, файлы операций по каждому клиенту, сводный файл по балансовым счетам за день. Все работало шустро на clarion формате в сети 10 мбит. Рабочих мест штук 10 наверно было (это был филиал московского банка со свои оперднем в силу специфики региона).
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Первасив. Есть ли ограничение на размер файла?

Сообщение Игорь Столяров »

Ну да. Всё гениальное - просто. :)
Кстати, эта схема идеальна и сейчас, например для ведения протоколов работы пользователей.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

У меня в веб модуле оптовых электронных заказов на каждого заказчика свой файлик sqlite. Смысла нет делать общую базу, вопросов с поддержкой на порядок больше будет. А так практически необслуживаемый режим, поставил и забыл...
К сожалению, в учетных системах для торговли и производства такая организация данных не так хорошо ложиться, так как там обычно нужны отчеты за произвольные периоды и с разной детализацией. Что приведет к переоткрытию файлов. Хотя, может в этом ничего страшного и нет, просто карты сейчас уже легли...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

К слову, если посмотреть, как внутри устроен PostgreSQL, то у него база размазана по куче подкаталогов и файлов с цифровыми названиями. То есть понять, что где там хранится на физическом уровне весьма не просто. Мне это очень не понравилось...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Восстановил сборку под первасив, загнал тестовую базу. Вроде все справочники, документы, отчеты окрываются. Попробую дальше закачать боевую базу, примерно 2гб общий объем на tps.

Тянуть две сборки под tps и первасив все же не хотелось бы, проект большой и лишние пересборки приводят к потере времени. Надо пробовать динамическое переключение. Если заработает, то будет очень неплохо...

А что вместо топскана можно использовать с первасивом? Как я понимаю, ничего такого там нет, так как в файлах не хранится структура таблиц. И просмотр только из программы (или можно конвертор наладить для отдельных таблиц tps-первасив и обратно). Вместо tpsfix вроде была какая-то подобная утилита в составе первасива?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Первасив. Есть ли ограничение на размер файла?

Сообщение Игорь Столяров »

1. ТоpScan. Можно создать DDF файлы с описанием структуры. А дальше через ControlCentre P.SQL обычные SQL запросы ...
Где-то попадалась утилита генерации DDF файлов на основании TXA, но можно и проще: перегнать словарь в скрипт создания
БД P.SQL (не Btrieve !) и выполнить, а БД PSQL это есть MKD файлы + DDF файлы с описанием полей, пользователей,
хранимых процедур и т.д. DDF - это тоже MKD файл, но специализированной структуры.
У нас была программа, которая работала с БД Btrieve, а запросы для отчётов выполняла на той же БД через P.SQL ....
Так сказать, промежуточный вариант между Btrieve и PSQL. :)

2. TPSFiX. Здесь один вариант, но зато какой ... :) Утилита командной строки BUITIL. Там есть и режимы восстановления, но
по опыту, восстановление разрушенного MKD всегда выполняется через выгрузку в текст, и загрузку текста обратно в новый MKD.
Есть ещё, упомянутая всуе утилита REBUILD - она может, кроме упаковки, изменить версию формата MKD файла и перестроить индексы,
если они вдруг "слетели" (что бывает раз в жизни, и то не у каждого). :)
Есть сторонние утилиты, но всё сводится к указанию параметров в красивом интерфейсе и запуску c ними всё той же BUTIL ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7335
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Первасив. Есть ли ограничение на размер файла?

Сообщение Игорь Столяров »

Если кому интересно поюзать c Clarion - на FTP форума видел новейший Actian PSQL13 WorkGroup (комплект).
Всё ставится, работает прекрасно, визуально будет пошустрей чем PSQL12.
Заманивают новым быстрым Btrieve API и прочими ай-люлю ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4566
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Первасив. Есть ли ограничение на размер файла?

Сообщение finsoftrz »

Конвертнул боевую базу в первасив. Общий объем 1.8 гб в tps стал примерно 4.5 гб в первасиве. То есть вырос в 2.5 раза. Локально работа с первасивом несколько медленнее, чем с tps. Не сильно, но на глаз заметно. Что и ожидаемо, так как накладных расходов на доступ к первасиву больше. У меня сложилось субъективное ощущение, что с ростом выборки данных (например, при построении отчетов) первасив начинает заметно ускоряться. При конвертации напрягло, что процесс был достаточно долгим. Точно не скажу сколько, я уснул... :-) Думаю, порядка 3 часов прошло. В базе примерно 11 млн записей. Возможно, для заливки в первасив лучше поступать, как в sql серверах - выгружать в csv, а затем заливать из него специальной утилитой...

С динамическим переключением tps - первасив попробовал, тут хорошо. Надо к программе подложить dll динамического драйвера (c60DFX.dll для c6), затем перед открытием файла поставить так:
MyTable{Prop:Driver}='Btrieve'
MyTable{Prop:Name}='MyTableName.dat'
Разумеется, все это можно сделать шаблонами. После этого, если используются только базовые типы данных, получаем работу с первасивом. Например, напрашивается такая схема. Создаем в каталоге с данными флажковый файл pervasive.cfg. Программа при старте его находит и включает глобальный флажок работы с первасивом. А дальше уже все понятно.
В сухом остатке так. Работает обычная программа с tps. Подкладываем файлик, получаем работу с первасивом. На мой взгляд, это очень круто... Для крупного клиента снимаем ограничения на размер базы данных и даем возможность распределять нагрузку на несколько серверов при большом числе пользователей (tps хорош только при работе на одном боксе). При этом никаких отдельных сборок не требуется, бизнес логика идентичная...
C6/C11, ШВС, tps/btrieve.
Ответить