@unique

Тема в разделе "Lotus - Программирование", создана пользователем Xalet, 28 авг 2009.

  1. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Есть такая функция @Unique. Возвращает по описание произвольное уникальное текстовое значение.

    Кто знает, как она на самом деле работает и можно ли ей пользоваться для создания, к примеру, уникальных номеров в системе с 10+ серверами на которох размещена одна база синхронизируемая через реплики... Какой шанс, что значение в поле генерируемое функцией @Unique действительно будет уникальным?

    Спасибо.
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    что-то ты плохо читал...
    возвращает список уникальных значений, а не произвольное
    т.е., @Unique("мама" : "папа" : "я" : "брат" : "брат" : "брат": "сестра") вернет "мама" : "папа" : "я" : "брат" : "сестра"
     
  3. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    это если с параметрами использовать, а без параметров так, как описал: Without a parameter, returns a random, unique text value.
     
  4. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Akupaka
    а если просто дать @Unique то видаст PPUP-7UTHXE где PPUP = Petro PUPKIN

    xalet

    имхо плохое решение. но шанс очень большой например если номер доки PPUP-7UTHXE то повторится он может только -7UTHXE етой частю. а первая часть так и останется уникальной

    P.S учтите PPUP ето нетолько Petro PUPKIN но и Pavel PUPKIN ну и никто не отменял двойников:)
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    оу... что-то я не то читал))) никогда не юзал ее без параметров
     
  6. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    xalet
    Знаю только что при формировании этого значения используются инициалы из текущей айдишки и что ibm'меры сами её пользуют.
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    вот что нашел тут

    The @Unique function, if used with no arguments, will return a unique character string such as this one: MAGN-3WWMRX. You can use @Unique to assign each document in a database an identifier that will always be unique, but which is much shorter, and thus, more manageable than the universal document ID. Many Notes developers store an identifier generated with @Unique in each Notes document. They're more manageable than the universal document ID, and they don't change when a document is cut and re-pasted, or when a replication or save conflict is resolved.
     
  8. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    первые буквы инициатора + NoteID
    как помним NoteID уникально в пределах ОДНОЙ базы
    тоесть уникальность в пределах сервера уже не наблюдается
    ну а если и серверов много то тогда вообще плохо

    но для одной базы этого достаточно
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    блин, какая интересная оказывается функция!
    xalet +1 за наводку! ))

    не правда, похоже, что: первые три буквы + последняя + функция (от времени? и) кол-ва вызовов
     
  10. oshmianski

    oshmianski Гость

    сам не нарывался и не проверял, но слышал, что при автоматической генерации доков с @unique в качестве уникального ключа, нарывались на одинаковые значения. т.е. документы создаются слишком быстро и @unique возвращает одно и то же значение.
     
  11. rins

    rins Гость

    Не могу вспомнить источник, но именно @unique в рамках одной сессии, если "не успевает" то генерирует следующее значение на единицу больше предыдущего.
     
  12. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    oshmianski

    враки. я использую @unique в одной базе. там автоматически генирируется 65 доков каждий день. дубликатов нет.
    Но ищо раз ета функция как писал ToxaRat толоько для 1 бази. для реплик уже не подойдет имхо......
     
  13. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    т.е. в ситуации, как у меня, лучше не полагаться на такую, а генерировать айди самому?

    Тогда делитесь кто как уникальность поддерживает.
    Ато в том хозяйстве, что досталось мне по наследству как-то кривовато все. В ини файле хранится идентификатор места, плюс счетчик, плюс еще куча всего... И из этого получается айдишка. Вроде как все нормально и работоспособно, пока не начинается переезд на новый комп или не летит винч с ини файликом... Да и настройка апликухи на рабочем месте порядком усложняется...
     
  14. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Самый надёжный - UNID. Только пользователю им оперировать сложно.
     
  15. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    xalet

    ну как я понимаю у вас каждий регион на отдельном серваке да?можно и @unique брать все таки
    например есть сервак под конкретний регион регион например "Киев" тогда можно делать регион + @unique тогда уж точно будет сохранятся последовательность и не будет дубликатов.
    но здесь и другой вопрос для кого ви делаете нумерацию документов????? для себя? или для налоговой???? если второй вариан тогда етот вариант нумерации сразу одпадает.....
     
  16. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Для связи между доками в базе... Пользователи номеров не видят и с ними не работают.

    А сеть планируется 10ть серверов в 10ти областях, все это реплицируется через центр, и с каждым из серверов работают через реплики и напрямую Н-ое количество народу.

    UNID будет уникальным для всех документов в такой системе?
     
  17. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    а какая у вас связь между доками?что документ "А" както силается на документ "Б"???? чтото непонятно......
     
  18. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Да, UNID гарантированно уникальный. Если только не изгаляться, например присваиванием значения UNID'у. Но осторожней с cut-paste он присваивает документу новый UNID. Для связи документов, UNID - это то, что надо. Получение связанного документа по Unid на много быстреее чем по ключу по вьюхе.
     
  19. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Да, именно ссылается. И не на один, а на много... Вообще там как бы иерархия их, как в случае с респосами к примеру. Только вот создаваться они могут во всех направлениях...

    Спасибо. возьму на вооружение.
     
  20. PaVaP

    PaVaP Member

    Регистрация:
    25 июн 2009
    Сообщения:
    23
    Симпатии:
    0
    Можно в док-те создать поле Computed when composed и в него сохранять юнид.
    Для связи док-тов использовать данное поле.
    Тогда после копи-паста (или еще чего...) связи между доками не порушатся.
     

Поделиться этой страницей