[Moscow.pm] tie Berkeley. Разобрался!!!

ksvs ksvs1996 на ymail.com
Вт Окт 23 23:02:11 PDT 2012


Разобрался!!!

Оказывается, в отличие от обычных хешей, для tied хешей вызов
scalar keys %foo не оптимизирован. Поэтому вместо того, чтобы просто вернуть количество записей, идет перебор и подсчет всех.
Читал, что в какой-то базе данных тоже так. или в Постгресс или ИнноДВ.

Вот как оказывается, заменил одну строчку, а какой результат.

Как только стал посчитывать сам - все залетало!

Интересно, а много еще подводных камней в Perl?

А если бы не использовал tie, а напрямую, то не потерял бы 4 дня!!!

После этого задумаешься, а стоит смотреть на Moose и прочие штучки.




----- Original Message -----
From: ksvs <ksvs1996 на ymail.com>
To: Moscow.pm group <moscow-pm на pm.org>
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
moscow-pm на pm.org | http://moscow.pm.org



Подробная информация о списке рассылки Moscow-pm