Эффективный способ анализа больших объемов данных? - PullRequest
10 голосов
/ 28 февраля 2010

Мне нужно проанализировать десятки тысяч строк данных. Данные импортируются из текстового файла. Каждая строка данных имеет восемь переменных. В настоящее время я использую класс для определения структуры данных. Читая текстовый файл, я сохраняю каждый объект строки в общем списке List.

Мне интересно, стоит ли мне переходить на использование реляционной базы данных (SQL), поскольку мне нужно будет анализировать данные в каждой строке текста, пытаясь связать их с определениями терминов, которые я также в настоящее время храню в общих списках (List) .

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

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

Ответы [ 7 ]

3 голосов
/ 28 февраля 2010

Это не большой объем данных.Я не вижу смысла привлекать базу данных к вашему анализу.

В C # встроен язык запросов - LINQ.Оригинальный плакат в настоящее время использует список объектов, так что на самом деле ничего не остается сделать.Мне кажется, что база данных в этой ситуации добавит гораздо больше тепла, чем света.

3 голосов
/ 28 февраля 2010

Не обязательно заходить в базу данных. Это зависит от фактического размера данных и процесса, который вам нужно сделать. Если вы загружаете данные в список с помощью пользовательского класса, почему бы не использовать Linq для выполнения запросов и фильтрации? Что-то вроде:

var query = from foo in List<Foo>
            where foo.Prop = criteriaVar
            select foo;

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

1 голос
/ 28 февраля 2010

Я столкнулся с той же проблемой, с которой вы столкнулись сейчас, когда я работал над моей предыдущей компанией. Дело в том, что я искал конкретное и хорошее решение для большого количества файлов, созданных штрих-кодом. Тысячи записей в одном файле. Поначалу мне было очень сложно обрабатывать и представлять данные. На основе записей, которые я запрограммировал, я создаю класс, который читает файл и загружает данные в таблицу данных и может сохранить его в базе данных. База данных, которую я использовал, была SQL Server 2005. Затем я смог легко управлять сохраненными данными и представлять их по своему вкусу. Главное - прочитать данные из файла и сохранить их в базе данных. Если вы это делаете так что у вас будет много вариантов для манипулирования и представления так, как вам нравится.

1 голос
/ 28 февраля 2010

Звучит так, как будто вам нужна база данных. Sqlite поддерживает базы данных в памяти (используйте «: memory:» в качестве имени файла). Я подозреваю, что другие могут иметь режим в памяти.

0 голосов
/ 11 марта 2010

Из вашего описания я думаю, что инструменты командной строки Linux могут очень хорошо обрабатывать ваши данные. Использование базы данных может излишне усложнить вашу работу. Если вы используете окна, эти инструменты также доступны различными способами. Я бы порекомендовал Cygwin. Следующие инструменты могут покрыть вашу задачу: сортировка, grep, cut, awk, sed, join, paste.

Эти инструменты командной строки unix / linux могут показаться пугающим для Windows, но есть причины для людей, которые их любят. Вот мои причины любить их:

  1. Они позволяют накапливать ваши навыки - ваши знания частично могут быть полезны в различных будущих задачах.
  2. Они позволяют накапливать ваши усилия - командная строка (или сценарии), которую вы использовали для завершения задачи, может повторяться столько раз, сколько необходимо с различными данными, без взаимодействия с человеком.
  3. Они обычно превосходят тот же инструмент, который вы можете написать. Если вы не верите, попробуйте выполнить сортировку с вашей версией для терабайтных файлов.
0 голосов
/ 11 марта 2010

Если вам нужно только найти и заменить, вы можете использовать sed и awk и выполнять поиск с использованием grep. Конечно, на платформе Unix.

0 голосов
/ 28 февраля 2010

Если вы не против использования доступа, вот что вы можете сделать

Прикрепите пустую базу данных Access в качестве ресурса При необходимости запишите БД в файл. Запустите оператор CREATE TABLE, который обрабатывает столбцы ваших данных Импортировать данные в новую таблицу Используйте sql для запуска ваших расчетов OnClose, удалите этот доступ db.

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

  ResourceManager res = new ResourceManager( "MyProject.blank_db", this.GetType().Assembly );
  byte[] b = (byte[])res.GetObject( "access.blank" );

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

«MyProject.blank_db» - это местоположение и имя файла ресурса. «access.blank» - это вкладка, указанная ресурсу для сохранения

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