2008-11-06 1 views
1

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

ответ

1

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

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

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

+0

Да, это то, что я понял. – 2008-11-06 20:42:09

2

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

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

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

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

Смежные вопросы