powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обеспечение уникальности PK в распределенной БД
7 сообщений из 7, страница 1 из 1
Обеспечение уникальности PK в распределенной БД
    #32233720
ICU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICU
Гость
Исходная ситуация :

1. Есть распределенная БД. Связь между отдельными БД поддерживается по е-мейлу, дискетами (пересылка пачек данных самодельным репликатором)
2. Данные из отдельных БД должны без коллизий, обусловленных одинаковыми PK, сливаться в любую из этих автономных БД.
3. Во всех случаях используется Windows-платформа.

Требуется обеспечить уникальность PK записей в масштабе всей распределенной БД.

Известные решения :
1. Разнесение диапазонов идентификаторов записей путем индивидуальной инициализации генераторов для каждой автономной БД.
2. Привлечение особого (уникального для каждой БД) числового "кода БД", который также "оседает" в PK.

Недостатки этих решений :
1. в жестком варианте (пока администратор не даст добро задача не будет работать) тратится много времени на ожидание действий админа, доставку регистрационного ключа и появляется дополнительная "головная боль" с централизованным учетом диапазонов/кодов
2. в мягком варианте (когда пользователи сами могут взять и применить настройки из разрешенных диапазонов) возникают другие проблемы :
- разные подразделения "выезжают" за пределы разрешенных для использования диапазонов и соответственно могут пересечься.
- используют более одной автономной базы под одним "кодом БД"
- поработав в базе под "кодом"=Х отправляют из нее данные в другие базы, после чего базу убивают, восстанавливают из архива чистую базу и присваивают ей опять "код БД"=Х

Поэтому к первоначальной фомулировке задачи я добавлю автоматически поддерживаемая уникальность PK (т.е. без какого-либо участия человека в настройке системы)

Подумав, я заключил, что достаточным основанием для уникальности служит тезис о невозможности работы одного и того же оборудования в разных местах (подразделениях/компьютерах) в одно и то же время. Значит привязку нужно делать к железу и времени.

Время : select current_timestamp from rdb$database
Железо : VolumeSerialNo из API-шной GetVolumeInformation

Обе эти величины представимы в виде 4-байтового числа, а значит, в состав PK таблиц требуется ввести 2 дополнительные колонки integer. Дальше уже дело техники и триггеров на вставку...

Есть ли еще не такие "корявые" решения как у меня?
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233724
Petrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать первиный ключ в виде GUID - а и пуст Бил Гейтс заботится об уникальности
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233748
ICU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICU
Гость
От привязки ко времени создании записи нельзя отказываться и при использовании GUID. Навскидку приведу 2 ситуации :

1. Компьютер работал под задачей в одном подразделении, после чего его целиком передали в другое подразделение и скопировали на него другую автономную базу.
2. поработав в базе пользователь отправляет из нее данные в другие базы, после чего базу убивает, восстанавливает из архива чистую БД и продолжает работать в ней.

В обоих случаях получается, что файлы БД эксплуатировались разные, а GUID один и тот же.
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233758
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может я что не понимаю, но GUID генерируется в зависимости от времени...
он генерируется УНИКАЛЬНЫМ ДЛЯ ЛЮБОГО КОМПА, В ЛЮБОЙ МОМЕНТ ВРЕМЯНИ. По крайней мере по утверждению Microsoft... Равно как на нем базируются гораздо более сложные технологии типа COM....
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233775
ICU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ICU
Гость
А какой функцией он генерится?

И разве он не будет больше 8 байтов?
Естесственно, чем больше, тем хуже для производительности IB.
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233792
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по мойму он и занимает 8 байт (на скорость не должно влиять)
генерится функцией CoCreateGuid
...
Рейтинг: 0 / 0
Обеспечение уникальности PK в распределенной БД
    #32233815
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, сорри, ошибочка была длинна этого идентификатора 128 бит, тобишь 16 байт... но можно попробовать чтото обрезать?...
надо только знать что обрезать :))
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обеспечение уникальности PK в распределенной БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]