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

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

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

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

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

10
задан John Saunders 28 February 2010 в 01:26
поделиться

7 ответов

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

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

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

3
ответ дан 4 December 2019 в 02:25
поделиться

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

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

3
ответ дан 4 December 2019 в 02:25
поделиться

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

1
ответ дан 4 December 2019 в 02:25
поделиться

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

1
ответ дан 4 December 2019 в 02:25
поделиться

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

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

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

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

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

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

0
ответ дан 4 December 2019 в 02:25
поделиться

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

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

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

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

0
ответ дан 4 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: