Forum Webscript.Ru

Общие => Базы данных => Тема начата: NetHead от 21 Марта 2004, 12:47:38

Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: NetHead от 21 Марта 2004, 12:47:38
Если использовать метод fetchall_arrayref, то много будет расходоваться памяти? Стоит ли использовать под mod_perl?
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: Phoinix от 22 Марта 2004, 09:13:31
NetHead

Данный метод "жрет" памяти столько, сколько данных ты выбираешь...
Не выбирай запросом лишнего, и памяти будет тратится мало, на то и прибуманы Базы Данных...
Название: Это понятно, дело в другом...
Отправлено: NetHead от 22 Марта 2004, 09:26:27
Это понятно, дело в другом. Есть необходимость выбирать данные не просто построчно в цикле, а знать что будет в следующей строке. Вот сдесь и встает выбор пользоваться fetchall_arrayref или другими путями. А вибираться будет не более 100 строк по 8 полей, но с VARCHAR\'ами и TEXT\'ом.
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: Chs от 22 Марта 2004, 10:20:37
Ну и кто мешает сделать получить две строки если это требуется?
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: NetHead от 22 Марта 2004, 10:42:07
Если выбирать в цикле эти 2 строки, и выбирать например методом fetchrow_arrayref... вообщем как лучше организовать этот цикл? Может накидаешь маленький кусочек кода на perl?
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: Phoinix от 22 Марта 2004, 11:30:38
my $row1 = $sth -> fetchrow_arrayref();
my $row2;
while ($row2 = $sth -> fetchrow_arrayref()) {
#  $row2 - следующая строка
#  $row1 - текущая строка
# обрабатываешь свои записи
$row1 = $row2;
}
# обработка последней записи...

только я сомневаюсь, что $sth при этом не будет съедать память...
IMHO тогда лучше циклом выполнять запросы...
А вообще лучше подумать о втором запросе который будет выбирать только то, что тебе требуется выбирать из следующих записей...
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: NetHead от 22 Марта 2004, 11:49:56
Я так пробовал делать, только глюк получился какой-то. Я и выбирал между этими способами: fetchall и тот который написал Phoinix. Какой рациональнее использовать?
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: Phoinix от 22 Марта 2004, 11:58:28
NetHead
Цитировать
Phoinix
только я сомневаюсь, что $sth при этом не будет съедать память...

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

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


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

Что такое глюк? В программировании есть только ошибки, которые надо исправлять!
Название: Perl DBI:fetchall_arrayref жрет память?
Отправлено: NetHead от 22 Марта 2004, 13:32:14
Цитировать
Что такое глюк?

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

  $row1 = $row2;
}