metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-10-23 11:27 am

Чувствую, что несу чушь,

но не могу отделаться от ощущения, что с эволюцией баз данных нас очень сильно наебали.
Это по поводу этого: http://plumqqz.livejournal.com/323506.html
Меня очень сильно бесит расхождение технологий: с одной стороны, классические СУБД, с другой NoSQL, с третьей - всякие in-memory распределенные базы, с четвертой - всякие аналитические БД с column storage, сжатием данных и перекосом в сторону чтения типа vertica, sybase iq или забиваторской QD. Плюс еще всякие datomic до которой я никак добраться не могу.

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

[identity profile] metaclass.livejournal.com 2012-10-23 09:57 am (UTC)(link)
А как в стандарте обстоят дела с двумя вещами: автоинкрементные поля/генераторы-секвенсы и возвращение результата последней DML операции (т.е. вернуть из insert/update значения полей, которые были автосгенерированы)?

(deleted comment)

[identity profile] nicka-startcev.livejournal.com 2012-10-23 10:10 am (UTC)(link)
Вот все и решают, разными несовместимыми и непереносимыми способами.
А потом жалуются на пиздец.
(deleted comment)

[identity profile] nicka-startcev.livejournal.com 2012-10-23 10:28 am (UTC)(link)
запад видим, восток не видим, да.

(Anonymous) 2012-10-23 05:58 pm (UTC)(link)
Тоесть проблемы индейцев шерифа.... Дык в жопу такого шерифа. Я думал я один такой дурак, но вот вопль "автоинкрементные поля/генераторы-секвенсы и возвращение результата последней DML операции (т.е. вернуть из insert/update значения полей, которые были автосгенерированы"

Это уже не просто вопль. В отличае от меня этот человек что, то пишет и не первый год и у него такие вот вопросы.

Насчет DB2 ну не знаю. MySQL и MS SQL по сравнению с ним это уже не то.
(deleted comment)

[identity profile] metaclass.livejournal.com 2012-10-23 07:02 pm (UTC)(link)
ADO сам по себе вроде не умеет же?

[identity profile] plumqqz.livejournal.com 2012-10-23 10:23 am (UTC)(link)
А, собственно, если так уж надо, то чего бы после инсерта-апдейта не запросить значения полей, которые были сгенерированы?

[identity profile] gds.livejournal.com 2012-10-23 10:29 am (UTC)(link)
как это сделать при вставке в таблицу в случае отсутствия любого другого ограничения уникальности, кроме того, которое включает автогенерируемый столбец?

[identity profile] plumqqz.livejournal.com 2012-10-23 10:31 am (UTC)(link)
То есть, если я правильно понимаю, в таблицу вставляется незнамо что? Странно как-то...

PS Написать собственный генератор айдюков, коли приспичило, как я смотрю, задача тоже непосильная.

[identity profile] gds.livejournal.com 2012-10-23 10:59 am (UTC)(link)
вставляется знамо что, но не обязанное быть уникальным.

про генератор -- по силам, конечно, но речь была про стандарт. Конечно, мне никуда не впёрлось перетаскивать программу с одной субд на другую, поэтому мне неактуально, но стандарт однако не даёт способа узнать последний вставленный id.

[identity profile] plumqqz.livejournal.com 2012-10-23 11:03 am (UTC)(link)
вставляется знамо что, но не обязанное быть уникальным.
Если вставляется то, что не является уникальным, то нахера оно вообще вставляется? Типа дублирование - ну вроде как для надежности? Как написал какой-то руководитель, "пришлите мне четыре прозрачных однопиксельных гифа".

про генератор -- по силам, конечно, но речь была про стандарт.
Я, собственно, про стандарт и пишу - т.е. написать собственными силами, используя стандартный sql-92, генератор айдюков не по силам. Ок, ясно.
Edited 2012-10-23 11:03 (UTC)

[identity profile] metaclass.livejournal.com 2012-10-23 11:22 am (UTC)(link)
Писать самодельный генератор ID? Срочно делитесь тайным знанием.

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-23 11:30 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-10-23 11:43 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-23 11:52 (UTC) - Expand

(no subject)

(Anonymous) - 2012-10-23 18:02 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-10-23 20:13 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-23 20:20 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-24 05:07 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-24 17:22 (UTC) - Expand
(deleted comment)

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-23 19:03 (UTC) - Expand

(Anonymous) 2012-10-23 06:00 pm (UTC)(link)
Что еще написать? может собственную СУБД? Нахрен она такая нужна которая обычную задачу не делает?

[identity profile] plumqqz.livejournal.com 2012-10-23 07:13 pm (UTC)(link)
Скажите, а вы хорами имена объектов не шифруете?

[identity profile] metaclass.livejournal.com 2012-10-23 10:33 am (UTC)(link)
insert into table ... values ... returning есть у Firebird, Oracle, Postgresql
SELECT SCOPE_IDENTITY() - mssql
LAST_INSERT_ID() - mysql
IDENTITY_VAL_LOCAL() - db2

[identity profile] plumqqz.livejournal.com 2012-10-23 10:35 am (UTC)(link)
Ну вот видите же.

[identity profile] metaclass.livejournal.com 2012-10-23 11:21 am (UTC)(link)
4 разных, не сводимых друг к другу простой заменой метода. Вижу.

[identity profile] plumqqz.livejournal.com 2012-10-23 11:23 am (UTC)(link)
Ну напишите свой генератор.

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-23 11:31 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-23 11:36 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-23 11:40 (UTC) - Expand

(no subject)

(Anonymous) - 2012-10-23 18:05 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-23 19:13 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-23 19:15 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-23 19:17 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-10-23 19:29 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-23 19:33 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-10-23 19:47 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-23 19:51 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-10-23 20:04 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-23 20:09 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2012-10-23 20:18 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-24 06:55 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-25 10:54 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2012-10-25 11:00 (UTC) - Expand

(no subject)

[identity profile] maxdz.livejournal.com - 2012-10-25 11:12 (UTC) - Expand

(Anonymous) 2012-10-23 06:02 pm (UTC)(link)
Причем очень смешно работает LAST_INSERT_ID() при многопоточности! Офигенно!

[identity profile] w00dy.livejournal.com 2012-10-23 11:24 am (UTC)(link)
Обычно возвращать нужно только pk записи. А его можно генерировать на клиенте, тот же гуид например. Я так делаю и меня эти вопросы не волнуют.

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

[identity profile] metaclass.livejournal.com 2012-10-23 11:33 am (UTC)(link)
GUID, да. 16 байт на PK, 16 байт в записях индексов и FK и прочих полей. Не уверен, что это гуманно.

[identity profile] w00dy.livejournal.com 2012-10-23 11:47 am (UTC)(link)
Зато pk всегда есть на клиенте, и когда создаёте записи то можно просто впихнуть пачку insert-ов, а не городить выборку непонятно чего.

[identity profile] volodymir-k.livejournal.com 2012-10-23 03:47 pm (UTC)(link)
В стандарте используются таблицы вида "tablename : last_pk_value"
либо (при наличии оптимизации и точки контроля) делают select max(id) + 1 from table / retry on commit fail

> т.е. вернуть из insert/update значения полей, которые были автосгенерированы

это уровень API, а не SQL