![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поддержка GUID в InterBase/FireBird [D7, FireBird 1.5 RC8]
VLAD-MAL © (2004-02-09 14:16:00)
Оч. хочу для первичных ключей юзать GUID. (Ну, типа, меньше гемора с генераторами/триггерами (мелочь, конечно); а самое главное - вопросы с репликацией проще решаются...)
Для реализации фантазии хватает на тестовое поле (32символа) или на составной ключ из 2х BIGINT. Первое - как - то уж больно громоздко по объему, второе - несколько громоздко по реализации.
Кто-нибудь идет в этом направлении, или я один такой единственный и неповторимый (тупой и упрямый)?
Вообще, для IB/FB планируется ли введение такого типа данных (в MS SQL есть!) ?
Подскажите?????
Anatoly Podgoretsky (2004-02-09 15:49:00) [21]
roottim (09.02.04 15:36) [24]
Ни как нет, после того как будет выдано 2^128 будет гарантированое повторение. Гарантированная уникальность требует неограниченной длины последовательности. Это простая математическая теория.
Digitman (2004-02-09 15:47:00) [22]
тем более что запаса сквозного диапазона при использовании QWORD-счетчика - выше крыши ! век его не исчерпаешь ни при каких , даже самых "замороченных" репликациях
VLAD-MAL (2004-02-09 15:46:00) [23]
- зачем себе зарабатывать геморрой с диапазонами, если можно просто и с минимумом проблем вести сквозную нумерацию перв.ключа на сервере ... при любых задачах, в т.ч. и репликации
Как????
Скажи, я тебя пивом поить буду до конца недели!
У меня же клиенты с длительным отключением!
Digitman (2004-02-09 15:43:00) [24]
> и не знаете, зачем диапазоны нужны
представь себе - не знаю) ... именно не знаю - зачемсебе зарабатывать геморрой с диапазонами, если можно просто и с минимумом проблем вести сквозную нумерацию перв.ключа на сервере ... при любых задачах, в т.ч. и репликации
VLAD-MAL (2004-02-09 15:39:00) [25]
2 roottim (09.02.04 15:36) [24]
Да.
VLAD-MAL (2004-02-09 15:39:00) [26]
О, DigitMan, как Вы мне помогли (CHARACTER SET OCTETS...) , и не знаете, зачем диапазоны нужны...
Ну, это один из вариантов схемы репликации - когда каждому юзеру, владеющему экземпляром/фрагментом задается диапазон, начиная с которого у него генерится значение ключа (искуственного, автоинкрементного). GUID здесь не причем.
Спасибо!
roottim (2004-02-09 15:36:00) [27]
> [6]... что т я всегда думал, что гуид сформированный на разных ПК с сетевыми картами гарантированно уникален по соображению уникальности серйного номера сетевой карты..
по крайней мере они об этом говорят
Digitman (2004-02-09 15:35:00) [28]
> VLAD-MAL (09.02.04 15:31) [20]
так и я о том же) ... мне только непонятно, на кой шут какие-то там диапазоны нужны ?
VLAD-MAL (2004-02-09 15:34:00) [29]
2 Anatoly Podgoretsky © (09.02.04 15:32) [21]
Да-да, спасибо, эти подробности мне известны...
Anatoly Podgoretsky (2004-02-09 15:32:00) [30]
VLAD-MAL (09.02.04 15:25) [18]
Нужен прихнак операции - добавление/изменение, но врядли ты когда либо увидишь совпадение, тем более, что из твоих слов выходит, что сеть есть.
VLAD-MAL (2004-02-09 15:31:00) [31]
Да я не об этом, я об Вашем предложении использовании Field Type Int64 + generator"s.
Digitman (2004-02-09 15:28:00) [32]
> как распределять диапазоны значений для первичных
а зачем это вообще нужно ?
> GUID придумали ж, что же не юзать
любопытно, как это сочетается с "распределять диапазоны значений"
какой GUID тебе система выдала по твоему запросу, такой и запишешь в первичный ключ .. или ты каким-то образом собираешься распределять GUIDы по диапазонам ?
VLAD-MAL (2004-02-09 15:25:00) [33]
Вроде как о клиент-сервере идет речь
Клинет - сервер, но с дли-и-инными отключениями (сейчас - до недели доходит) не которых клиентов. Поэтому им копию базы бросаем. Потом - обратно.
при желании можно и новый GUID в этом случае сгенерировать
Да, конечно, но при репликации совпадение означает нечто другое, чем просто случайный повтор значения ключа. Впрочем, все равно спасибо за советы.
Anatoly Podgoretsky (2004-02-09 15:19:00) [34]
Вроде как о клиент-сервере идет речь, ну допустим, для переноса с помощью дискет немного ухудшается, врядли придется встретить и за миллион лет, но легко обходится на этапе внесения данных, при желании можно и новый GUID в этом случае сгенерировать, что гарантировать уникальность.
VLAD-MAL (2004-02-09 15:14:00) [35]
да фиг тебя знает - зачем)
1. Ну, DigitMan, вопрос срывается в сторону "а нафиг это надо..."
Ну, в лом мне заниматься такими вещами, как распределять диапазоны значений для первичных ключей между филиалами клиентов и их ноутбуками клиентов "на выезде". GUID придумали ж, что же не юзать?
2. FIB+ кто-нибудь юзал в пакете с "CHARACTER SET OCTETS COLLATE OCTETS" ?
Digitman (2004-02-09 15:10:00) [36]
> Смешно даже, ради чего же я GUID завожу?
да фиг тебя знает - зачем)
IB-семейство серверов с нек.пор уже умеет генерировать уник.значения типа BIGINT, этого с лихвой достаточно для решения любых задач, в т.ч. и достаточно сложной репликации
> Тогда бы меня генераторы вполне бы устроили
вот уж не знаю, почему они тебя не устраивают
меня так вполне они устраивают
> неуникальность перв. ключа - это как?
я имел ввиду попытку тебе как клиента добавить две записи с одинаковым значением в поле, являющееся перв.ключем, в рез-те чего исключение по попытке нарушения правил уникальности значений перв.ключа тебе обеспечено
И что, сервак такие вещи потерпит?
нет, конечно ...
VLAD-MAL (2004-02-09 15:08:00) [37]
Спасибище, монстры SQL и Delphi!
asp (2004-02-09 15:07:00) [38]
Не против :)
VLAD-MAL (2004-02-09 15:04:00) [39]
2 asp © (09.02.04 15:00) [11]
Понял, я думал - Вы по поводу длины
... VARCHAR(16) CHARACTER SET OCTETS
COLLATE OCTETS
vs
... CHARACTER(32)
То есть Вы не против варианта:
... CHARACTER (16) CHARACTER SET OCTETS
COLLATE OCTETS
???
А FIB+/IBX/BDE - компоненты позволяют в .AsString все подряд записывать?
asp (2004-02-09 15:00:00) [40]
VARCHAR - строка переменной длины. Это, разумеется, в большинстве случаев удобнее и храниться символов столько, сколько заполнено. Но СУБД при чтении "вынуждена оценивать" длину строки.
В случае CHARACTER СУБД читает количество символов определенных при объявлении столбца таблицы.
Поскольку GUID всегда одинаковой длины - логичнее объявить CHARACTER().