![]() |
| ||
|
|
Новости |
Поиск |
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 есть!) ?
Подскажите?????
ZrenBy (2004-02-10 11:34:00) [1]Тайна GUID :)
http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=22258
roottim (2004-02-10 11:21:00) [2]
> Digitman © (10.02.04 08:41) [48]
ну если быть математически :) точным вероятность сведется к вероятности появления 2-х сетевых с одинаковыми серийниками.
к чему все это.. смысл [24] то был по высказыванию [6] о том что
> мне как-то удобнее по логике id на клиенте генерить
>>не есть это хорошо, вероятность получения граблями по неуникальности перв.ключа повышается
вероятность получить одинаковый гуид на разных ПК гораздо ниже чем на сервере.. вот и все
Digitman (2004-02-10 08:41:00) [3]
> генерация гуид на основе сетевой карты дает гарантию не
> получить такой-же на другой машине с сетевой картой...
100%-ю гарантию может дать только господь бог)
в этом же случае речь идет лишь о весьма значительном уменьшении вероятности генерации одного и того же значения на разных машинах
roottim (2004-02-10 08:20:00) [4]
>Anatoly Podgoretsky © (09.02.04 15:58) [34]
причем тут 2^128? -> данное высказывание касается одной машины... действительно, генерация ключа на одной машине с сетевой картой происходит с н-ой долей вероятности получить такой-же
я же сказал только то что читал об этом..
генерация гуид на основе сетевой карты дает гарантию не получить такой-же на другой машине с сетевой картой...
(то-есть речь идет в контексте 2 ПК с разными сетевыми) по причине уникальности сер.номера сетевой карты...
>Любой человек немного знакомый с математикой понимает, что это не так
ну физмат то я заканчивал...
вы может считайте что генерация пойдет с 0, что позволит дать вашу колизию... ну а я думаю иначе...
y-soft (2004-02-10 08:19:00) [5]
По поводу использования GUID в IB - классическая статья Дмитрия Кузьменко: http://www.ibase.ru/devinfo/test2.htm
Digitman (2004-02-09 17:12:00) [6]
по-русски, на огурцах :
я подключился к серверу и говорю, мол, добавь в такую-то таблицу такую-то запись с перв.ключем = 100
сервер мне сообщает в OnReconcileError(), мол, такой перв.ключ записи уже существует
я тут же запрашиваю у сервера "свежий" GEN_ID, повторяю реконсайл, сервер "проглатывает"
замечательно ! у всех связанных таблиц в моей базе я в нужной послед-ти меняю ключ на "свежий"
аналогично - для модифицируемых записей
VLAD-MAL (2004-02-09 17:05:00) [7]
если локально-уникальное значение добавленной или модифицированной записи противоречит условиям глоб.уникальности
Оно не противоречит, я ж говорю, что ... и т.д.
Ну, ладно, похоже, разговор слепого с глухим.
Спасиба. Удачи.
Digitman (2004-02-09 16:59:00) [8]
> VLAD-MAL (09.02.04 16:53) [42]
Уважаемый, твоя тетка из Воронежа со своим нотбуком и базой - пуп земли ? Пусть в отрыве от сервера генерит свои локально-уникальные ключи, а при подключении к серверу сервер, если локально-уникальное значение добавленной или модифицированной записи противоречит условиям глоб.уникальности, сообщит тетке заведомо уникальный ключ ! И пусть тетка во всех связанных таблицах, где фигурирует проблемный ключ, заменит его на тот, что запросит у сервера, когда тот в ходе синхронизации записи будет ругаться !
VLAD-MAL (2004-02-09 16:53:00) [9]
Уважаемый, мне запихнуть запись любой ценой на сервак не главное - мне главное, чтобы id записи, которую сгенерил клиент, ГАРАНТИРОВАННО отличался от id записей, сгенерированных другими "локальными" и другими "надолго удаленными" клиентами.
Пример: тетка из Воронежа добавила новую позицию прайса "Воронежские котлеты", а потом сгенерила счет, позиция которого ссылается на эту позицию счета. В это время другой клиент в "основной" базе сгенерил другую позицию прайса "Саратовские гармошки" с тем же id. Как при переносе счета узнать, что эти позиции счета ссылаются, если их id вполне корректен?
Digitman (2004-02-09 16:44:00) [10]
при исполнении этого метода в случае искл.ситуаций, связанных. например, с нарушением уникальности ключа записи, ты можешь тут же запросить у сервера уник.значение генератора, заместить у себя в лок.базе некондиционное значение ключа вновь полученным и повторить реконсайл для этой записи
VLAD-MAL (2004-02-09 16:36:00) [11]
И...?
Digitman (2004-02-09 16:34:00) [12]
проблема - в неиспользовании (или неэффективном использовании) механизма delta-набора данных, формируемых этим компонентом
VLAD-MAL (2004-02-09 16:30:00) [13]
Что-то мы о разных вещах говорим...
Ты о кэшировании записи, я - о репликации...
Ну, и какая будет логика работы:
- имеется база данных, ~ 50 таблиц, как ни странно, связанных между собой;
- основная масса клиентов юзает в реал-тайме, по локалке, проблем нет;
- приезжает тетка из Воронежа, скачивает себе на ноут копию базы, и уезжает к себе в деревню... На неделю.
- эта зараза возвращается, в ее базе новые позиции прайса, новые клиенты, появились новые документы на основе новых позиций. Да, некоторые документы - на основании "старых" позиций.
- за время ее отсутствия у нас тоже ко-что изменилось.
Я хочу синхронизировать изменения!
И, кроме множества дополнительных заморочек, я хочу, чтобы у моих удаленных клиентов генерировались уникальные номера документов.
Да, я использую иногда TClientDataSet. И при чем тут моя проблема?
Digitman (2004-02-09 16:21:00) [14]
> VLAD-MAL (09.02.04 16:02) [36]
у TClientDataSet для этой цели есть замечательный метод ApplyUpdates()
ты вникал в суть и логику его использования/работы ?
VLAD-MAL (2004-02-09 16:02:00) [15]
Ну, Digitman-чик ( © (09.02.04 15:53) [32]) , ну, подскажи, как?
Может, я совсем заработался, очевидного под носом не вижу?
VLAD-MAL (2004-02-09 15:59:00) [16]
"Сетевая карта" - это типа карта Канады?
Anatoly Podgoretsky (2004-02-09 15:58:00) [17]
VLAD-MAL (09.02.04 15:52) [31]
Это было не к тебе, а к самоуверенному замечанию "гарантированно уникален". Любой человек немного знакомый с математикой понимает, что это не так.
А для тебя я сказал, что ты успеешь добежать до канадской границы даже при отсутствии сетевой карты.
VLAD-MAL (2004-02-09 15:54:00) [18]
Бывает.
Digitman (2004-02-09 15:53:00) [19]
> Как????
ты TClientDataset используешь ?
VLAD-MAL (2004-02-09 15:52:00) [20]
Ни как нет, после того как будет выдано 2^128 будет гарантированое повторение.
Ну, к этому времени я успею добежать до канадской границы.