Обработка 2 миллионов записей с помощью Perl - PullRequest
1 голос
/ 17 октября 2011

У меня есть 2 миллиона записей в базе данных. Можно ли собрать их все и сохранить их по ссылке на perl-хэш без каких-либо проблем с нехваткой памяти?

Ответы [ 3 ]

9 голосов
/ 17 октября 2011

Какова ваша причина, чтобы прочитать их все в память?Скорость или простота кодирования (т. Е. Обрабатывать все как хеш-код).

Если это первое, то, конечно, я думаю, вам просто нужна тонна барана.

Если это второе, то есть интересные варианты.Например, существуют tie d интерфейсы для баз данных, которые выглядят как собственные хеши Perl, но в действительности запрашивают и возвращают данные по мере необходимости.Быстрый поиск CPAN показывает Tie::DBI, Tie::Hash::DBD и несколько связанных интерфейсов для конкретных баз данных, баз данных с плоскими файлами и файлов CSV, включая мои Tie::Array::CSV.

3 голосов
/ 17 октября 2011

С одной стороны, обработка двух миллионов элементов в хэше не является неслыханной задачей.Однако мы не знаем, насколько велики ваши записи.В любом случае, это звучит как проблема XY.Возможно, это не лучшее решение проблемы, с которой вы столкнулись.

Почему бы не использовать DBIx :: Class , чтобы ваши таблицы можно было обрабатывать как классы Perl (которые сами по себе прославляют данные-структурах)?В DBIx :: Class :: Manual :: DocMap * есть тонна документации .Это действительно то, что DBIx :: Class это все;позволяя вам абстрагироваться от деталей SQL базы данных и обрабатывать ее как серию классов.

2 голосов
/ 17 октября 2011

Это полностью зависит от того, сколько данных имеют ваши записи. Хеши и массивы Perl занимают больше памяти, чем вы думаете, хотя это не сумасшествие. Но опять же, это полностью зависит от того, как выглядят ваши данные и сколько у вас оперативной памяти. Perl не будет иметь никаких проблем с ним, если у вас есть оперативная память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...