5ГБ файл для чтения - PullRequest
       1

5ГБ файл для чтения

2 голосов
/ 05 октября 2010

У меня есть вопрос дизайна.У меня есть файл данных 3-4 ГБ, упорядоченный по отметке времени.Я пытаюсь выяснить, как лучше всего обращаться с этим файлом.

Я думал о том, чтобы прочитать весь этот файл в память, затем передать эти данные на разные машины и затем выполнить мой анализ на этих машинах.

Было бы целесообразно загрузить это в базу данных перед выполнением моего анализа?

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

Есть идеи?

@ update:

Я хочу обработать записи одну за другой.По сути, я пытаюсь запустить модель на данных временной метки, но у меня есть несколько моделей, поэтому я хочу распределить ее так, чтобы весь этот процесс выполнялся всю ночь напролет.Я хочу убедиться, что могу легко увеличить количество моделей и не снизить производительность системы.Именно поэтому я планирую распространить данные на все машины, на которых работает модель (каждая машина будет работать по одной модели).

Ответы [ 6 ]

2 голосов
/ 05 октября 2010

Вы даже можете получить доступ к файлу на самом жестком диске и одновременно читать небольшой фрагмент.В Java есть нечто, называемое файлом произвольного доступа, для того же самого, но та же концепция доступна и в других языках.

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

1 голос
/ 05 октября 2010

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

1 голос
/ 05 октября 2010

Было бы целесообразно загрузить это в базу данных перед выполнением моего анализа?

да

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

не беспокойся об этом, все будет хорошо. Просто введите маркер, чтобы идентифицировать строки, обрабатываемые каждым компьютером.

Я не уверен, что полностью понимаю все ваши требования, но если вам нужно сохранить данные (обратитесь к ним более одного раза), тогда вам стоит использовать БД. Если вам просто нужно обработать части этих выходных файлов и доверять результатам, вы можете сделать это на лету, не сохраняя никакого содержимого.

Храните только те данные, которые вам нужны, а не все в файлах.

0 голосов
/ 06 октября 2010

@ update:

Я хочу обработать записи одну за другой.По сути, я пытаюсь запустить модель на данных временной метки, но у меня есть несколько моделей, поэтому я хочу распределить ее так, чтобы весь этот процесс выполнялся всю ночь напролет.Я хочу убедиться, что могу легко увеличить количество моделей и не снизить производительность системы.Именно поэтому я планирую распространить данные на все машины, на которых работает модель (каждая машина будет работать по одной модели).

0 голосов
/ 05 октября 2010

У меня недавно была похожая проблема, и, как упомянул @lalit, я использовал средство чтения файлов RandomAccess для моего файла, расположенного на жестком диске.

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

Программу, подобную той, которую я упомянул, должно быть очень легко написать, просто попробуйте и посмотритеесли производительность - то, что вам нужно.

0 голосов
/ 05 октября 2010

В зависимости от необходимого анализа, это звучит как учебник для использования MapReduce с Hadoop. Это поддержит ваше требование добавления большего количества машин в будущем. Взгляните на вики Hadoop: http://wiki.apache.org/hadoop/

Начните с обзора, получите автономную настройку, работающую на одном компьютере, и попробуйте выполнить простой анализ вашего файла (например, начать с "grep" или чего-то еще). Требуется некоторая сборка, но как только вы настроите все, я думаю, что это может быть правильный путь для вас.

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