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

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

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

[identity profile] plumqqz.livejournal.com 2010-08-23 04:36 pm (UTC)(link)
Э... А где потрясаться.

PS Что-то процедур маловато. На клиента логику тянете, лодыри...

[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 тока он не датасет.

(no subject)

[identity profile] metaclass.livejournal.com - 2010-08-27 09:26 (UTC) - Expand

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

fraks гав sibverk точка ru

[identity profile] dair-spb.livejournal.com 2010-08-23 05:27 pm (UTC)(link)
А чо сразу на клиента? Application Server Layer отменили?

[identity profile] metaclass.livejournal.com 2010-08-23 05:32 pm (UTC)(link)
А эти софтины - двухзвенки. Нет там никаких серверов приложений, и слава богу.

[identity profile] dair-spb.livejournal.com 2010-08-23 05:35 pm (UTC)(link)
Щастливая у вас жизнь, что могу сказать :-)

[identity profile] plumqqz.livejournal.com 2010-08-23 05:42 pm (UTC)(link)
А чо сразу на клиента? Application Server Layer отменили?

Что может быть лучше толстого слоя? Только два толстых слоя.
Удивляюсь, кстати, почему никто еще не додумался делать три, а то и четыре килограмма вкусного, легкоусвояемого аппликейшн сервера.

Как я понимаю из описания, и не внедряли.

[identity profile] dair-spb.livejournal.com 2010-08-23 05:44 pm (UTC)(link)
Я только до двух додумывался.
Т.е., база->ASL->"html-генератор"->броузер

Вот такая вот, понимаешь, загогулина.

[identity profile] plumqqz.livejournal.com 2010-08-23 05:47 pm (UTC)(link)
Бровсер -> Вебсервер транслирует в soap -> Вебсервис (sic!) -> EJB (не потому что надо, а шоб было) -> база.

На самом деле после бина можно еще раз завернуть в soap и пробежаться еще раз, но в другом месте.

PS Если я и фантазирую, то не очень.

(no subject)

[identity profile] dair-spb.livejournal.com - 2010-08-23 18:13 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2010-08-23 18:15 (UTC) - Expand

(no subject)

[identity profile] dair-spb.livejournal.com - 2010-08-23 18:16 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2010-08-23 18:20 (UTC) - Expand

(no subject)

[identity profile] dair-spb.livejournal.com - 2010-08-23 18:21 (UTC) - Expand

[identity profile] golosptic.livejournal.com 2010-08-23 09:01 pm (UTC)(link)
Что значит 'никто'? :)

client - application server - transaction monitor - SQL-server

[identity profile] plumqqz.livejournal.com 2010-08-23 09:27 pm (UTC)(link)
Ну, обычно аппликейшн сервер и транзакшн монитор объединяют в одно целое. Собственно, иных вариантов я не видел. Точнее, видел, но там база, монитор и сервер были вместе.

[identity profile] tretiy3.livejournal.com 2010-08-23 09:23 pm (UTC)(link)
а объясните, пожалуйста, дураку, зачем вообще они нужны, процедуры те? не догоню никак. один хрен будет какая-то логика в приложении. ну и пусть бы там все крутилось, в этом слое. по вашим же постулатам: данные - это данные. утвердят завтра галиматью какую-нить в третьем чтении, либо дядя погрозит пальчиком - высылаешь патчик людям. один файлик меняется на другой. хранимки же, сильно усложняют этот процесс. не так разве?

[identity profile] plumqqz.livejournal.com 2010-08-23 09:28 pm (UTC)(link)
Ну, все равно какое-нибудь поле добавлять надо - вот и в базу лезть требуется. А если уж туда полезли - то какая разница?

[identity profile] tretiy3.livejournal.com 2010-08-23 09:47 pm (UTC)(link)
лазить в базу при обновлении - особенный случай. хоть и не уникальный, но особенный. на сотню обновлений в логике дай бог один, два таких "залезания" приходится.

[identity profile] plumqqz.livejournal.com 2010-08-23 10:06 pm (UTC)(link)
Что-то я с трудом представляю себе сотню обновлений, на которые только одно изменение в базе приходится.

Да и базу можно на лету перекурочить как угодно. В случае Оракла, по крайней мере.

(no subject)

[identity profile] tretiy3.livejournal.com - 2010-08-23 22:16 (UTC) - Expand

[identity profile] fraks-nsk.livejournal.com 2010-08-27 08:39 am (UTC)(link)
Засунув процедуру которая работает с большим кол-вом данных в хранимку можно значительно ускорить работу. Иногда - очень значительно.

Меньше таскать данных по сетке. Иногда имеет значение.

Можно давать права на процедуры но не на таблицы.

Рефакторинг. Засовываешь логику в процедуру - место с логикой одно, из какого софта бы не коннектился. Если прога работающая с базой не одна - то это удобно.

Контроль за рукоблудством. В процедуре можно проконтролировать вводимые данные.

И прочее, прочее, прочее...

Отсутствие SP в СУБД а равно неиспользование имеющейся возможности сделать SP как правило говорит от недостаточном владении инструментом.

[identity profile] metaclass.livejournal.com 2010-08-27 08:48 am (UTC)(link)
Это хорошо в серверах с гуманными языками для хранимых процедур.

А вообще это модно счас делать на серверах приложений, которые или там же где СУБД или рядом по гигабитной сетке соединены. На базу никаких доступов - только веб-сервисы и тому подобное.
Вот что в этом печально, так это то, что логика выражаемая трехстрочным sql запросом в обычном языке часто вырождается в адскую хрень.

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2010-08-27 09:12 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-08-27 09:14 (UTC) - Expand

(no subject)

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

(no subject)

[identity profile] metaclass.livejournal.com - 2010-08-27 09:42 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2010-08-27 10:04 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2010-08-27 10:10 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2010-08-27 10:13 (UTC) - Expand

[identity profile] fraks-nsk.livejournal.com 2010-08-27 08:42 am (UTC)(link)
На счет усложнения процесса обновления.
Структуру таблиц все равно менять приходится. Поменять/добавить SP - ничуть не сложнее.
Вместе с прогой высылается скрипт который производит изменения в базе.

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

Забыл, может самое главное :)

[identity profile] fraks-nsk.livejournal.com 2010-08-28 01:01 pm (UTC)(link)
Обычно 5-10 строчек в СП заменяет 50-150 строчек на клиенте.
Поэтому манипуляции намного лаконичнее.