Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почти уникальный ID


Страницы:   1 2 3

novichek ©   (2011-03-04 16:22:00) 

Преследуя репликацию, где данные с клиентов могут передаваться разным способом, необходимо генерировать уникальный ID.

локальное отделение вероятно будет иметь не более 10 ПК.

Как вы думаете, можно ли использовать для генерации уникального ID записи данную функцию?

ID:= genUniID(kodOtdela)
...

function genUniID(id: byte): Int64;
var
 x: Int64;
 y, m, d, ss: Word;
begin

 x:= id;

 DecodeDate(date, y, m, d);

 y:= y and 15;
 x:= x shl 4;
 x:= x + y;
 x:= x shl 4;
 x:= x + m;
 x:= x shl 5;
 x:= x + d;

 DecodeTime(time, y, m, d, ss);

 x:= x shl 5;
 x:= x + y;
 x:= x shl 6;
 x:= x + m;
 x:= x shl 6;
 x:= x + d;
 x:= x shl 7;
 x:= x + ss;

 x:= x shl 7;

 result:= x + random(128);

end;


это первое что пришло в голову..

может есть какие красивые варианты?
пока опыта ноль..


Anatoly Podgoretsky   (2011-03-05 11:51:00) [1]

> DiamondShark  (05.03.2011 11:16:49)  [49]

Он наверно думает, что что то проиграет при увеличении с 32 до 36 байт.
Современный процессор делает миллиарды операций и замедление выполнения
запроса с 10 мс до 12 можно заметить, только многичисленными измерениями.


Inovet   (2011-03-05 11:26:00) [2]

> [49] DiamondShark ©   (05.03.11 11:16)
> > FireBird как и посоветовали.
>
> Фигню посоветовали

Советовали в теме про обучение вообще, оказалось для реальной работы. Впрочем, можно было и MSSQL посоветовать.


DiamondShark   (2011-03-05 11:16:00) [3]


> novichek   (04.03.11 16:31) [4]
> FireBird как и посоветовали.

Фигню посоветовали. Впрочем, на делпхимастере другого не советуют, обычно.


>  ну как понимаю GUID будет храниться в строке.

Как я понимаю, GUID должен храниться как GUID. Нормальные СУБД имеют соответствующий тип.


> как то ключеврой индекс не хочется иметь строку.

Не имей, если не хочется.


Противный   (2011-03-05 10:28:00) [4]

> _Юрий   (05.03.11 01:04) [42] Гуид только для слияния, а связи все по инт-полю.

Э-э-э... переведи. Только в терминах реляционной теории. Потому что "слияние" у меня ассоциируется с другим. Не менее приятным. Но другим...

Да, и откуда взялось "инт-поле"?


Anatoly Podgoretsky   (2011-03-05 09:27:00) [5]

> KilkennyCat  (05.03.2011 04:26:43)  [43]

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


Anatoly Podgoretsky   (2011-03-05 09:26:00) [6]

Кстати ничто не мешает ему быть числовым, в большинстве СУБД так и есть, а человек путает предствление с хранением, вот так и появляются, мол хранит даты в формате dd.mm.yyyy


Anatoly Podgoretsky   (2011-03-05 09:23:00) [7]

> KilkennyCat  (05.03.2011 00:44:40)  [40]

А психология, слышал что это плохо.


Anatoly Podgoretsky   (2011-03-05 09:23:00) [8]

> Юрий Зотов  (05.03.2011 00:18:39)  [39]

Да хватит и для наших правнуков.


KilkennyCat   (2011-03-05 04:26:00) [9]


> Гуид только для слияния, а связи все по инт-полю. На гуид
> обычный уникальный индекс

масло масляное


_Юрий   (2011-03-05 01:04:00) [10]


> Противный   (04.03.11 20:50) [33]
>
> > _Юрий   (04.03.11 20:30) [32] Первичным ключом не делать,
>  там обычный автоникремент.
>
> Как тебя понимать?
>
> > _Юрий   (04.03.11 20:30) [32] 3 года работы полет нормальный.
>
>
> Ну и? Предлагаешь везде в качестве ключей использовать GUID?
>


Нет. Гуид только для слияния, а связи все по инт-полю. На гуид обычный уникальный индекс


b z   (2011-03-05 00:55:00) [11]

Ид не обязан быть ключом для репликации, и наоборот.


KilkennyCat   (2011-03-05 00:44:00) [12]


> novichek   (04.03.11 22:51) [38]
и не строку..

а какая разница, строка или нет?


Юрий Зотов   (2011-03-05 00:18:00) [13]

Пожиратели GUID'ов, не приближайте день X.


novichek   (2011-03-04 22:51:00) [14]

ну так куда 128 бит? два поля делать?

ид уникальный должен быть в нескольких таблицах.
где потом и будут например связи один ко многим..

желательно под ид иметь одно поле.. и не строку..


KilkennyCat   (2011-03-04 22:38:00) [15]


> все-таки думаю временной штамп + CRC мак сетевухи вполне
> пойдет

велосипед.
я тоже недавно изобретал такой велосипед.
Спасибо, Юрий Федоров избавил от сего извращения: GUID и на этом все.


novichek   (2011-03-04 22:31:00) [16]

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

все-таки думаю временной штамп + CRC мак сетевухи вполне пойдет..


Inovet   (2011-03-04 21:26:00) [17]

> [34] KilkennyCat ©   (04.03.11 21:19)
> дык генератор-то тогда зачем?

Так это в ИБ ФБ терминологии генератор. Для отделения № 2 выставить начальное значение 2000000000000 и пусть растёт, предполагаем, что в таблице не будет более 1000000000000 записей. И так для каждой таблицы. Это если ИД отделения в отдельном поле не надо.


KilkennyCat   (2011-03-04 21:19:00) [18]


> Inovet ©   (04.03.11 18:31) [31]

дык генератор-то тогда зачем? выделить всем свой диапазон и все.


Противный   (2011-03-04 20:50:00) [19]

> _Юрий   (04.03.11 20:30) [32] Первичным ключом не делать, там обычный автоникремент.

Как тебя понимать?

> _Юрий   (04.03.11 20:30) [32] 3 года работы полет нормальный.

Ну и? Предлагаешь везде в качестве ключей использовать GUID?


_Юрий   (2011-03-04 20:30:00) [20]

Guid + индекс. Первичным ключом не делать, там обычный автоникремент.
3 года работы полет нормальный.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо