Изменение сценария PDO для использования функций, более эффективных и менее последовательных

Я потратил несколько дней на создание сценария, который по сути берет некоторые данные в системе db2 и создает для них новые записи в системе mysql. Попутно он выполняет некоторые проверки, и я использую цикл для базовых вставок или обновлений в этих условиях.

Этот скрипт работает, он возвращает то, что я ожидал, и вставляет / обновляет, как ожидалось. Я тестировал его на процесс удаления, обновлений, вставок, независимо от того, истек ли срок действия записи или нет ... в основном каждую функцию этого скрипта я тщательно протестировал.

Мне кажется, что это не так быстро, как могло бы быть, вероятно, оно более последовательное и избыточное, чем должно быть.

Я не привык работать с PDO в таком скрипте, но мне интересно, что я могу сделать здесь, чтобы исправить производительность / скорость и избыточность. Я знаю, что некоторая логика может «показаться» избыточной, но логика именно там, где она должна быть, мне просто интересно, могу ли я использовать функции для уменьшения количества вызовов или циклов, возможно.

Любая помощь или совет приветствуются.

Думаю, этот вопрос лучше подошел бы к codereview.stackexchange.com

Richard Parnaby-King 09.03.2018 16:28

Вы уже задавали тот же вопрос о codereview, и я на него ответил. Затем вы удалили вопрос и ответ и разместили здесь практически тот же вопрос. Судя по названию, вы прочитали мой ответ. Думаю, такое поведение заслуживает отрицательной оценки.

KIKO Software 09.03.2018 16:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

это сложно, меня будут перетаскивать по горячим углям для этого, 1) вы можете вообще не использовать PDO, если уверены, что нет риска атаки прямого впрыска, 2) также я бы посмотрел на реализацию этого вида функции через PHP CLI, то есть через задание acron в триггере curl

В общем, PDO - очень дорогой способ выполнить запрос. Простая строка под mysqli_query() будет примерно в 2,5 раза эффективнее.

Блин, я бы хотел знать об этом до того, как начал портировать более 500 000 записей! ха-ха. Никакого риска инъекционной атаки нет. это локально работающий скрипт, который запускается каждую ночь

Geoff_S 09.03.2018 16:30

Я был бы счастлив использовать mysqli_query(), вы также можете использовать PHP в режиме PHP CLI (в основном bash через crontab, а затем иметь файл журнала, который вы отправляете по электронной почте в конце и т. д.), Потому что CLI быстрее в любом случае, быстрее для пакетной обработки и не t тайм-аут

Mr Heelis 09.03.2018 16:31

ОК. Итак, смог бы я эффективно пройти через этот сценарий и заменить свои PDO-соединения старым mysqli / odbc_connect, а затем просто изменить свои точки подготовки / выполнения, чтобы они соответствовали?

Geoff_S 09.03.2018 16:32

да нетрудно получить что-то более упорядоченное. у вас есть логика, поэтому он просто вставляет и вставляет новые методы ... вы можете быть удивлены, что писать гораздо меньше ... у вас будет меньше кода, чем сейчас ... также я думаю, если вы использовали CLI и mysqli-query вы приблизитесь к увеличению скорости в 3,5 раза

Mr Heelis 09.03.2018 16:34

Могу я просто сказать, что я проделал это во всех университетских городках и реплицировал данные в двух направлениях в СЕМЬ систем одновременно каждую ночь и сознательно никогда не использовал PDO, поэтому у меня есть опыт в этом ... и когда вся компьютерная система кампуса вышла из строя, этого не произошло. и он восстановил все примерно за 20 минут .. но эй, это SO, так что я получил скидку .. люблю троллей

Mr Heelis 09.03.2018 16:37

Что именно вы имеете в виду, не используя PDO, если нет риска инъекционной атаки? Кажется, вы предполагаете, что либо mysqli менее безопасен, либо вам не нужны подготовленные операторы. Между прочим, я не согласен с обоими.

jeroen 09.03.2018 16:40

не уверен, что вы имеете в виду, товарищ, mysqli_query в операционном отношении проще ... это в основном ODBC поверх оптимизированных интерфейсов, если вы удалите подготовленные операторы, SQL превращается в текст, анализируемый в драйвер через порт ... и он ожидает ответа ... нет «объекты» для всплытия в память и тривиальные накладные расходы памяти, кроме фазы ответа, когда вы май получаете сетку, которая (если вы это делаете) максимально двумерна в терминах указателя ... ... он использует DB2 в любом случае raw SQL безопасен для использования если вы делаете струны ручной работы, вы точно знаете, что они содержат, если это скорость, вам нужно

Mr Heelis 09.03.2018 16:49

В отношении вашей точки 1), пожалуйста, не делайте вывод, что mysqli менее безопасен и не может обрабатывать атаки SQL-инъекций, которые может выполнять PDO Только.

IncredibleHat 09.03.2018 17:10

@MrHeelis, можем ли мы обсудить один быстрый момент в чате? если ты можешь

Geoff_S 09.03.2018 17:55

Другие вопросы по теме