|
|
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за, возможно, глупый вопрос! Со специфическими тонкостями Firebird`а не знаком (с ней не приходилось работать), поэтому, возможно, что то ускользнуло от меня. В одной из FB-баз встретил в BI-триггерах код генерации уникального идентификатора записи, который любят использовать многие новички в SQL: Код: sql 1. Естественно, никаких блокировок БД/таблицы не производится. Вот и стало интересно - это корректный код для Firebird`а, или его писал как раз новичек, не задумавшись о последствиях при многочисленных сетевых запросах? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:03:07 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAэто корректный код для Firebird`а, или его писал как раз новичек, не задумавшись о последствиях при многочисленных сетевых запросах? Если это действительно генерация уникального идентификатора, то - нет, этот дебилизм действительно работает только в монопольном режиме. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:08:38 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Hello, OlegROA! You wrote on 14 января 2014 г. 18:06:49: OlegROA> Вот и стало интересно - это корректный код для Firebird`а, > или его писал как раз новичек примерно в 99,99% случаев это написано школьником. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:08:41 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA, А с какой СУБД работать приходилось? Потому что никакой специфики тут нет, один г**код. Который, как верно подмечено, приведёт к коллапсу уже на 1.5 пользователях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:09:12 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAПрошу прощения за, возможно, глупый вопрос! Со специфическими тонкостями Firebird`а не знаком (с ней не приходилось работать), поэтому, возможно, что то ускользнуло от меня. В одной из FB-баз встретил в BI-триггерах код генерации уникального идентификатора записи, который любят использовать многие новички в SQL: Код: sql 1. Естественно, никаких блокировок БД/таблицы не производится. Вот и стало интересно - это корректный код для Firebird`а, или его писал как раз новичек, не задумавшись о последствиях при многочисленных сетевых запросах? Спасибо! Ну раз FB его пропустил то значит корректный, но писали не задумавшись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:09:15 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
m7m, Код: sql 1. тоже корректный, с точки зрения синтаксиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:10:47 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийпримерно в 99,99% случаев это написано школьником. Из ДЮСШОР по боксу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:39:54 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
WildSerym7m, Код: sql 1. тоже корректный, с точки зрения синтаксиса. А уж к DROP DATABASE и вообще с точки зрения синтаксиса не придраться! ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:41:16 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
WildSery, Kotъ-Begemotъ Да ладно вам каков был вопрос, таков был и ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 18:50:52 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
WildSeryOlegROA, А с какой СУБД работать приходилось? Потому что никакой специфики тут нет, один г**код. Который, как верно подмечено, приведёт к коллапсу уже на 1.5 пользователях.Много лет работал (и работаю) с десктопными СУБД, а из SQL - несколько лет с MSSQL и MySQL. Понимаю, конечно, что для любого разработчика более-менее разбирающегося в SQL, вышеприведенный мною код - мягко говоря, некорректен. Но, к примеру, в FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql. Поэтому и подумал - может и BI-триггеры в Firebird имеют какую-либо специфику (типа неявной блокировки таблицы на время его выполнения)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:03:23 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA, триггеры отрабатывают в контексте транзакции. Никаких блокировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:09:29 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAНо, к примеру, в FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql. Да щаз! MySQL есть VARIABLES, которые можно и как генераторы приспособить. OlegROAПоэтому и подумал - может и BI-триггеры в Firebird имеют какую-либо специфику (типа неявной блокировки таблицы на время его выполнения)? Нет такого. Весь смысл генератора в том, что он транзитивно независим. Поэтому, независимо от уровня изоляции транзакции, он всегда вернет следующее значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:10:51 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Hello, PEAKTOP! You wrote on 14 января 2014 г. 19:16:57: PEAKTOP> Весь смысл генератора в том, что он транзитивно независим. не нужно кидаться словами смысл которых не до конца понимаешь. PEAKTOP> Поэтому,независимо от уровня изоляции транзакции, он всегда вернет следующее > значение.да шо вы такое говорите? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 19:19:33 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAв FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql. Это какие? Identity, autoincrement и sequences вполне существуют в MS SQL и MySQL, хотя последние и не очень давно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 20:02:54 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAМного лет работал (и работаю) с десктопными СУБДТам тоже НИКОГДА нельзя полагаться на max(id). Всё делается через вспомогательную таблицу счётчиков, запись которой сначала блокируется, затем увеличивается значение соотв. поля в ней и только после этого зхапись высвобождается, а полученное новое значение возвращается "потребителю". Если у вас много лет получение нового Id идёт через max(...) и не случалось "странных дубликатов", то... всем бы так везло! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 20:29:02 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
код синтаксически корректен, но не более того. а. можно использовать генераторы. б. гуиды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 20:42:03 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovOlegROAв FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql.Это какие? Identity, autoincrement и sequences вполне существуют в MS SQL и MySQL, хотя последние и не очень давно.Классического Firebird генератора уникальных значений sequences, увы, в MySql нет! Только autoincrement, которого иногда недостаточно. Можно, конечно, эмулировать его автоинкрементируемым полем в отдельной таблице, но это уже другая тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:20:16 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA, Дмитрий имел ввиду sequence который появились в MS SQL 2012. В MySql этого конечно же нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:29:14 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
ТаблоидOlegROAМного лет работал (и работаю) с десктопными СУБДТам тоже НИКОГДА нельзя полагаться на max(id).Можно, можно! Естественно, только в режиме полной блокировки рабочей таблицы. Чего нет, к примеру, в MySql. ТаблоидЕсли у вас много лет получение нового Id идёт через max(...) и не случалось "странных дубликатов", то... всем бы так везло!Еще раз - такой алгоритм использую только в десктопных базах и только в режиме блокировки таблицы. А в SQL (mssql и mysql) использую, естественно, автоинкрементное поле. Но лично мне иногда в mysql не хватает классического sequences Firebird`а! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:38:53 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAТаблоидпропущено...Там тоже НИКОГДА нельзя полагаться на max(id).Можно, можно! Естественно, только в режиме полной блокировки рабочей таблицы.1) Залочивание всей таблицы, даже на короткое время, будет заклинивать ваш "перформанс", юзера непременно будут видеть это - и те, кто пытается её залочить, но должен ждать высвобождения, и те, кто ждут, пока её высвободит тот, кто определяет новый ИДшник. В dBase-приложениях это проявляется уже на 20...30 юзерах, если они действительно что-то делают 2) вы, конечно же, будете определять max(id) по индексу (не делать же переход на последнюю запись! там ведь может - в результате всяких перетряхиваний таблицы - оказаться далеко не самый последний по значению Id) - ? И что будете делать при сломанном индексе (а это вполне обычная для десктопов вещь) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:52:13 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Рассуждать с т.з. сломанного индекса - это что-то новое в современной проктологии. Если БД (в т.ч. индексы в ней) поломаны - то как получены значения любых столбцов (в т.ч. PK) уже малоинтересно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 09:56:43 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамРассуждать с т.з. сломанного индекса - это что-то новое в современной проктологии.Да тут не проктология, тут хуже: когда в xBase ломаются индексы, то происходит это очень тихо. Никаких сообщений в "логе" (которого вообще нет :)). И только через некоторое время будет вываливаться сообщение 'index corrupted', когда в таблицу уже натолкано энное кол-во некорректных данных (дублей, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:16:09 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAМожно, можно!Давайте не будем пропагандировать говнокод и разжигать флуд на этом. Спасибо за понимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:19:32 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Таблоидкогда в xBaseЭто чудо инженерной мысли времен ЦаряГороха кому-то интересно в нашем разделе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:21:32 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Таблоид> Да тут не проктология, тут хуже Спрашивается, при чём тут тогда генераторы, PK и т.д. А если сервак сдохнет - это ж ваще капец что будет... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 10:31:49 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Ivan_PisarevskyOlegROAМожно, можно!Давайте не будем пропагандировать говнокод и разжигать флуд на этом. Спасибо за понимание.Прочтите, пожалуйста, все обсуждение прежде, чем делать подобные заявления! Мой ответ касается алгоритма определения уникального идентификатора в десктопных базах, где нет серверной части и, соответственно, нет вообще такого понятия, как поля-автоинкременты и прочие SQL-вкусности! Поэтому в таких базах вся логика генерации уникального идентификатора реализуется исключительно в клиентской программе и основана ТОЛЬКО на одном из двух алгоритмах: 1. блокировка всей таблицы, получение максимального значения автонумеруемого поля, добавление новой записи с новым ид, разблокировка таблицы. 2. использование отдельной таблицы для генерации уникальных идентификаторов - блокировка всей этой таблицы или только нужной записи (если движек БД умеет это делать - не все настольные БД это умеют), считывание текущего значения нужного счетчика, увеличение значение, апдейт нового значения, разблокировка записи или таблицы. Других корректных алгоритмов для этих БД не придумали! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:04:59 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAДругих корректных алгоритмов для этих БД не придумали!В нашем разделе обсуждается вполне конкретный SQL сервер, где есть как минимум 2 валидных пути получение уникальных идентификаторов. Если у кого-то чего-то не хватает это ведь не проблема файрбера? Десктопные БД оффтоп для нашего раздела. Так понятнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:22:05 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA, дело в том, что ответ на изначальный вопрос был дан в уже давно. То как это делается в десктопных СУБД всем до лампочки. Так что дальнейшую дискуссию считаю бессмысленной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:23:01 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA> десктопных базах, где нет серверной части и, соответственно, OlegROA> нет вообще такого понятия, как поля-автоинкременты А это, простите, кто вообще? "Десктоп"-варианты основных СУБД сохраняют весь функционал, Access тоже. FVMas какой-то что ли? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 11:45:50 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Для общего развития, так сказать - не все СУБД имеет смысл делать на SQL-серверах. Именно для таких СУБД используются "десктопные" базы, которые представляют собой всего лишь хранилища данных. Вся обработка в таких базах производится клиентской программой, которая использует библиотеки для работы с такими хранилищами. Это, к примеру, базы форматов dBase, Clipper, FoxPro, Btrieve, Clarion, Topspeed и подобные. Эти базы не являются анахронизмом и используются не менее интенсивно, чем SQL-сервера. В общем, если есть интерес то почитайте. Я же заканчиваю это обсуждение, т.к. с помощью здешних знатоков узнал все, что хотел узнать по вопросу этого топика. За что им большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 01:39:41 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROA> Для общего развития, так сказать - не все СУБД имеет смысл делать на SQL-серверах. Это сразу в мемориз. > Именно для таких СУБД используются "десктопные" базы, > которые представляют собой всего лишь хранилища данных. Вы не путаете десктопную БД и десктопную СУБД? А индексы в этих хранилищах данных предусмотрены? > Эти базы не являются анахронизмом и используются > не менее интенсивно, чем SQL-сервера. Ну-ну... За общее развитие спасибо, конечно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 07:20:09 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
Еще NoSQL забыли ... для общего развития.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 09:15:29 |
|
||
|
Формирование уникального идентификатора
|
|||
|---|---|---|---|
|
#18+
OlegROAДля общего развития, так сказать - не все СУБД имеет смысл делать на SQL-серверах.Проблемы негров и индейцев шерифа не волнуют (с). OlegROAЯ же заканчиваю это обсуждение, т.к. с помощью здешних знатоков узнал все, что хотел узнать по вопросу этого топика.Вот и славно, на том и закончим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2014, 12:52:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563975]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 186ms |
| total: | 432ms |

| 0 / 0 |
