Автор Тема: Perl DBI:fetchall_arrayref жрет память?  (Прочитано 4517 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн NetHead

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.eage.ru
Perl DBI:fetchall_arrayref жрет память?
« : 21 Марта 2004, 12:47:38 »
Если использовать метод fetchall_arrayref, то много будет расходоваться памяти? Стоит ли использовать под mod_perl?
« Последнее редактирование: 21 Марта 2004, 13:30:18 от NetHead »

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #1 : 22 Марта 2004, 09:13:31 »
NetHead

Данный метод "жрет" памяти столько, сколько данных ты выбираешь...
Не выбирай запросом лишнего, и памяти будет тратится мало, на то и прибуманы Базы Данных...

Оффлайн NetHead

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.eage.ru
Это понятно, дело в другом...
« Ответ #2 : 22 Марта 2004, 09:26:27 »
Это понятно, дело в другом. Есть необходимость выбирать данные не просто построчно в цикле, а знать что будет в следующей строке. Вот сдесь и встает выбор пользоваться fetchall_arrayref или другими путями. А вибираться будет не более 100 строк по 8 полей, но с VARCHAR\'ами и TEXT\'ом.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Perl DBI:fetchall_arrayref жрет память?
« Ответ #3 : 22 Марта 2004, 10:20:37 »
Ну и кто мешает сделать получить две строки если это требуется?
2B OR NOT 2B = FF

Оффлайн NetHead

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.eage.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #4 : 22 Марта 2004, 10:42:07 »
Если выбирать в цикле эти 2 строки, и выбирать например методом fetchrow_arrayref... вообщем как лучше организовать этот цикл? Может накидаешь маленький кусочек кода на perl?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #5 : 22 Марта 2004, 11:30:38 »
my $row1 = $sth -> fetchrow_arrayref();
my $row2;
while ($row2 = $sth -> fetchrow_arrayref()) {
#  $row2 - следующая строка
#  $row1 - текущая строка
# обрабатываешь свои записи
$row1 = $row2;
}
# обработка последней записи...

только я сомневаюсь, что $sth при этом не будет съедать память...
IMHO тогда лучше циклом выполнять запросы...
А вообще лучше подумать о втором запросе который будет выбирать только то, что тебе требуется выбирать из следующих записей...

Оффлайн NetHead

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.eage.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #6 : 22 Марта 2004, 11:49:56 »
Я так пробовал делать, только глюк получился какой-то. Я и выбирал между этими способами: fetchall и тот который написал Phoinix. Какой рациональнее использовать?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #7 : 22 Марта 2004, 11:58:28 »
NetHead
Цитировать
Phoinix
только я сомневаюсь, что $sth при этом не будет съедать память...

!!!
$sth = $dbh -> prepare($sql); $sth -> execute();
$sth - результат запроса! Сколько он будет занимать памяти, если ты не изменишь запрос?

Цитировать
Phoinix
А вообще лучше подумать о втором запросе который будет выбирать только то, что тебе требуется выбирать из следующих записей...


Цитировать
NetHead
Я так пробовал делать, только глюк получился какой-то.

Что такое глюк? В программировании есть только ошибки, которые надо исправлять!

Оффлайн NetHead

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.eage.ru
Perl DBI:fetchall_arrayref жрет память?
« Ответ #8 : 22 Марта 2004, 13:32:14 »
Цитировать
Что такое глюк?

А глюк это:
my $row1 = $sth -> fetchrow_arrayref();
my $row2;
while ($row1->
  • ) {

  $row2 = $sth -> fetchrow_arrayref();
  # в этом месте $row2 выбрал ту же строку, что и $row1

  $row1 = $row2;
}

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28