Профайлер спасёт отца русской демократии.
2012/10/24 ksvs <[email protected]>: > > Разобрался!!! > > Оказывается, в отличие от обычных хешей, для tied хешей вызов > scalar keys %foo не оптимизирован. Поэтому вместо того, чтобы просто вернуть > количество записей, идет перебор и подсчет всех. > Читал, что в какой-то базе данных тоже так. или в Постгресс или ИнноДВ. > > Вот как оказывается, заменил одну строчку, а какой результат. > > Как только стал посчитывать сам - все залетало! > > Интересно, а много еще подводных камней в Perl? > > А если бы не использовал tie, а напрямую, то не потерял бы 4 дня!!! > > После этого задумаешься, а стоит смотреть на Moose и прочие штучки. > > > > > ----- Original Message ----- > From: ksvs <[email protected]> > To: Moscow.pm group <[email protected]> > Cc: > Sent: Tuesday, 23 October 2012, 9:07 > Subject: Re: [Moscow.pm] tie Berkeley > >> Даже интересно стало. Вот что я сделал: > >> https://gist.github.com/3933779 >> и убил свою ZFS на фряхе ))) >> >> Она все же пишет на диск, не знаю куда, но много. >> В gist'е последний результат которого я смог дождаться 1500000 >> элементов в хеше... >> >> А вот, когда я сделал >> tie %h1, 'BerkeleyDB::Hash', -Cachesize => 700_000_000; # поставить >> cache в 700Mb >> >> Процесс в памяти занял больше, но мучения диска начались только вот тут: >> 100000 5378313/s 223696/s >> 300000 5378313/s 231981/s >> 700000 5474182/s 233712/s >> 1500000 5296201/s 233712/s >> 3100000 5064251/s 235469/s >> 6300000 5420331/s 233712/s > > А я сделал замеры скорости программы от размера кеша: > когда перловый кеш, то примерно О(1), когда Берклевский, то О(n)! > > Тю, а я не догадался, что можно Берклей без файла использовать. > Просто сделал файл на /tmp, а /tmp у меня в памяти сделаны. > > > P.S. У меня тоже FreeBSD :-) > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
