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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Date: 2013-09-10 04:25 pm (UTC)
From: [identity profile] kranov.livejournal.com
Я видел и админил бд с самописным софтом заточенным под конкретную субд (информикс, оракл), с покупным заточенным, и с универсальным erp (baan, sap), сейчас покупной заточенный (процессинг, сотни тыс. карт и тысячи устройств) и самописный (абс, 1500 пользователей), базы соответственно терабайтные.
Вот что я имею сказать, заточенное, захинтованное в усмерть (регулярно приносят хачить запросы в которых 70 таблиц и 4 A4 длиной,надо чтоб работал за секунду) и использующее хаки конкретной субд, отлично летает на говне: 1сокет, 8ядер, 30гиг памяти, 16дисков.
Незаточенное, типа sap, легко жрало память 48 гиг на сервер приложений, обслуживающий 3-х пользователей, 50 серверов приложений на 5 тыс. пользователей, 200 дисков, 512Гиг у несколько нод субд, две ibm p795, и тооооорррррммозило.

Date: 2013-09-10 04:44 pm (UTC)
From: [identity profile] gds.livejournal.com
lateral -- из sql-стандарта, его выбросим тут.

углубляться в расширения, если идти путём "сгенерить стандартный sql", не нужно.

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

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

а вот останавливаться на уровне odbc -- не стоит. Базы данных слишком разные, чтобы с ними можно было бы одинаково работать. Вся эта транзакционная ёбынь, коммиты, select for update, явные локи -- всё это надо писать с учётом специфики бд. Универсально не получится. Точнее, получится, но будет хуйня.

Date: 2013-09-10 04:53 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Для отчетности и ввода первичных документов в оперденях odbc/ADO.NET/System.Data.Common хватает за глаза.

Всякое нетривиальное, конечно, приходится делать родными средствами БД.

Date: 2013-09-10 05:01 pm (UTC)
From: [identity profile] gds.livejournal.com
тогда к чему возмущения? Стандартного odbc хватает, оно никуда не уходит, а родные средства только растут для того, чтобы их можно было использовать на благо нетривиальщины.

Понятно, что стандартов на хранимки, триггеры и автоинкременты нет, но их и не будет.

Был у меня проектик, где я из coq хотел сделать едсл, транслятор в схему бд и в plpgsql, а там и в другие бд, но с ним никто не помогает, поэтому тут я решения не предложу.

Да и нужно ли решение, если почти никто не меняет базу данных обычно? (хотя бы потому, что хитрая логика делается родными средствами.)
(deleted comment)

Date: 2013-09-10 05:36 pm (UTC)
From: [identity profile] gds.livejournal.com
и таки що в этом плохого? Обычное человеческое общение.
(deleted comment)

Date: 2013-09-10 05:56 pm (UTC)
From: [identity profile] gds.livejournal.com
я тоже так считаю. Давайте обнимемся! Давайте обнимемся!

Date: 2013-09-11 06:13 am (UTC)
From: [identity profile] ext_1684112 (from livejournal.com)
>из coq хотел сделать едсл, транслятор в схему бд и в plpgsql,

Очень круто. С удовольствием бы помог, но я даже Хаскель не осилил.

Мне кажется, ужас разработчиков от plpgsql порождается отсутсвием нормальных инструментов разработки. Даже за деньги их нет. PgAdmin - он же хуже ТурбоПаскаля, тот хотя бы не давал обращаться к несуществующим переменным. А где IntelliSence? Где возможность выделить несколько запросов и автоматом их вынести в отдельную функцию? Где нэймспейсы, хоть какие-нибудь? Где глобальный поиск по коду? Даже отобрать права на сущности так просто нельзя, нужно запрос писать. Дать - можно, а забрать - хрен.

Date: 2013-09-19 06:04 pm (UTC)
From: [identity profile] miserakl.livejournal.com
> Был у меня проектик, где я из coq хотел сделать едсл, транслятор в схему бд и в plpgsql, а там и в другие бд, но с ним никто не помогает, поэтому тут я решения не предложу.

Мне интересно, хотя не столько для портабельности, сколько просто нравится идея писать под постгрес на Coq.

А это где-нибудь выложено?

Date: 2013-09-19 07:52 pm (UTC)
From: [identity profile] gds.livejournal.com
там только наброски, и я не совсем понимаю, как там жить дальше. Взялся за PHOAS, но слишком сурово оказалось. Потому отложил до тех пор, пока мозг не вырастет. Там ничего не работает.
Если интересно даже несмотря на вышеизложенное, могу выложить в приватную репку на битбакете и дать туда доступ.
Публично не хочу, ёбаный стыд там. А если хоть какая-то помощь будет -- буду рад. Потом-то, как будет что-то работать, можно будет выкладывать публично и лицензировать под какой-нибудь свободной лицензией.

Date: 2013-09-21 10:04 am (UTC)
From: [identity profile] miserakl.livejournal.com
Да, интересно. На Битбакете у меня есть аккаунт alexeig.

Обещать активную помощь не могу, так как пока ни в чём конкретном не планирую применять, но, может быть, потихоньку-понемножку чего-нибудь да сделается...

Date: 2013-09-21 11:11 am (UTC)
From: [identity profile] gds.livejournal.com
сделал.
У меня тоже сейчас нет применений, но были и будут.
Если интересно, что именно я хотел сделать этим проектом, со мной можно связаться через мыло gdsfh1 на гмейле, я опишу основные концепции (скорее даже в репку закоммичу), заодно там же можно было бы обсудить, как вообще эта хрень должна работать. Идеи нужны, вот чо.

Date: 2013-09-23 04:07 pm (UTC)
From: [identity profile] miserakl.livejournal.com
Ага, спасибо. Пока успел заглянуть только в полтора файла :)

Моя почта alexej.golovko@gmail.com,завтра постараюсь выйти на связь и спросить что-нибудь осмысленное (а не просто повторить вопрос, как вообще эта хрень должна работать).

Date: 2013-09-23 04:41 pm (UTC)
From: [identity profile] berezovsky.livejournal.com
тебя щас глазофф на гоморассылку подпишет

Date: 2013-09-10 05:04 pm (UTC)
From: (Anonymous)
>но реализация "вся логика в сервере приложений или клиенте" выглядит еще более неприятно.

Вся логика в сервере приложений - это самая каноничная реализация. От БД надо лишь хранилище и SQL-92.

Date: 2013-09-10 06:43 pm (UTC)
From: [identity profile] besm6.livejournal.com
"Что добавили нового" и должно быть несовместимым, потому что совместимое - это SQL92 как максимум, а всё оттуда добавлено не позже шестерки.

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

Date: 2013-09-11 06:15 am (UTC)
From: [identity profile] ext_1684112 (from livejournal.com)
Чем вам SQL:2003 не по нраву?

Date: 2013-09-11 08:41 am (UTC)
From: [identity profile] besm6.livejournal.com
Пока ничем, я просто не в курсе о его существовании. Ну, пусть SQL2003, если но вменяем и его кто-то вменяемый поддерживает или собирается поддерживать.

Date: 2013-09-11 04:34 am (UTC)
From: [identity profile] norguhtar.livejournal.com
Там сейчас добавили в репликации весьма клевую фичу ремастеринг штатными средствами.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 15th, 2025 11:34 am
Powered by Dreamwidth Studios