metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-09-10 06:03 pm

Postgres 9.3

Посмотрел, чего добавили в Postgres новый.
Все огорчает, т.к. никак не коррелирует с другими СУБД, соответственно - использовал новую фичу - прибил себя гвоздями к постгресу.
Всякие там json-типы данных, да какие-то lateral join да внешние источники данных.

Даже не знаю, имеет ли смысл углублятся в эти нетривиальные SQL-расширения, потому как сделать все методом "сгенерил стандартный SQL и потом обработал результат на более мирном языке" выглядит более future-proof. Это что касается чтения данных.
А в плане записи - вообще все хреново, триггера везде разные, автоинкременты разные, глаза б этого всего не видели, но реализация "вся логика в сервере приложений или клиенте" выглядит еще более неприятно.

[identity profile] jakobz.livejournal.com 2013-09-10 03:11 pm (UTC)(link)
А зачем тебе триггера, кстати? Мы вот недавно createdby/modifiedby и аудит с историей изменений к тому же Entity Framework приделали, все в одной функции лежит, еды не просит. При желании все это можно вообще куда-нибудь в другую базу лить, например. Думаю такое же проделывается на любом языке в нижнем уровне data-layer, безотносительно даже ORM-ки.

Короче, как по мне, если уж не пихать логику в базу, то не пихать ее туда совсем.

Я postgres не трогал, но вообще оно выглядит как самодостаточная штука как раз для того, чтобы в нее сувать всю логику. В отличии от тех же MySQL или MSSQL, скажем. Ну и пусть туда развивается, чо.

[identity profile] metaclass.livejournal.com 2013-09-10 03:28 pm (UTC)(link)
Все варианты аудита выглядят как говно. Что на триггерах, что в EF, что в ActiveRecord c papertrail.
Но на триггерах оно как минимум не зависит от клиента подключающегося к БД - хоть там сервер приложений, хоть расчетный сервис, хоть двухзвенка или юзер из консольного клиента БД подключился.

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

[identity profile] dr-cha0s.livejournal.com 2013-09-10 03:56 pm (UTC)(link)
Правильно! Бери Haskell, Persistent и Esquiletto.

[identity profile] jakobz.livejournal.com 2013-09-10 06:05 pm (UTC)(link)
Это, кстати, еще и от того, что SQL как API - говно сраное. Впрочем, и не только как API. Но если был бы более-менее машинно-понятный формат общения с базой, то там можно было бы хотя-бы прослоечку свою вставить между приложениями и базой. И сувать туда всякие эти аудиты, шардинги и что там еще надо.

А по факту имеем API: входные данные отпарсить смогут только эти твои пауки, а выходные - вообще небось пропиетарны и читаются только сишными либами от вендора.

Я уже даже и не говорю, что уже 40 лет этой херне, а master-detail хоть как-то стандартно и разумно ни из одной базы прочитать нельзя.

[identity profile] metaclass.livejournal.com 2013-09-10 06:15 pm (UTC)(link)
Муахахаха, мастер-деталь это проклятая тема похуже аудита.

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 06:07 am (UTC)(link)
>master-detail
Крокодил же недавно демонстрировал - выброка из базы списка курсоров.

[identity profile] jakobz.livejournal.com 2013-09-11 10:38 am (UTC)(link)
Дай линку что-ли.

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 12:51 pm (UTC)(link)
http://plumqqz.livejournal.com/394579.html?thread=4580691#t4580691

[identity profile] falcrum.livejournal.com 2013-09-10 04:27 pm (UTC)(link)
Да нужны иногда триггера - только чтоб БД не грузили.

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 06:05 am (UTC)(link)
>MSSQL

Вот тут вы сильно ошибаетесь. Если учесть возможность написания процедур на C# и таких вещей, как очереди сообщений прямо в базе, планировщик, и прочее, то MSSQL таки превосходит Постгрес.

[identity profile] jakobz.livejournal.com 2013-09-11 10:41 am (UTC)(link)
А еще можно на полиэтиленовой обложке дневника обвести ручкой слово "дневник", чуть-чуть пальцем натянуть и получится "дневник дневник".

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 11:58 am (UTC)(link)
Я вас не понимаю. Можете развернуть вашу мысль?

[identity profile] jakobz.livejournal.com 2013-09-11 12:23 pm (UTC)(link)
API к базе у этих "хранимок на C#" - оно такое же почти, как и внешнее API. Чем это будет отличаться от того чтобы писать логику во внешнем сервисе, чисто тем где этот сервис хостится?

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 12:45 pm (UTC)(link)
Положим, такая хранимка может принять сообщение из очереди и обрабатывать его, используя любую, самую изощренную логику, которую писать на pl/sql будет сильно муторно.

[identity profile] jakobz.livejournal.com 2013-09-11 12:51 pm (UTC)(link)
Любой отдельно стоящий код на .net может сделать ровно тоже самое.

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 12:55 pm (UTC)(link)
Не совсем то же самое. Доступ к базе изнутри базы работает как-бы заметно быстрее. Речь же идет о чем? Как запихать логику в базу. И у MS SQL на этот вопрос есть хороший ответ.

[identity profile] jakobz.livejournal.com 2013-09-11 01:23 pm (UTC)(link)
Логику в базу запихивают чаще не для того, чтобы было быстрее. Мест, где реально нужно что-то там сильно ускорять, в тех же оперденях очень мало.

Логику в базу запихивают потому что в чем-то это удобнее, чем писать снаружи: один и тот же язык, все на виду, можно подхачить не отходя от кассы.

Я ничего не имею .net-а внутри базы, но это уже совсем не то. В postgres, к слову, можно вообще бинарники на сях внутрь совать.

[identity profile] ext_1684112 (from livejournal.com) 2013-09-11 06:39 pm (UTC)(link)
>один и тот же язык,
Воот! И есть мнение, что C# более человечен, чем plsql, и среда разработки под него нормальная.

А в постгрес можно яву засунуть, но что-то там такое... то ли одна ява-машина на все процессы, то ли еще какая дурь..

(Anonymous) 2013-09-11 11:07 am (UTC)(link)
Вот когда оно научится работать на нормальных операционках, тогда посмотрим.