Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: CL | DM;

Вниз

Оптимальный способо генерации ID (Оракл)   Найти похожие ветки 

 
ANB ©   (2005-12-30 12:10) [0]

Если БД одна, то все просто - крутим сиквенс с 1 и не паримся.
Сложнее, если инстансов много и нужна репликация. Тогда очень желательно обеспечить уникальность ID даже в разных базах.
Видел следующие подходы :
1. Собственно ID должен влезать в первые N (7) разрядов. В старшие разряды прописывается номер сервера/экземпляра. Шаг 1, сивквенс зацикливается.
2. Номер сервера пишем в N младших разрядов. Шаг соответствующий.
3. Номер сервера выносим в отдельное поле.
4. В качестве ID используем GUID.

Есть ли у кого мысли, как лучше сделать, или еще какой способ ?

ЗЫ. Ветку можно вынести в Потрепаться.


 
Vlad ©   (2005-12-30 12:48) [1]


> 3. Номер сервера выносим в отдельное поле.

в этом случае первичный ключ должен быть составной из 2-х полей.
Я бы предпочел вариант №2. IMHO, самый простой и надежный по реализации


 
Sergey13 ©   (2005-12-30 13:03) [2]

Мне больше 3 вариант нравится.
Можно еще диапазоны ИД-шникам выделить если серверов немного и их количество неизменно.


 
ANB ©   (2005-12-30 13:03) [3]

2-й вариант не очень удобен при проектировании БД. Потом надо будет все FK делать составными, начнутся прочие бяки.


 
Vlad ©   (2005-12-30 13:08) [4]


> Потом надо будет все FK делать составными

Это почему?


 
ANB ©   (2005-12-30 13:56) [5]


> ANB ©   (30.12.05 13:03) [3]

Упс. Это про 3-й.


 
ANB ©   (2005-12-30 13:59) [6]


> Vlad ©   (30.12.05 13:08) [4]

Второй вариант мне самому нравится больше всего. Но там, если отведешь мало разрядов, сильно ограничишь количество серверов, а если мало - ID очень быстро выйдут из Integer. Да и из Int64 можно умудриться вылезти. И в результате ID придется как строку на клиента доставать.


 
Sergey13 ©   (2005-12-30 14:00) [7]

2[3] ANB ©   (30.12.05 13:03)
[5] ANB ©   (30.12.05 13:56)
Ну и что? Зато все просто и наглядно. ИМХО.


 
Reindeer Moss Eater ©   (2005-12-30 14:06) [8]

а если мало - ID очень быстро выйдут из Integer.

Есть очень хорошее правило никогда не работать с integer на клиенте с использованием Oracle. А за апределы number вряд ли успеешь выйти до конца жизни.


 
Reindeer Moss Eater ©   (2005-12-30 14:13) [9]

В общем второй вариант самый простой и удобный.


 
ANB ©   (2005-12-30 14:14) [10]


>
> Reindeer Moss Eater ©   (30.12.05 14:06) [8]

Я обычно с Int64 работаю. А Integer - только для справочников.
А number - это да. 38 значащих цифр - это что то.


 
ANB ©   (2005-12-30 14:15) [11]


> Reindeer Moss Eater ©   (30.12.05 14:13) [9]

И сколько разрядов оптимально зарезервировать ?


 
Reindeer Moss Eater ©   (2005-12-30 14:22) [12]

Да фиг знает.
Тысячи серверов наверное достаточно.
Итого:  (сикванс * 1000) + номер сервера


 
Sergey Masloff   (2005-12-31 00:50) [13]

ANB ©   (30.12.05 13:59) [6]
>Второй вариант мне самому нравится больше всего. Но там, если отведешь >мало разрядов, сильно ограничишь количество серверов, а если мало - ID >очень быстро выйдут из Integer. Да и из Int64 можно умудриться вылезти. И >в результате ID придется как строку на клиента доставать.
Какой такой интежер-шминтеджер у тебя оракл и все 38 разрядов в твоем распоряжении. Работай с ним как с double на клиенте а на серваке хошь держи в дробной части номер сервера хошь в младших разрядах все опробовано и никаких проблем. Так что вариано 2 и не парься ;-) Такое мое скромное мнение независимого эксперта.



Страницы: 1 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
15-1139141206
Gero
2006-02-05 15:06
2006.02.26
Jpeg2000


2-1139212360
-=[ASH]=-
2006-02-06 10:52
2006.02.26
Сортировка


15-1139058841
VseHotjatIJaHo4u
2006-02-04 16:14
2006.02.26
Таймер, Т_Т


2-1139299456
Creative
2006-02-07 11:04
2006.02.26
Full Screen Mode


15-1139310662
Andy BitOff
2006-02-07 14:11
2006.02.26
Opera 9.0 Technology Preview 2 (сегодняшняя)