Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как создать гарантированно повторяемый GUID записи.  [new]
axe123456789
Member

Откуда:
Сообщений: 13
Ситуация следующая из набора xml-файлов идет запись информации на SQL сервер. Случаются сбои когда сервер лег. В результате какая-то информация записалась из файлов, а некоторая нет. Как формировать GUID записей(операций) из файлов, чтобы гарантированно не формировались новые уникальные GUID на те записи которые уже в БД есть.
Какие есть варианты?
26 май 11, 18:04    [10715440]     Ответить | Цитировать Сообщить модератору
 Re: Как создать гарантированно повторяемый GUID записи.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
axe123456789
Случаются сбои когда сервер лег.
Эгегей, весело у вас там.
axe123456789
Как формировать GUID записей(операций) из файлов, чтобы гарантированно не формировались новые уникальные GUID на те записи которые уже в БД есть.
Проверять, не записано ли уже то, что вы пытаетесь записать.
26 май 11, 18:08    [10715460]     Ответить | Цитировать Сообщить модератору
 Re: Как создать гарантированно повторяемый GUID записи.  [new]
iljy
Member

Откуда:
Сообщений: 8711
axe123456789,

странное что-то вы говорите. Ситуация, когда "сервер лег" - это настолько серьезный сбой, что тут не о том, чтобы повторно данные не занести, надо думать, а о том как всю систему спасти. Так что хрень вы какую-то думаете.
26 май 11, 18:09    [10715464]     Ответить | Цитировать Сообщить модератору
 Re: Как создать гарантированно повторяемый GUID записи.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Выбирайте:
  • Транзакции
  • промежуточные состояния (нафига загружать опять с первого файла?)
  • объединения xml

    Про GUID забудьте.

    Гавриленко Сергей Алексеевич
    axe123456789
    Случаются сбои когда сервер лег.
    Эгегей, весело у вас там.
    Ой не говорите. Сложно всё так.
    Дурная голова не даёт покоя ... всему управлению/организации.
  • 26 май 11, 19:45    [10715845]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    axe123456789
    Member

    Откуда:
    Сообщений: 13
    Mnior,

    Такая ситуация реально произошла один раз.

    Ситуация еще более сложная, поэтому все ваши варианты отметаются по той причинек, что каждая операция? занесенная в Центральную БД имеет свой GUID. Есть еще пользователи более 100 локальных БД, которые общаются с Центральной БД и заносят информацию через xml-файлы(пакеты своих изменений) и знают из Центральной БД (ЦБД) только GUID операции.
    То есть действия такие пользователя с локальной БД и ситуация:
    1. Внесли данные об произведенной операции1.
    2. ЦБД отдала пользователю GUID=1 для операции1.
    3. ЦБД упала.
    4. ЦБД восстановилили и накатили пакеты информации из файлов (получились новые GUID=2 для уже зарегистрированных операций1 !).
    4. Пользователь вносит изменения по операции1. Ему ЦБД говорит что такая операция не зарегистрирована!

    Таже ситуация возникает в случае когда:
    1. Есть две оперативные БД.
    2. Задача стоит объединить две БД. БД обе достаточно большие, поэтому период объединения длительный (более недели) из дополнительных расчетов и преобразований.
    3. В период объединения пользователи в обе БД пишут. И опять требуется обеспечить, чтобы не возникла ситуация когда GUID операции не зарегистрирован.
    27 май 11, 10:51    [10717755]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    axe123456789
    Mnior,

    Такая ситуация реально произошла один раз.

    Ситуация еще более сложная, поэтому все ваши варианты отметаются по той причинек, что каждая операция? занесенная в Центральную БД имеет свой GUID. Есть еще пользователи более 100 локальных БД, которые общаются с Центральной БД и заносят информацию через xml-файлы(пакеты своих изменений) и знают из Центральной БД (ЦБД) только GUID операции.
    То есть действия такие пользователя с локальной БД и ситуация:
    1. Внесли данные об произведенной операции1.
    2. ЦБД отдала пользователю GUID=1 для операции1.
    3. ЦБД упала.
    4. ЦБД восстановилили и накатили пакеты информации из файлов (получились новые GUID=2 для уже зарегистрированных операций1 !).
    4. Пользователь вносит изменения по операции1. Ему ЦБД говорит что такая операция не зарегистрирована!

    Таже ситуация возникает в случае когда:
    1. Есть две оперативные БД.
    2. Задача стоит объединить две БД. БД обе достаточно большие, поэтому период объединения длительный (более недели) из дополнительных расчетов и преобразований.
    3. В период объединения пользователи в обе БД пишут. И опять требуется обеспечить, чтобы не возникла ситуация когда GUID операции не зарегистрирован.

    У вас ведь GUID используется, ну так сделайте, чтобы GUID операции генерился в локальной БД, а не в центральной.
    27 май 11, 11:31    [10718134]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    axe123456789
    Member

    Откуда:
    Сообщений: 13
    invm
    axe123456789
    Mnior,

    Такая ситуация реально произошла один раз.

    Ситуация еще более сложная, поэтому все ваши варианты отметаются по той причинек, что каждая операция? занесенная в Центральную БД имеет свой GUID. Есть еще пользователи более 100 локальных БД, которые общаются с Центральной БД и заносят информацию через xml-файлы(пакеты своих изменений) и знают из Центральной БД (ЦБД) только GUID операции.
    То есть действия такие пользователя с локальной БД и ситуация:
    1. Внесли данные об произведенной операции1.
    2. ЦБД отдала пользователю GUID=1 для операции1.
    3. ЦБД упала.
    4. ЦБД восстановилили и накатили пакеты информации из файлов (получились новые GUID=2 для уже зарегистрированных операций1 !).
    4. Пользователь вносит изменения по операции1. Ему ЦБД говорит что такая операция не зарегистрирована!

    Таже ситуация возникает в случае когда:
    1. Есть две оперативные БД.
    2. Задача стоит объединить две БД. БД обе достаточно большие, поэтому период объединения длительный (более недели) из дополнительных расчетов и преобразований.
    3. В период объединения пользователи в обе БД пишут. И опять требуется обеспечить, чтобы не возникла ситуация когда GUID операции не зарегистрирован.

    У вас ведь GUID используется, ну так сделайте, чтобы GUID операции генерился в локальной БД, а не в центральной.

    Спасибо это как вариант, одно но - еще надо обеспечить, чтобы локальные БД каждого пользователя генерили свои уникальные GUID и не могли совпасть.
    27 май 11, 12:16    [10718582]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    axe123456789,

    GUID
    27 май 11, 12:40    [10718820]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    axe123456789
    Member

    Откуда:
    Сообщений: 13
    invm
    axe123456789,

    GUID


    Спасибо :) уже читал. Надеюсь тоже что вероятность совпадения будет мизерна.
    27 май 11, 13:05    [10719094]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    axe123456789
    1. Внесли данные об произведенной операции1.
    2. ЦБД отдала пользователю GUID=1 для операции1.
    Шо за.
    invm
    У вас ведь GUID используется, ну так сделайте, чтобы GUID операции генерился в локальной БД, а не в центральной.
    Вот где собака порылась.

    И не думал что GUID у вас кого-либо генерися не на клиенте. Это видимо не до конца поняли концепцию GUID.
    Оборваться может на любом этапе все-е-ей дли-и-инной цепочки. GUID должно быть ещё до её начала.
    27 май 11, 16:36    [10721336]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    Mnior
    invm
    У вас ведь GUID используется, ну так сделайте, чтобы GUID операции генерился в локальной БД, а не в центральной.
    Вот где собака порылась.

    И не думал что GUID у вас кого-либо генерися не на клиенте. Это видимо не до конца поняли концепцию GUID.
    Оборваться может на любом этапе все-е-ей дли-и-инной цепочки. GUID должно быть ещё до её начала.

    1. Эээ... Я тут с какого бока?
    2. Если у клиента нет возможности сгенерить GUID, то все, трындец?
    27 май 11, 16:52    [10721496]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    invm
    1. Эээ... Я тут с какого бока?
    А причём тут вы? Вам лично ничего не писал.
    И вообще переходить на личности бессмысленно. (и это опять не вам лично)
    invm
    2. Если у клиента нет возможности сгенерить GUID, то все, трындец?
    А причём тут это? И это как нет возможности?
    В данном случае GUID есть.
    В ином, если задача требует надёжности, то обеспечивают чем могут, GUID это один из стандартных методов.
    GUID (Globally unique identifier) проще считать за понятие, а не конкретный формат и алгоритм.
    27 май 11, 17:39    [10721833]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    Mnior
    invm
    1. Эээ... Я тут с какого бока?
    А причём тут вы? Вам лично ничего не писал.

    Ну, я так понял, что мне. Хорошо, что ошибся :)
    Mnior
    invm
    2. Если у клиента нет возможности сгенерить GUID, то все, трындец?
    А причём тут это? И это как нет возможности?
    В данном случае GUID есть.

    Ну как причем? Вы же сами пишете:
    Mnior
    И не думал что GUID у вас кого-либо генерися не на клиенте.

    По-моему, тут утверждается, что GUID должен генериться только на клиенте. Вы же не считаете, что в каждом ЯП должно быть средство получения GUID'а? Так почему такая категоричность? Если, например, GUID используется только для манипуляций внутри БД, зачем клиенту вообще знать про этот GUID, а уж тем более заниматься его получением и занесением в БД? Ведь старик Оккам не зря придумал свою бритву :)
    27 май 11, 19:43    [10722587]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    invm
    Mnior
    И не думал что GUID у вас кого-либо генерися не на клиенте.

    По-моему, тут утверждается, что GUID должен генериться только на клиенте. Вы же не считаете, что в каждом ЯП должно быть средство получения GUID'а? Так почему такая категоричность? Если, например, GUID используется только для манипуляций внутри БД, зачем клиенту вообще знать про этот GUID, а уж тем более заниматься его получением и занесением в БД? Ведь старик Оккам не зря придумал свою бритву :)

    Именно в память старика Оккама не стоит грузить несчастный сервер проблемой идентификации неидентифицируемого. Раз целостность надо поддерживать на уровне загрузки файла - так и добавьте в файл этот самый уникальный идентификатор (или не добавляйте, а генерите например CRC). А рассуждения про ЯП, не генерирующие GUID, какие-то странные - это системные вещи на данный момент, плюс есть прорва библиотек, это делающих.
    27 май 11, 21:24    [10723011]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    Я так понял, что у ТС наоборот -- файлы генерятся по содержимому локальной БД и отправляются в центр. А формировать GUID на клиенте, при условии, что он там не требуется, ну не знаю, по-моему лишнее это. Клиентская часть вообще должна быть тупа, как пробка. И заниматься только отображением информации.
    27 май 11, 22:06    [10723193]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    iljy
    Member

    Откуда:
    Сообщений: 8711
    invm,

    axe123456789
    Ситуация следующая из набора xml-файлов идет запись информации на SQL сервер.
    27 май 11, 22:12    [10723227]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    iljy,

    Угу, прозевал. Тогда да, правильней всего иметь GUID уже в файле.
    27 май 11, 23:59    [10723600]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    invm, Вы наверно путаете что такое клиент, или я плохо выражаюсь (аймсори).
    SQL сервер IP2 может быть клиентом для SQL сервера IP1. Web сервер IP3 может быть клиентом для SQL сервера IP2, браузер Opera IP4 может быть клиентом Web сервера IP3.

    Если нужна надёжность между двумя точками (клиент-инициатор и сервер-обработчик) используют идентификацию. При этом GUID должен инициироваться в первую очередь и затем вернуться ровно обратно. Количество элементов в цепочке можно увеличивать.

    В данном случае была ошибка в последовательности:
    1. Передал данные
    2. Получил GUID
    Должно либо без GUID вообще - т.е. надёжность не преследуется (или вместо GUID сказать some black box, что опять же лишний инфо-мусор). Или:
    1. передал GUID с данными
    2. получил GUID c результатом (Ok).
    Если опять пришёл тот-же GUID, то ответить Already.

    Всё просто как три копейки.
    28 май 11, 00:30    [10723676]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    Чёрт, прозевал.
    28 май 11, 00:33    [10723682]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    axe123456789
    Member

    Откуда:
    Сообщений: 13
    Уточняю проблему. На клиенте не всегда есть возможность генерить GUID (клиентом может быть не только локальная MSSQL база)? но и другие БД не известные Центру. Клиент знает про описанный интерфейс взаимодействия. То есть что он должен передать (обязательные реквизиты операции) для регистрации в ЦО, и что ему ЦО отдает в ответ.
    1 июн 11, 13:49    [10745268]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Владимир СА
    Member

    Откуда:
    Сообщений: 7915
    axe123456789
    Уточняю проблему. На клиенте не всегда есть возможность генерить GUID (клиентом может быть не только локальная MSSQL база)? но и другие БД не известные Центру. Клиент знает про описанный интерфейс взаимодействия. То есть что он должен передать (обязательные реквизиты операции) для регистрации в ЦО, и что ему ЦО отдает в ответ.
    Объясните фразу:
    клиентом может быть не только локальная MSSQL база
    1 июн 11, 14:04    [10745444]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    axe123456789
    На клиенте не всегда есть возможность генерить GUID
    Врёте.
    Генерация GUID это системная функция (CoCreateGuid in Ole32.dll). Скуль тут не причём.
    И в сотый раз повторю, GUID это понятие а не конкретный формат, вы можете хоть свой написать, хотя это не нужно.
    1 июн 11, 15:01    [10746021]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    Mnior
    Member

    Откуда: Кишинёв
    Сообщений: 6724
    http://createguid.com/

    We have created a GUID especially for you:
    Tweet this GUID.
    1 июн 11, 15:03    [10746047]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    invm
    Member

    Откуда: Москва
    Сообщений: 9827
    axe123456789,

    У вас есть два способа избавиться от проблемы:
    1. Перестать генерить GUID операции на стороне центра;
    2. Найти естественный ключ для ваших данных.
    1 июн 11, 15:36    [10746442]     Ответить | Цитировать Сообщить модератору
     Re: Как создать гарантированно повторяемый GUID записи.  [new]
    axe123456789
    Member

    Откуда:
    Сообщений: 13
    Пока вариант один на основании обязательных реквизитов, передаваемых в центр формировать в ЦО идентификатор операции.
    1 июн 11, 15:57    [10746648]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить