Pull to refresh
19
0
Пьянков Сергей Михайлович @SergeyPyankov

Delphi- и SQL-разработчик

Send message
Ваш парсер живет в службе, о которой вы писали в прошлый раз?
Нет (хотя это и планировалось, но руки так и не дошли).
В некотором роде, вышло продолжение данной статьи, описывающее способ работы с динамическими сайтами — теми, для которых недостаточно только HTTP-запросов, а требуется ещё и выполнение JS-кода.
  1. В какой области применяется?
    Какая ниша у вашего решения?
    Прежде всего, показанное решение ни в коем случае не является неким коммерческим универсальным продуктом, а представляет собой лишь часть функционала (хоть и важную) небольшого проекта, которая в основном отвечает за извлечение цен — каждые сутки (автоматически, по расписанию) выполняется обход где-то десятка одних и тех же магазинов, что выливается в посещение примерно 40 000 ссылок; более того, большинство сайтов простые, нединамические, поэтому с ними не нужен браузер — достаточно просто HTTP-запросов.

    Таким образом, речи о промышленном уровне — когда всё сразу гибко, универсально и настраиваемо — не идёт.
  2. Поэтому все решения для парсинга оцениваются через призму этого противостояния.
    Представленный вариант без проблем, что логично, обходит простейшие защиты, когда, например, проверяется всего лишь факт исполнения скриптов «посетителем» сайта. Преодолевать более сложные способы проверки надобности не возникало, поэтому предполагаю, что некие доработки под них скорее всего потребуются.
    Хедлес это красный флаг для защиты.
    Возможно я не очень понял, но каким образом отрисовка в буфер может быть отслежена? Навскидку, с ней даже не должно быть технических препятствий для добавления имитации действий человека (движение мыши, ввод с клавиатуры), если такое вдруг потребуется.
    Каков потенциал решения для подделки отпечатка?
    С данной темой совершенно не сталкивался в практическом плане, поэтому могу разве что сослаться на предыдущий абзац — любая имитация человека скорее всего возможна (в том числе со случайными отклонениями, а не по одному и тому же шаблону).
  3. Как часто обновляется CEF? Насколько он поспевает за Хромом?
    Если сравнить даты соответствующих сборок CEF и Chromium, то в среднем задержка в несколько дней.
    Так почему Хромиум?
    Из-за большей всеядности CEF в плане ОС — в дальнейшем может потребоваться поддержка Линукс.

Если брать уже упомянутую Delphi, то она предлагает как минимум две библиотеки для этого:


  1. Наиболее, вероятно, подходящая под Ваш запрос — TMS WEB Core, где разработка ведётся полностью на языке Delphi, после чего транспилятор Pas2js преобразует весь код в JS, который уже и будет исполняться браузером.
  2. uniGUI — интерфейс тоже создаётся визуально в среде Delphi, однако в браузере за него отвечает Sencha Ext JS, к тому же получающийся сайт не автономен, а требует постоянного взаимодействия с веб-сервером.
Что понимается под надёжностью — каков её критерий?
Аналогичный уровень имеется в Firebird и Interbase.
Общая нагрузка вырастет, поскольку ACID в базах данных достигается достаточно дорогой ценой

Совершенно согласен, накладные расходы в случае БД окажутся несколько выше, о чём, собственно, уже писал ниже:

описанное решение даже в самом распрекрасном случае будет лишь на уровне ФС, т. к. она, по определению, и создана для наилучшего обращения с файлами

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

И на всякий случай повторюсь:

Материал не про выбор места хранения, а про неизвестный многим способ извлечения файлов из БД, когда выбор уже сделан не в пользу ФС.
Скорее всего можно (я не знаком с PHP), но каким бы ни был предложенный способ, он же всё равно будет извлекать изображение из базы данных: Ваш скрипт станет делать это, насколько понимаю, через написанный разработчиком SQL-запрос, а вариант из статьи отдаёт всё на откуп самой СУБД (можно сказать, что условным «запросом» выступает просто имя файла).
Мой опыт использования uniGUI не является показательным, т. к., во-первых, этот фреймворк применялся только в одном (данном) проекте, и, во-вторых, он не предназначен для сайтов с произвольным дизайном, каким является описанный в статье (хотя чисто технически это и возможно сделать, о чём рассказывает прошлая статья). Однако вот служебный сайт, предназначенный для управления содержимым первого (публичного), uniGUI позволил создать очень быстро и качественно.

На Ваш вопрос наиболее полезно смогут ответить те, кто применяет uniGUI по прямому назначению — переносят настольное приложение в веб, например.
Материал не про выбор места хранения, а про неизвестный многим способ извлечения файлов из БД, когда выбор уже сделан не в пользу ФС. Пример с обложками отчасти даже можно воспринимать лишь как антураж для демонстрации файловых таблиц.
Если комментарий относился исключительно к коду, в плане заполнения атрибута при хранении обложек не в БД, а в ФС, то он почти и не станет отличаться от приведённого в конце статьи — ведь суть же как раз в том, что для стороннего наблюдателя файлы из FileTable и выглядят как настоящие файлы из любой реальной директории.

Если же речь шла про сравнение производительности, то описанное решение даже в самом распрекрасном случае будет лишь на уровне ФС, т. к. она, по определению, и создана для наилучшего обращения с файлами. Статья же затрагивает вариант, когда они по какой-либо причине находятся в базе данных и требуется повысить эффективность работы с ними.
Замеров не производилось, но возникает встречный вопрос: почему нагрузка должна как минимум остаться на том же уровне (или даже вырасти), если была исключена операция по созданию копии обложки?

что добавляет лишнюю операцию: сначала читаем из БД, после чего записываем копию на диск
Никто из лично мне знакомых китайцев ни с какими описанными ограничениями не сталкивался.
В двух суперприложениях на которых держится китайское цифровое общество — Вичат и Алипэй, собирается информация о ваших расходах и доходах и на её основе считается некий внутренний рейтинг.
Аналогичное мнение высказывает русскоговорящая китаянка.
Последний раздел — «Освобождение ресурсов» — теперь, скорее всего, становится неактуальным — была сделана доработка по автоматическому освобождению в некоторых случаях.
  1. InternetTools не является простой, состоящей из нескольких модулей, библиотекой: если брать в расчёт только inc- и pas-файлы, то их общее количество составит около 65-и, а размер примерно 5,5 МБ.
  2. Специфичность и низкоуровневость некоторых модулей: в качестве образца можно привести bbutils.pas, который способен подарить разработчику, до этого использовавшему строки только в прикладном ключе, новые неожиданные «удовольствия».
  3. Вопрос качества. Хотя библиотека и содержит автотесты (тоже, к слову, требующие портирования), их успешное прохождение не гарантирует отсутствия таких проблем, как, например, утечки памяти — это потребует отдельных тестовых сценариев.

Косвенно трудоёмкость задачи можно оценить из того факта, что запрос на портирование существует уже 5 лет, однако до сих пор ни автор InternetTools, ни кто-то ещё подобное не сделали.
Если у читателя остались вопросы касательно тонкостей взаимодействия с DLL (т. е. не по InternetTools), то рекомендую серию статей, которая послужила основой для данной.
Jef239 и DrPass, прошу прощения за вмешательство в ваш диалог, но, как мне кажется, он довольно далеко ушёл от темы статьи и содержит очень мало полезной информации для её читателей (в том числе зря отвлекая подписавшихся на комментарии). Может быть стоит перенести разговор в личную переписку?..
Почему-то в статье не упомянут способ, избавляющий от необходимости указывать конструкцию SET XACT_ABORT ON в каждой процедуре, — он заключается в настройке нужного поведения сразу для всего сервера:

  1. Графически, через интерфейс SSMS, это настраивается так:

  2. Скрипт для того же самого выглядит следующим образом (значение 16384 подходит только для случая на снимке выше, т. к. представляет собой битовую маску, поэтому иная комбинация параметров потребует другого числа):

    EXEC sys.sp_configure N'user options', N'16384'
    GO
    RECONFIGURE WITH OVERRIDE
    GO
Мой комментарий ниже поясняет, почему был выбран именно такой небесспорный способ.
1

Information

Rating
Does not participate
Location
Оса, Пермский край, Россия
Date of birth
Registered
Activity