|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Мне нужно генерировать случайную строку и на всякий случай проверять, нет ли уже такого значения в таблице. Реализовал при помощи потенциально бесконечного цикла, но может есть более изящный и безопасный вариант? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 19:35 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
romaro Мне нужно генерировать случайную строку и на всякий случай проверять, нет ли уже такого значения в таблице. Реализовал при помощи потенциально бесконечного цикла, но может есть более изящный и безопасный вариант? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 19:48 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
romaro, А чем не устраивает guid? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 20:22 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
romaro может есть более изящный ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 20:53 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Vadim Lejnin А чем не устраивает guid? Присоединяюсь к вопросу. Кроме того, если на самом деле требуется не случайное число, а идентификатор, то как-то в RuOUG представляли в качестве генератора systimestamp ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 21:16 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
andrey_anonymous Vadim LejninА чем не устраивает guid? Присоединяюсь к вопросу.А я нет. Использование guid - это роспись в неспособности постичь предметную область. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 21:29 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Elic andrey_anonymous пропущено... Присоединяюсь к вопросу. Если рассматривать это не как абстрактный вопрос "Как бы вы написали такую функцию", то применительно к любой предметной области его бы просто не было - генерировать ключ, необходимый для бизнес-логики: systimestamp, guid, если нет ничего более адекватного - это уже частности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 21:38 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
ASNexus systimestamp, guid, если нет ничего более адекватного - это уже частности. Вообще предложение какой-то хрени, не понимая задачи, как минимум непрофессионально. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 21:51 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Elic ASNexus systimestamp, guid, если нет ничего более адекватного - это уже частности. Вообще предложение какой-то хрени, не понимая задачи, как минимум непрофессионально. Согласен - мой вариант был просто ответом на "может есть более изящный и безопасный вариант". Просто чтобы натолкнуть автора на некоторые мысли. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 22:08 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Если это динамические PIN-коды (и их возможное количество невелико), то лучше всего сразу сгенерировать все возможные (допустимые) значения, а для выдачи/активации использовать поле "Статус". Если нужен рандомный пароль (количество возможных значений очень велико), то просто генерировать и проверять на отсутствие коллизий. Соль или префикс позволят снизить вероятность коллизий. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2021, 22:25 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Alibek B. Если это динамические PIN-коды (и их возможное количество невелико), то лучше всего сразу сгенерировать все возможные (допустимые) значения, а для выдачи/активации использовать поле "Статус". Если нужен рандомный пароль (количество возможных значений очень велико), то просто генерировать и проверять на отсутствие коллизий. Соль или префикс позволят снизить вероятность коллизий. я в похожих задачах (в скриптах для тестов) просто зашивал в строку timestamp и session_id. и можно не проверять на уникальность ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 12:22 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
legg и можно не проверять на уникальность Не совсем верно. Проблемы с уникальностью в таком подходе словить можно на хорошем оборудовании. Более того, на практике ловят. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:07 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
И они гарантированно всплывут при использовании нескольких серверов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:31 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
andrey_anonymous legg и можно не проверять на уникальность Не совсем верно. Проблемы с уникальностью в таком подходе словить можно на хорошем оборудовании. Более того, на практике ловят. в одну миллионную секунды в одной сессии успевают два вызова влезть? круто. но это если совсем никакой логики нет и просто подряд генерим строки. ну тогда добавить пакетную переменную и инкрементировать ее. сиквенсы и гуиды, как я понимаю, мы не используем. в любом случае в такой задаче я попытался б избавиться от проверки уникальности - обеспечил бы на этапе генерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:35 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Alibek B. И они гарантированно всплывут при использовании нескольких серверов. это когда несколько инстансов на одной базе? легко исправляется добавлением в строку идентификатора сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:40 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Нет, когда разные сервера (физические или виртуальные) с не идеально синхронизированными часами. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:42 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
legg в одну миллионную секунды в одной сессии успевают два вызова влезть? Откуда взялась одна миллионная секунды? Не нужно путать разрядность типа данных и разрешающую способность системного таймера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:43 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Alibek B. Не нужно путать разрядность типа данных и разрешающую способность системного таймера. ...глас разума однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 13:46 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
legg в одну миллионную секунды в одной сессии успевают два вызова влезть? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2021, 14:13 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Sayan Malakshinov а откуда брать timestamp будешь? Если systimestamp то он как и sysdate вообще внутри одного запроса не меняется - две строчки уже не вставишь: ||rownum :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:19 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
andrey_anonymous Alibek B. Не нужно путать разрядность типа данных и разрешающую способность системного таймера. ...глас разума однако. хм.. я ни в коем случае не спорю - полный профан в этой области, но разве разрешающая способность сист ямных таймеров в наше время не в наносекундах измеряется? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:20 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Alibek B. Нет, когда разные сервера (физические или виртуальные) с не идеально синхронизированными часами. я systimestamp имел в виду. он же единственный и неповторимый? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:23 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
legg разве разрешающая способность сист ямных таймеров в наше время не в наносекундах измеряется? Нет, конечно. legg я systimestamp имел в виду. он же единственный и неповторимый? Ничего не понял. Кто единственный и неповторимый? Если на одном сервере часы отстают на секунду от второго сервера, то и systimestamp на нем через секунду повторит значение со второго сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:27 |
|
Как бы вы написали такую функцию?
|
|||
---|---|---|---|
#18+
Alibek B. Ничего не понял. Кто единственный и неповторимый? Если на одном сервере часы отстают на секунду от второго сервера, то и systimestamp на нем через секунду повторит значение со второго сервера. Это я ничего не понял, потому что не имел дела с подобным). По поводу разных серверов - у них ведь есть какой-то уникальный идентификатор? если нет - сделать и запихнуть в контекст или пакетную переменную и конкатенировать к строке. По поводу времени - то , если интенсивность генерации новых строк в самом деле создает риски генерации в один и тот же таймсемп двух строк - таким же образом можно запоминать предыдущее время с текущим и если оно совпадает - добавлять постфикс-счетчик. В любом случае уверен что можно выкрутиться и обеспечить уникальность не дергая каждый раз таблицу. Конечно, если данные в таблицу попадают только через нашу генерилку, нет другого источника данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2021, 10:47 |
|
|
start [/forum/topic.php?fid=52&fpage=21&tid=1880270]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 384ms |
0 / 0 |