Что быстрее для небольшого объема информации, ввода-вывода в Java-файл или дерби? - PullRequest
1 голос
/ 06 ноября 2008

Я пишу небольшой агент в Java, который будет играть в игру против других агентов. Я хочу сохранить небольшое количество состояния (возможно, не более 1 Кбайт) между запусками программы, чтобы попытаться настроить производительность агента на основе прошлых успехов. По сути, я буду читать небольшое количество данных в начале каждой игры и писать небольшое количество в конце. Кажется, у меня есть 2 варианта, файловый ввод / вывод или дерби. Есть ли преимущество в скорости? Или это не имеет большого значения для такого небольшого количества данных?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2008

С 1 КБ данных вам лучше использовать стандартный файловый ввод-вывод. Скорее всего, вы можете сериализовать все дерево объектов на диск и отключить десериализацию при следующем запуске. Если вы хотите получить фантазию, вы можете использовать JAXB для сериализации в XML вместо двоичных файлов.

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

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

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

1 голос
/ 06 ноября 2008

Учитывая, что эти объекты могут различаться в зависимости от размера файла, и характеристики вашего компьютера (скорость шины, скорость HD) влияют на это, единственный способ убедиться в этом - написать собственный тест. Просто создайте простой цикл for, считайте от 1 до 1000 и читайте файл внутри цикла снова и снова (но не создавайте и не уничтожайте объекты внутри цикла, просто сосредоточьтесь на части для чтения).

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

Но так как это небольшой объем данных, я бы сказал, что это не имеет значения.

...