Вопрос Можно ли пользоваться циклами в бэкенде?

Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
85
Реакции[?]
8
Поинты[?]
4K
не будет ли приводить такой код к тому что сервер сложится? и если будет, то чем можно заменить данный кусок кода?
Код:
if sf.checkKeyExists(shortURL):
    while True:
        print("Ключ уже существует.")
        shortURL = createSURL()
        print("Создан новый.")
        if not sf.checkKeyExists(shortURL):
            break
else:
    print("Ключ еще не существует.")
 
Начинающий
Статус
Оффлайн
Регистрация
23 Янв 2024
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Этот код может привести к бесконечному циклу, если функция createSURL() продолжает генерировать ключи, которые уже существуют. Это может привести к кирдык сервера, если он не может быстро обрабатывать запросы. В этом коде, если ключ не создается после определенного количества попыток (в данном случае 1000) если ошибка то напиши мне
Код:
max_attempts = 1000
for attempt in range(max_attempts):
    if sf.checkKeyExists(shortURL):
        print("Ключ уже существует.")
        shortURL = createSURL()
        print("Создан новый.")
        if not sf.checkKeyExists(shortURL):
            break
    else:
        print("Ключ еще не существует.")
        break
else:
    print("Не удалось создать ключ после", max_attempts, "попыток.")
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,605
Реакции[?]
607
Поинты[?]
48K
если он не может быстро обрабатывать запросы
что блядь? у тебя линейная программа, тут к гадалке не ходи что sf.checkKeyExists не вернет ниче раньше чем сервак ответит;

другой вопрос что у опа всё тело отстреливается в while True: луп (который ещё и убивается без предупреждения или лога). если твой сервак не может работать быстро, или у тебя лимит по компьюту - ебанул огран по запросам к бд или в тупую time.sleepов
 
Легенда форума
Статус
Оффлайн
Регистрация
16 Сен 2018
Сообщения
4,000
Реакции[?]
1,946
Поинты[?]
7K
Этот код может привести к бесконечному циклу, если функция createSURL() продолжает генерировать ключи, которые уже существуют. Это может привести к кирдык сервера, если он не может быстро обрабатывать запросы. В этом коде, если ключ не создается после определенного количества попыток (в данном случае 1000) если ошибка то напиши мне
Код:
max_attempts = 1000
for attempt in range(max_attempts):
    if sf.checkKeyExists(shortURL):
        print("Ключ уже существует.")
        shortURL = createSURL()
        print("Создан новый.")
        if not sf.checkKeyExists(shortURL):
            break
    else:
        print("Ключ еще не существует.")
        break
else:
    print("Не удалось создать ключ после", max_attempts, "попыток.")
А не проще использовать алгоритм, который изначально имеет минимальное количество коллизий? Условный RFC 4122 дает чуть ли не полную гарантию (1 in 2.71 x 1018) того, что у тебя коллизий не будет.


Ты там сервер положить решил такими запросами? Насколько я понимаю - это что то из разряда URL Shortener, и если тебе нужны очень короткие URL'ы, то есть тогда еще такой вариант - можно в постгре сделать функцию для генерации, которая будет генерить айдишники, условные 5 попыток, на каждую попытку увеличивает длину строки на +1 (не забываем залочить инсерты в таблице). Таким образом у тебя будет минимальное количество запросов к самой базе данных, и сама база данных будет минимально нагружена запросами, особенно если накинешь хеш индекс на урлы. Но я все же рекомендую посмотреть в сторону алгоритмов, которые сами по себе генерируют строки с минимально возможной коллизией, хоть они и вероятней всего будут более длинные.
 
Последнее редактирование:
Privatny p100 DT Airlag Break LC Teleport Exploit
Участник
Статус
Оффлайн
Регистрация
27 Янв 2021
Сообщения
983
Реакции[?]
155
Поинты[?]
78K
А не проще использовать алгоритм, который изначально имеет минимальное количество коллизий? Условный RFC 4122 дает чуть ли не полную гарантию (1 in 2.71 x 1018) того, что у тебя коллизий не будет.



Ты там сервер положить решил такими запросами? Насколько я понимаю - это что то из разряда URL Shortener, и если тебе нужны очень короткие URL'ы, то есть тогда еще такой вариант - можно в постгре сделать функцию для генерации, которая будет генерить айдишники, условные 5 попыток, на каждую попытку увеличивает длину строки на +1 (не забываем залочить инсерты в таблице). Таким образом у тебя будет минимальное количество запросов к самой базе данных, и сама база данных будет минимально нагружена запросами, особенно если накинешь хеш индекс на урлы. Но я все же рекомендую посмотреть в сторону алгоритмов, которые сами по себе генерируют строки с минимально возможной коллизией, хоть они и вероятней всего будут более длинные.
Ты вернулся!
 
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
85
Реакции[?]
8
Поинты[?]
4K
А не проще использовать алгоритм, который изначально имеет минимальное количество коллизий? Условный RFC 4122 дает чуть ли не полную гарантию (1 in 2.71 x 1018) того, что у тебя коллизий не будет.



Ты там сервер положить решил такими запросами? Насколько я понимаю - это что то из разряда URL Shortener, и если тебе нужны очень короткие URL'ы, то есть тогда еще такой вариант - можно в постгре сделать функцию для генерации, которая будет генерить айдишники, условные 5 попыток, на каждую попытку увеличивает длину строки на +1 (не забываем залочить инсерты в таблице). Таким образом у тебя будет минимальное количество запросов к самой базе данных, и сама база данных будет минимально нагружена запросами, особенно если накинешь хеш индекс на урлы. Но я все же рекомендую посмотреть в сторону алгоритмов, которые сами по себе генерируют строки с минимально возможной коллизией, хоть они и вероятней всего будут более длинные.
а реально, чет я не додумался размер строки менять, спасибо за идею)
 
Легенда форума
Статус
Оффлайн
Регистрация
16 Сен 2018
Сообщения
4,000
Реакции[?]
1,946
Поинты[?]
7K
а реально, чет я не додумался размер строки менять, спасибо за идею)
Только не забудь реализовать это функцией в самой базе данных, а не отдельными запросами от твоего приложения.
 
Начинающий
Статус
Оффлайн
Регистрация
10 Апр 2022
Сообщения
85
Реакции[?]
8
Поинты[?]
4K
Сверху Снизу