У меня есть база данных с 1 таблицей с рядами, которые имеют (индексированное) TimeUtc, плавание ветровой скорости и поплавковое ветровое управление. Каждую минуту добавляется новая запись. < /P>
Чтобы получить среднюю скорость ветра, скажем, 1 час в php, я делаю, например, < /p>
$sql = "SELECT * FROM weatherdata WHERE TIMEUTC BETWEEN timeA AND timeAPlus1Hour ORDER BY TIMEUTC ASC";
$results = $conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $row)
{
$counter++;
$windspeed = $row['WINDSPEED'];
$rad = deg2rad($row['WINDDIRECTION');
$sinSum += $windspeed * sin($rad);
$cosSum += $windspeed * cos($rad);
}
if ($counter!=0)
{
$avgWindspeed = sqrt($simSum * $simSum + $cosSum * $cosSum)/$counter;
$avgWinddirection = rad2deg(atan2($sinSum, $cosSum));
while ($avgWinddirection < 0)
{
$avgWinddirection += 360;
}
}
< /code>
Это работает явно быстро. DECLARE AVGWINDSPEED, AVGWINDDIRECTION, result, speed, direction FLOAT;
DECLARE done BOOL DEFAULT FALSE;
DECLARE myCursor CURSOR FOR SELECT WINDSPEED, WINDDIRECTION FROM weatherdata WHERE TIMEUTC >= startDateTime AND TIMEUTC
В PHP я называю хранимую процедуру таким образом: < /p>
$sql = 'CALL CalculateAverageWindspeed(?,?);';
$statement = $conn->prepare($sql);
$statement->bindParam(1, $someStartTime , PDO::PARAM_STR);
$statement->bindParam(2, $someStartTimePlus1Hour, PDO::PARAM_STR);
$statement->execute();
$results = $statement->fetch(PDO::FETCH_NUM);
$avgWindspeed = $results[0];
$avgWinddirection = $results[1];
$statement->closeCursor();
< /code>
Я пропустил фактический расчет из приведенного выше кода, так как это всего лишь какое -то векторное дополнение, связанное с грехом, и потому что это одинаково в обоих случаях, а не интересной части. < /p>
Код с сохраненной процедурой работает хорошо. Расчеты с/без сохраненных процедур дают одинаковые значения. Таким образом, работает код, это не проблема. Таким образом, в обоих случаях расчеты в конце концов выполняются на одном процессоре. Но там, где код PHP вряд ли использует процессор, при использовании хранимых процедур, которые я вижу в Docker, что нагрузка Skyrockets почти до 100% для расчетов. Я просто пытаюсь понять плюсы/минусы и ограничения хранимых процедур.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... sor-vs-php
MySQL Хранилированная процедура с курсором против PHP [закрыто] ⇐ Php
Кемеровские программисты php общаются здесь
-
Anonymous
1748175531
Anonymous
У меня есть база данных с 1 таблицей с рядами, которые имеют (индексированное) TimeUtc, плавание ветровой скорости и поплавковое ветровое управление. Каждую минуту добавляется новая запись. < /P>
Чтобы получить среднюю скорость ветра, скажем, 1 час в php, я делаю, например, < /p>
$sql = "SELECT * FROM weatherdata WHERE TIMEUTC BETWEEN timeA AND timeAPlus1Hour ORDER BY TIMEUTC ASC";
$results = $conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($results as $row)
{
$counter++;
$windspeed = $row['WINDSPEED'];
$rad = deg2rad($row['WINDDIRECTION');
$sinSum += $windspeed * sin($rad);
$cosSum += $windspeed * cos($rad);
}
if ($counter!=0)
{
$avgWindspeed = sqrt($simSum * $simSum + $cosSum * $cosSum)/$counter;
$avgWinddirection = rad2deg(atan2($sinSum, $cosSum));
while ($avgWinddirection < 0)
{
$avgWinddirection += 360;
}
}
< /code>
Это работает явно быстро. DECLARE AVGWINDSPEED, AVGWINDDIRECTION, result, speed, direction FLOAT;
DECLARE done BOOL DEFAULT FALSE;
DECLARE myCursor CURSOR FOR SELECT WINDSPEED, WINDDIRECTION FROM weatherdata WHERE TIMEUTC >= startDateTime AND TIMEUTC
В PHP я называю хранимую процедуру таким образом: < /p>
$sql = 'CALL CalculateAverageWindspeed(?,?);';
$statement = $conn->prepare($sql);
$statement->bindParam(1, $someStartTime , PDO::PARAM_STR);
$statement->bindParam(2, $someStartTimePlus1Hour, PDO::PARAM_STR);
$statement->execute();
$results = $statement->fetch(PDO::FETCH_NUM);
$avgWindspeed = $results[0];
$avgWinddirection = $results[1];
$statement->closeCursor();
< /code>
Я пропустил фактический расчет из приведенного выше кода, так как это всего лишь какое -то векторное дополнение, связанное с грехом, и потому что это одинаково в обоих случаях, а не интересной части. < /p>
Код с сохраненной процедурой работает хорошо. Расчеты с/без сохраненных процедур дают одинаковые значения. Таким образом, работает код, это не проблема. Таким образом, в обоих случаях расчеты в конце концов выполняются на одном процессоре. Но там, где код PHP вряд ли использует процессор, при использовании хранимых процедур, которые я вижу в Docker, что нагрузка Skyrockets почти до 100% для расчетов. Я просто пытаюсь понять плюсы/минусы и ограничения хранимых процедур.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79618109/mysql-stored-procedure-with-cursor-vs-php[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия