Sly32

Рейтинг
367
Регистрация
29.03.2012

И кстати, JOIN еще одной таблицы, например, если я хочу добавить еще  описание, хранящееся отдельно - не сильно увеличивает скорость

Результат выполнения такого кода 

    @timer
    def get_id(self, ipid):
        stmt = (
            select(BlockedID.ip_id, Description.url)
            .join(Description, Description.blocked_id == BlockedID.id, isouter=True)
            .where(BlockedID.ip_id == ipid))
        with Session() as session:

            print("="*120)
            print(stmt)
            result = session.execute(stmt).all()
            print("-" * 120)
            print(result)

что генерит запрос типа

SELECT blocked_id.id, blocked_id.ip_id, blocked_id.title, description.url
FROM blocked_id LEFT JOIN description ON description.blocked_id = blocked_id.id
WHERE blocked_id.ip_id = 'wHx0pgTK4kOoI9nc7dp9b9NV7uBqnn';

========================================================================================================================
SELECT blocked_id.ip_id, description.url
FROM blocked_id LEFT OUTER JOIN description ON description.blocked_id = blocked_id.id
WHERE blocked_id.ip_id = :ip_id_1
------------------------------------------------------------------------------------------------------------------------
[('1234456', 'http://tut')]
Execution time: 0.006269931793212891

Для миллиона записей совсем некритично. Сам HTTP запрос будет занимать намного больше времени,  Получение результата - малая часть в процентном отношении ко всему времени. 


В итоге получаю очень простой код,  хорошую надежность, простой бэкап данных, чем в случае работы с файлами

Этот топик показывает, что здешние посетители в целом вообще не понимают, что вообще такое АИ. Яркий пример - сравнить DesignerGPT vs Elementor))) Или вот прекрасное:
OnOf #:
но только необьясняют зачем и для чего он нужен

Но я согласен с тему, кто говорит про возможные опасности. Впрочем, в развитых странах все больше говорят про введение безусловного дохода для всех. Без АИ переход к нему невозможен. Да и результаты перехода на 4-х дневную неделю обнадеживают. 

Sly32 #:

Результат выполнения для поиска по файлу с примерно полмиллиона записей:

Start script
Found file 40000 for checking ip 49342
Count of records: 433209
This ip(49342) was blocked for download
Execution time: 0.04430103302001953

Это локально, без всяких HTTP запросов, на 4-х ядерном core i5 10gen 16RAM
Мне кажется, сопоставимо со скоростью запроса в БД. Может и имеет место быть такой подход

Подытоживая, нашел время проверить поиск по аналогичной БД на этой же машине. Стэк - Postrgesql 14, проиндексированная таблица, коннект с помощью SQLAlchemy. Скорость поиска в таблице с 1100000 строковых записей длиной 30 символов:

Start finder
[(Id(id=1000201, ip='mIiVBR23U2dooVjRzmCn0eC8a4XMcg'),)]
Execution time: 0.0586090087890625
[(Id(id=5, ip='wHx0pgTK4kOoI9nc7dp9b9NV7uBqnn'),)]
Execution time: 0.004904031753540039
[]
Execution time: 0.004606962203979492

То есть в худшем случае результат сопоставим, в лучшем - на порядок быстрее при количестве записей в 2 раза большем 

Все-таки база побеждает) Да и кода там меньше получается.

Vladimir #:
Я не пишу, я заказываю и не у вебмастера ( хоть бы понятия правильно применял), а у верстальщика.

В отличии от тебя я не указываю в императивной форме, а советую - сначала попытайся узнать хоть немного про инструмент, который я описываю, его возможности, а потом  бросайся на баррикады в споры))

DGPT заменит и  "вебмастера" и верстальщика.  Для пользователя пропадет  ненужный посредник в виде тебя.

Vladimir #:
Любой сайт открой от  Elementor , и любуйся грязным кодом сколько хочешь, если конечно разбираешься в этом

Разбираюсь настолько, чтобы никогда не использовать такие поделки в работе. Для фронта мне достаточно работать с React/Bootstrap как минимум.  Хотя я давно занимаюсь немножко более интересными вещам, чем клепать сайтики под рекламку)

Vladimir #:
DesignerGPT? Тот же самый Elementor - рассчитанный в первую очередь на новичков, которые слабо знакомы с принципами вёрстки и создания оригинального дизайна для сайтов.

Ты уже попробовал? Можешь привести примеры "грязного" кода, в сравнении с тем что пишешь ты? С удовольствием бы посмотрел)

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

Именно поэтому я в названии написал "вебмастер" - в кавычках))) И они стройными рядами побежали отмечаться в теме и доказывать... а непонятно что даже. Не попытавшись даже понять, про что этот новый продукт)

-= Serafim =- #:

Такое ощущение, что ты подключил интернет и по любой ерунде спешишь всех уведомить. Смотрите, я нашел новый инструмент! Я даже сумел его протестировать и запустить! Я молодец! Я вчера купил книгу по гоу, а сегодня узнал что такое докер и AI инструменты! Ура! 

Ты забыл еще что-нибудь про джуна вкренчить

Алеандр #:

Чет я понаписал, понаписал в ответ аргументы. А теперь подумал, да какой смысл. Вы просили поделиться реальным опытом, я поделился. В ответ, начинается выдумывание гипотетически возможных проблем там, где они могут быть при любой технологии в силу кривых ручонок не специалистов и тех, кто просто напросто не знает другие технологии и не пробовал их на практике. Так что нет, спасибо, я пас в таком обсуждении, где разумное объяснение извращается до бессмысленного даже с точки зрения банальной логики.

Ваше право. В любом случае, спасибо за интересную дискуссию и что пошарили свой опыт. Лично мне было интересно и полезно. 

Алеандр #:
Это не максимально эффективное решение, при том, что в структуре есть данные, которые нужно разделить - их правильнее разделять построчно, если уж их пишете все в один файл и читать так же построчно. Построчное чтение легче, проще, может быть завершено по результату найденного вхождения и не потребует постоянной загрузки всего файла в память с последующим циклом проверки этих данных.

Еще раз - это ВООБЩЕ не оптимальное решение! цль была - примерно оценить скорость чтения записи в сравнении с БД.  И даже в таком варианте я признаю, что это сопоставимо. Если грамотно организовасть файловую систему, оптимизировать запись и чтение - это может быть быстрее, чем использовать БД. По крайней мере на небольших обьемах и сопоставимо по потреблению памяти.  Так понятнее? Не в рамках вопроса пытаться написать оптимальный скрипт на базе кода который я привел - он не для этого был написан.

Алеандр #:
Какое отношение роллбэк имеет к статично размещенному в директории файлу?

Я могу затереть занные в файле, могу многократно писать одно и тоже, могу удалить случайно файл, могу записать в него недопустимые символы и он перестанет читаться.... Все это нужно предусматривать. А при работе с SQL все это уже есть

Алеандр #:
Организация правильности БД никаким образом не влияет на отказоустойчивость базы

Влияет. все то что я написал выше. Например достаточно тип поля сделать уникальным и я избавляюсь от необходимости каждый раз проверять, есть ли такой айди в таблице. Добавление в CONSTRAIN ONDELETE Cascade - упростит мне очистку базу от ненужных данных. То есть вся та работа, которяа должна будет сделана при работе с файлами при работе с БД УЖЕ реализована. Да банальный бэкап обычно есть на любом хостинге. Наверное, давно не работал но сомневаюсь, что я ошибаюсь. 
Так что никакой гипотетичности. Все это пройдено собственными граблями на проектах с месячными бюджетами за который этот форум можно купить десяток раз. Поэтому я так критически отношусь к идее работы с файлами  в данном случае. 

livetv #:
Что это Вас потянуло на концепцию пан-сам-склепал, а не на энтерпрайсные решения?

Ну почитайте весь тредможет и не нужен будет мой ответ? Вкратце - стало интересно проверить, наклепал - убедился что со временем поиска больших проблем не будет. Понятно, что это только как студенческая лаба, такое решение никогда в жизни в прод не пойдет. Чисто сравнить скорость. 

Всего: 7112