2010-03-12 5 views
3

Я работаю над проектом java, который позволит пользователям анализировать несколько файлов с потенциально тысячами строк. Анализируемая информация будет храниться в разных объектах, которые затем будут добавлены в коллекцию.Каков наиболее эффективный способ загрузки данных из файла в коллекцию по запросу?

Поскольку GUI не требует одновременного загрузки ВСЕХ этих объектов и сохранения их в памяти, я ищу эффективный способ загрузки/выгрузки данных из файлов, так что данные загружаются только в коллекцию, когда пользователь запрашивает его.

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

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

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

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

При необходимости я могу предоставить более подробную информацию.

+0

Не вижу проблемы. Вы хотите загружать данные из файла по запросу. Так сделай это. В чем проблема? – Roman

+0

Это не проблема.Вопрос в том, что более эффективно? Сохранение основной копии данных (в коллекции) в памяти/вне памяти в случае необходимости перераспределения данных или загрузки/выгрузки данных в/из коллекции по требованию? – Dan

ответ

4

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

HSQLDB (HyperSQL DataBase) является ведущим SQL реляционных СУБД написана на Java. Он имеет драйвер JDBC и поддерживает почти полный ANSI-92 SQL (формат дерева BNF) и множество улучшений SQL: 2008 . Он предлагает небольшой, быстрый механизм базы данных, который предлагает в памяти и таблицы на дисках и поддерживает встроенные и серверные режимы. Кроме того, он включает в себя такие инструменты, как , как инструмент командной строки SQL и инструменты запросов GUI .

+0

Кажется, интересный вариант рассмотреть. Я думаю, что вопрос заключается в том, хочу ли я преобразовать свои текстовые данные в db и использовать JDBC для доступа к нему или сохранить его в виде текста и использовать функции сканирования/синтаксического анализа + структуры с языка. С какими приложениями вы работали над этим? – Dan

+0

+1 это элегантный подход при работе с огромными плоскими файлами. – Joset

3

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

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