metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-08-23 12:50 pm

Адъ баз данных

Софт1: написан почти целиком мной, заказной: 186 таблиц, 169 хранимых процедур
Софт2: написан мной и ребе белнетмоном, коробочный: 74 таблицы, 40 хранимых процедур

[identity profile] metaclass.livejournal.com 2010-08-23 04:45 pm (UTC)(link)
Логика в базе очень сильно усложняет обновление - в Firebird нет механизма "поменить зависимые объекты как инвалидные и перекомпилировать". Только дропать все дерево зависимостей начиная с листьев, менять объект и создавать зависимые заново.
Ну и, при всей моей невменяемости - я СТОЛЬКО бизнес-логики в хранимых процедурах не напишу - отладки нет, курсоров кошерных нет, типов нормальных нет, временные таблицы использовать не получается - отчетные транзакции "только для чтения", а если их сделать пишущими - забытый юзерами отчет начинает мешать сборке мусора, и прочая, и прочая.
В общем, при всех достоинствах FB писать серверную логику на нем сложно.

[identity profile] fraks-nsk.livejournal.com 2010-08-27 07:49 am (UTC)(link)
>>отладки нет
есть в IBExpert. Однако я в основном пользуюсь аналогом showmessage только в таблицу лога.

>>курсоров кошерных нет
for select, а сейчас еще появились такие чудные штуки как select from select и execute block

>>типов нормальных нет,
нормальных - это каких?

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

Перекомпиляция всех процедур - есть такая функция в IBExpert.
Менять тип поля иногда да, бывает сложно...

[identity profile] metaclass.livejournal.com 2010-08-27 08:41 am (UTC)(link)
1) Да, я в логи тоже пишу. Только вот упадочно оно, по сравнению с нормальными логгерами :)
2) Курсоры из запроса или хранимой процедуры в клиента вернуть можно? Типы у них с типами запросов совпадают?
3) Нормальные типы - это хотя бы чтобы полиморфные функции можно было делать, туплы объявлять, в общем, как в нормальных языках - как можно больше first class values
4) Во временные таблицы в RO не пишется - валится с исключением. Execute block маловато - я иногда хочу оптимизацию сделать типа "временный список с индексом и поиск по нему".

IBExpert меня как-то напрягает, я предпочитаю isql и скрипты.

[identity profile] fraks-nsk.livejournal.com 2010-08-27 09:00 am (UTC)(link)

1. Я и в Delphi логгерами не пользуюсь, обычно натыкиваю ShowMessage. Пошаговым отладчиком пользуюсь иногда но радикальной помощи не получается.

2. Я в общем с трудом понимаю что такое "курсоры". В Firebird процедуры селективные, т.е. могут возвращать данные точно так же как и селект из таблицы. Может возвращать как одну строку так и много. Что такое тип запроса и с чем он должен совпадать - не понял.

3. Я пишу на Delphi и с приведенной терминологией не знаком :) Мне типов данных в Firebird хватает полностью, а запихивать какой-нибудь record или класс в базу - нереляционно.

На счет IBExpert - это ты очень зря. Я тоже начинал с isql во времена Interbase 4.2 но тогда IBExpert просто не было. Никто не заставляет юзать все его оглупляторские фишечки но удобство программирования под FB с применением IBE возрастает на порядок.
Категорически рекомендую понасиловать себя с IBExpert - это лучше всяких отладчиков.

[identity profile] fraks-nsk.livejournal.com 2010-08-27 09:04 am (UTC)(link)
"забытый юзерами отчет" - с какой стати он держит открытую транзакцию? Сформировался и тут же завершил.

У меня такое ощущение что нет достаточного опыта работы именно с FB.
Рискну привести несколько полезных ссылок:

http://sql.ru/forum/actualtopics.aspx?bid=2
http://ibase.ru/develop.htm
http://www.ibaseforum.ru/

[identity profile] metaclass.livejournal.com 2010-08-27 09:09 am (UTC)(link)
Если что, у меня 200 внедрений коробочного софта на FB и оные ссылки я перечитывал неоднократно.

У меня отчеты (датасеты) работают в контексте транзакции, хотя действительно, можно ее закрывать после формирования.

В общем, ro-транзакция это было когда-то решение проблемы с застреванием OAT и затуплением FB на сборке мусора. Там в базу с десяток сервисов активно складывает данные и изредка были проблемы с этим.

[identity profile] fraks-nsk.livejournal.com 2010-08-27 09:24 am (UTC)(link)
>>Если что, у меня 200 внедрений коробочного софта на FB
>>и оные ссылки я перечитывал неоднократно.

Ну я поэтому и написал "рискну". А на sql.ru ты как зарегистрирован?

>>У меня отчеты (датасеты) работают в контексте транзакции, хотя действительно,
>>можно ее закрывать после формирования.

Это такая недоступная мне логика, порочная на мой взгляд, реализована везде - что типа открытый датасет почему-то должен держать активной транзакцию которая эти данные вытащила.
Чего ее держать - любые данные взятые с сервера по определению устаревшие, поэтому держи не держи - один фиг.
Поэтому я датасетами вообще не пользуюсь. У меня свой самопальный буфер, типа ClientDataSet тока он не датасет.

[identity profile] metaclass.livejournal.com 2010-08-27 09:26 am (UTC)(link)
О, вспомнил, почему там открытая транзакция. Там fetch ленивый, т.е. по мере надобности, поэтому закрывать транзакций можно только когда дошло до eof.
Хотя грузить такие количества записей на клиента по любому маразм - иногда оно полезно.

[identity profile] fraks-nsk.livejournal.com 2010-08-27 09:09 am (UTC)(link)
Готов ответить на вопросы по Firebird - возможно чем-то помогу.
В частности про кошерность курсоров, типы.

fraks гав sibverk точка ru