Какой самый эффективный способ загрузки данных из файла в коллекцию по требованию? - PullRequest
3 голосов
/ 12 марта 2010

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

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

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

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

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

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

Я могу предоставить больше подробностей, если это необходимо.

Ответы [ 2 ]

4 голосов
/ 12 марта 2010

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

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

3 голосов
/ 12 марта 2010

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

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

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