Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (8) « Первая ... 2 3 [4] 5 6 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Данные за каждый месяц, как лучше реализовать?
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Смотри, я заюзал fetch() на таблице в 840k записей. Скрипт тестовый, не является частью приложения, т.е. не создаются никакие объекты и не используется реальная логика (что уменьшает затраты памяти в разы). Данные в БД реальные (старый бэкап).
$sql = 'SELECT * FROM `table`';

$start = memory_get_usage(true);

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
$end = max($start, memory_get_usage(true));
unset($data);
}

echo 'fetch in loop: ' . number_format($end - $start, 0, '.', ' ') . "\n";

Результат скрипта:
Цитата
>php index.php
fetch in loop: 1 967 128 576

Как видишь, расходы памяти почти 2ГБ. Справедливости ради, окончания аналогичного теста с fetchAll() я не дождался, т.к. начался своп и тормоза. Но тем не менее, результат на лицо. Даже с fetch() в песочнице потребление памяти огромно. На продакшене всё равно пришлось бы юзать циклы.

PS. Мог накосячить с кодом, т.к. PDO в "чистом" виде юзал полтора раза 100 лет назад, на проекте используется ORM.

Ваш выход, мистер :)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




$sql = 'SELECT * FROM `table`';

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
unset($data);
}

echo memory_get_peak_usage(true) . "\n";


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Цитата (Valick @ 25.12.2014 - 15:53)
$sql = 'SELECT * FROM `table`';

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
unset($data);
}

echo memory_get_peak_usage(true) . "\n";

Цитата
>php index.php
1967128576


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




результат вот этого кода пожалуйста
хотя я не вижу $dbh может у тебя там хз что подключено
$sql = 'SELECT * FROM `table`';

echo memory_get_usage(true) . "\n";

$sth = $dbh->query($sql);

$data = $sth->fetch();

echo memory_get_usage(true) . "\n";


и дамп 1 строки из БД плиз в студию


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


держи скрипт с самого начала, чтоб не думал, что я что-то скрываю )))
<?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = 'root';

try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage();
exit;
}

$sql = 'SELECT * FROM `table`';

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
unset($data);
}

echo memory_get_peak_usage(true) . "\n";


Дамп непосредственно из БД тебе нужен или в результате работы скрипта $data на первой итерации?


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Цитата
результат вот этого кода пожалуйста

Цитата
>php index.php
262144
1966866432


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Invis1ble
может ты выбрал не правильное решении задачи? тебе нужно проверить работоспособность сайтов которые оставляют пользователи на lestinet.com?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




Цитата
Дамп непосредственно из БД тебе нужен или в результате работы скрипта $data на первой итерации?

без разницы
$data = $sth->fetch();
var_dump($data);
unset($data);


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Valick
давай всё же обойдемся без дампа, не хочу раскрывать схему БД. Скажи лучше, зачем он тебе, что конкретно ты хочешь узнать.
Если что, я проверял дамп, там, как и положено, смешанный массив со строковыми и числовыми ключами и данными из первой строки. Предвидя следующий вопрос, отвечу, что PDO::FETCH_ASSOC уменьшает потребляемый объем памяти незначительно, порядка нескольких десятков МБ.


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Guest
нет и нет


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




Invis1ble, ок, без дампа так без дампа

$sql = 'SELECT * FROM `table` LIMIT 10';

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
unset($data);
}

echo memory_get_peak_usage(true) . "\n";


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Цитата (Valick @ 25.12.2014 - 17:33)
Invis1ble, ок, без дампа так без дампа

$sql = 'SELECT * FROM `table` LIMIT 10';

$sth = $dbh->query($sql);

while ($data = $sth->fetch()) {
unset($data);
}

echo memory_get_peak_usage(true) . "\n";

Цитата
>php index.php
524288


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




Invis1ble, ты правда хочешь чтобы я поверил что первая строка выдала 1966866432, а 10 строк включая первую 524288? biggrin.gif


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


Valick
где ты увидел, что первая выдала 1966866432 ?


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5493
Пользователь №: 35718
На форуме: 4 года, 16 дней
Карма: 167




Цитата (Invis1ble @ 25.12.2014 - 18:05)
Valick
где ты увидел, что первая выдала 1966866432 ?

Цитата
результат вот этого кода пожалуйста
хотя я не вижу $dbh может у тебя там хз что подключено

$sql = 'SELECT * FROM `table`';

echo memory_get_usage(true) . "\n";

$sth = $dbh->query($sql);

$data = $sth->fetch();

echo memory_get_usage(true) . "\n";

Цитата (Invis1ble @ 25.12.2014 - 16:43)
Цитата
результат вот этого кода пожалуйста

Цитата
>php index.php
262144
1966866432



--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (8) « Первая ... 2 3 [4] 5 6 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса