Как я могу быстро получить доступ к данным во многих больших файлах CSV из Perl? - PullRequest
7 голосов
/ 25 июля 2009

У меня есть несколько сценариев, которые в настоящее время читают множество данных из некоторых файлов .CSV. Для эффективности я использую модуль Text :: CSV_XS , чтобы прочитать их, а затем создать хэш, используя один из столбцов в качестве индекса. Тем не менее, у меня есть много файлов, и они довольно большие. И каждый из сценариев должен снова прочитать данные.

Вопрос заключается в следующем: как я могу иметь постоянное хранилище этих хэшей Perl, чтобы все их можно было считывать обратно с минимумом ЦП?

Объединение сценариев не вариант. Я хотел бы ...

Я применил 2-е правило оптимизации и использовал профилирование, чтобы обнаружить, что подавляющее большинство процессоров (около 90%) находится в:

Text::CSV_XS::fields
Text::CSV_XS::Parse
Text::CSV_XS::parse

Итак, ясоздал тестовый скрипт, который считывал все файлы .CSV ( Text :: CSV_XS ), сбрасывал их с помощью модуля Storable , а затем возвращался и считывал их обратно, используя Сохраняемый модуль. Я профилировал это так, чтобы я мог видеть время процессора:

$ c:/perl/bin/dprofpp.bat
Total Elapsed Time = 1809.397 Seconds
  User+System Time = 950.5560 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 25.6   243.6 243.66    126   1.9338 1.9338  Storable::pretrieve
 20.5   194.9 194.92 893448   0.0002 0.0002  Text::CSV_XS::fields
 9.49   90.19 90.198 893448   0.0001 0.0001  Text::CSV_XS::Parse
 7.48   71.07 71.072    126   0.5641 0.5641  Storable::pstore
 4.45   42.32 132.52 893448   0.0000 0.0001  Text::CSV_XS::parse
 (the rest was in terms of 0.07% or less and can be ignored)

Итак, использование Storable стоит около 25,6% для загрузки обратно по сравнению с Text :: CSV_XS около 35%. Не много экономии ...

Кто-нибудь получил предложение о том, как я могу более эффективно читать эти данные?

Спасибо за вашу помощь.

1 Ответ

9 голосов
/ 25 июля 2009

Разобрать данные один раз и поместить их в SQLite db . Запрос с использованием DBI .

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