Каков наиболее эффективный способ загрузки данных из файла в коллекцию по запросу?

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

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

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

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

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

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

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


person Dan    schedule 12.03.2010    source источник
comment
Не видеть проблемы. Вы хотите загружать данные из файла по запросу. Так сделай это. В чем проблема?   -  person Roman    schedule 12.03.2010
comment
Это не проблема. Вопрос в том, что эффективнее? Сохранение основной копии данных (в коллекции) в памяти/вне памяти на случай, если данные необходимо будет повторно посетить или загрузить/выгрузить данные в/из коллекции по запросу?   -  person Dan    schedule 12.03.2010


Ответы (2)


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

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

person rodrigoap    schedule 12.03.2010
comment
Кажется, интересный вариант для рассмотрения. Я думаю, что вопрос будет заключаться в том, хочу ли я преобразовать свои текстовые данные в базу данных и использовать JDBC для доступа к ним или сохранить их в виде текста и использовать функции сканирования/анализа + структуры из языка. Над какими приложениями вы работали с этим? - person Dan; 12.03.2010
comment
+1 это элегантный подход при работе с огромными плоскими файлами. - person setzamora; 12.03.2010

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

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

person omerkudat    schedule 12.03.2010