metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-03 01:06 am

В Советской Белоруссии SQL разжигает айседа

http://theiced.livejournal.com/238346.html
Собственно, про кобол я не знаю, на дельфи пишу уже 15 лет и никак избавится от него не могу (слишком много легаси кода), а вот про SQL я с ним не согласен.
Сам по себе SQL очень хорошо подходит для генерации отчетов. Если отчет сводится к фильтрации-сортировке-группировке множеств - идеально. С рекурсивными CTE - еще и деревья можно обрабатывать, не особо включая мозг. Всунув поверх этого минимальных размеров постобработку на какой-нибудь функциональщине, можно сделать почти любой отчет, пришедший в голову свихнувшимся на Excel выпускникам нархоза, работающим в минстате, минфине и МНС.

Но когда доходит до процедурных расширений, API между СУБД и клиентскими приложениями или каких-нибудь вещей, которые забыли вовремя добавить в стандарт - начинается полная, немыслимая жопа.
Например, проклятая тема - генерация автоинкрементных ключей и возвращение значений автоматически заполненных полей. Кто во что горазд - identity, генераторы, sequence, функции (в каждой СУБД названные по разному), returning, заебы на тему "вызывать в той же транзакции и сессии" и прочая и прочая. Про вариации на тему "вернуть поле, которое заполняется автоматически, но не является ключом/identity" лучше даже не думать.
Неудивительно, что люди при первой же возможности сбегают в ORM (которые являются уже второй производной от всего этого маразма и несут на себе его неизгладимый след).

[identity profile] norian.livejournal.com 2013-04-03 08:18 am (UTC)(link)
> проклятая тема - генерация автоинкрементных ключей и возвращение значений автоматически заполненных полей

дык можно юзать клиентский синглтон для генерации, не ?

[identity profile] asvil (from livejournal.com) 2013-04-03 08:23 am (UTC)(link)
Несколько клиентов обычно.

[identity profile] norian.livejournal.com 2013-04-03 08:34 am (UTC)(link)
ну да .. если нужны строго последовательные ключи, тогда вилы ..

[identity profile] theiced.livejournal.com 2013-04-03 08:33 am (UTC)(link)
гагага

[identity profile] metaclass.livejournal.com 2013-04-03 08:57 am (UTC)(link)
Да, особенно когда приложений десяток штук и каждое запущено от одного до сотни раз.

[identity profile] nivanych.livejournal.com 2013-04-03 05:52 pm (UTC)(link)
Ну что вы. Нужно выделять N бит внутри PK, чтобы каждый клиент создавал ключи в своём адресном пространстве.
;-)

[identity profile] norian.livejournal.com 2013-04-03 10:06 am (UTC)(link)
когда нужны уникальные ключи, а не последовательные и можно забить на фрагментацию (64 бит на порядка миллиона записей) - клиент берёт диапазон и генерит

а взятие диапазона можно атомизировать забив на перформанс

[identity profile] norian.livejournal.com 2013-04-03 10:12 am (UTC)(link)
ну или написать сервер - тупо на сях - и забыть о проблеме

[identity profile] skif-by.livejournal.com 2013-04-03 09:07 am (UTC)(link)
Вы сделали мой день. Честно. Я восхищённо апплодирую стоя.

[identity profile] guamoka.livejournal.com 2013-04-03 09:27 am (UTC)(link)
сервер с синглтоном. вы не поняли.

[identity profile] norian.livejournal.com 2013-04-03 10:10 am (UTC)(link)
ну кстати один раз можно и сервер написать, не бином ньютона - и больше никогда не испытывать попаболи с генерацией

[identity profile] prepor.livejournal.com 2013-04-03 08:06 pm (UTC)(link)
да вы любите пофантазировать. вот вам https://github.com/twitter/snowflake

[identity profile] norian.livejournal.com 2013-04-03 10:58 pm (UTC)(link)
надо же .. скала

нет чтобы на плюсах хотя бы написать

[identity profile] norian.livejournal.com 2013-04-03 09:59 am (UTC)(link)
ну не всё же масэлэница .. надо и долги отдавать