![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Генератор уникального значения [MSSQL]
Ш-К © (2005-01-13 15:09:00)Как в MSSQL сгенирировать уникальный 4-х байтный идентификатор. Генератор общий на всю базу.
Val (2005-01-14 09:45:00) [1]>[3] sniknik © (13.01.05 15:21)
у них мозги по другому повернуты, с их отличной от других системой генераторов.
>[15] sniknik © (13.01.05 20:45)
но попробуй эту логику в другие базы перенести, и ...
Думаю, абсолютно спокойно можно провести аналогию с оракловскими сиквенсес, например.
sniknik (2005-01-13 20:45:00) [2]> Изврат какой-то...
нормальная практика в IB (зачем к примеру "рисовать" кучу генераторов если все таблици на один можно "повесить", вот и получился "сквозной" через всю базу. но попробуй эту логику в другие базы перенести, и ... ;о)))
> В итоге все транзакции на вставку по всем таблицам (где я юзаю идентификатор) ставятся в очередь. Вот и тормоза.
ты что в монопольной транзакции при начале редактирования ту таблицу открываеш? ;о)) (записал, прочитал, бросил, вот достойная логика, и никаких тормозов ;)
Ega23 (2005-01-13 16:36:00) [3]Не генератор - идентификатор о котором и речь. Тот, что 4 байта. Он общий для всех таблиц.
Изврат какой-то...
Ш-К (2005-01-13 16:32:00) [4]Не генератор - идентификатор о котором и речь. Тот, что 4 байта. Он общий для всех таблиц.
Ega23 (2005-01-13 16:26:00) [5]Генератор общий на всю базу.
Не на одну таблицу.
В итоге все транзакции на вставку по всем таблицам (где я юзаю идентификатор) ставятся в очередь. Вот и тормоза.
?????????? Несколько раз прочитал, ничего не понял.
Какой генератор?
Ш-К (2005-01-13 16:24:00) [6]Ega23 © (13.01.05 16:09) [10]
Генератор общий на всю базу.
Не на одну таблицу.
В итоге все транзакции на вставку по всем таблицам (где я юзаю идентификатор) ставятся в очередь. Вот и тормоза.
Ega23 (2005-01-13 16:09:00) [7]Два юзера будут делать вставку в Table1 одновременно.
На одной таблице не могут 2 транзакции одновременно пройти. Они встанут в очередь. Так что сначала один, а потом - второй. Ну а если identity - вааще по барабану, сервер сам всё отследит.
Ш-К (2005-01-13 16:03:00) [8]Ega23 © (13.01.05 15:57) [8]
Два юзера будут делать вставку в Table1 одновременно.
Ega23 (2005-01-13 15:57:00) [9]А когда много клиентов?
Ну и что? Много - это сколько?
Ш-К (2005-01-13 15:49:00) [10]Ega23 © (13.01.05 15:33) [5]
А когда много клиентов?
Polevi © (13.01.05 15:39) [6]
Такое не оттранслируется.
All
А ели брать чексум то GUID? Так не проще будет? Где больше подводных камней?
Polevi (2005-01-13 15:39:00) [11]CREATE PROCEDURE GETID @Id INT OUT AS
UPDATE SEEDS SET ID=ID+@How, @Id=ID
GO
Ega23 (2005-01-13 15:33:00) [12]Каждая тр. на вставку будет блокировать таблицу. В тормоза жуткие выльеца. Не говоря о дидлоках.
Ничего не выльется. Хочешь уникальности - на тебе Identity. Не хочешь -
Declare @X int Select @X=Max(ID)+1 from Table1
Insert into Table1 (ID) Values (@X)
Ш-К (2005-01-13 15:30:00) [13]sniknik © (13.01.05 15:18) [2]
Каждая тр. на вставку будет блокировать таблицу. В тормоза жуткие выльеца. Не говоря о дидлоках.
sniknik © (13.01.05 15:21) [3]
Да перебрался.)
sniknik (2005-01-13 15:21:00) [14]Stanislav © (13.01.05 15:17) [1]
так первое не "сквозное" на всю базу а второе 16 байт. ;о))
а Ш-К явно в MSSQL с IB/или клона перебрался, у них мозги по другому повернуты, с их отличной от других системой генераторов. ;о)).
sniknik (2005-01-13 15:18:00) [15]сделай автоинкремент в левой таблице, при любом добавлеии в базу добавляй и туда, потом получившийся автоинкремент используй как это уникальное значение. (попробуй это в тригере реализовать, тогда не нужно будет заботится при каждой записи)
Stanislav (2005-01-13 15:17:00) [16]А Identy зачем или GUID ?