Эффективный способ анализа больших объемов данных?

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Вы можете использовать программу, такую ​​как Resourcer, для загрузки db в файл resx.

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

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

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

Ответ 6

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

Ответ 7

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

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

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