1

我正在用 java 编写一个小代理,它将与其他代理玩游戏。我想在程序运行之间保留少量状态(最多可能约为 1kb),以便我可以尝试根据过去的成功调整代理的性能。本质上,我会在每场比赛开始时读取少量数据并在结束时写入少量数据。似乎我有 2 个选项,文件 I/O 或 derby。两者都有速度优势吗?或者对于这么少量的数据真的不重要吗?

4

2 回答 2

2

对于 1kb 的数据,最好使用标准文件 IO。最有可能的是,您可以将整个对象树序列化到磁盘并在再次启动时进行反序列化。如果您想变得花哨,可以使用 JAXB 序列化为 XML 而不是二进制文件。

尽管我喜欢将每个问题都适合数据库解决方案,但我认为这在这里不太实用。除非您对数据库特定功能有一些特殊需求,否则使用数据库会引入大量开销、复杂性和维护问题。

您可能真正想要使用数据库的唯一领域是您有很多小对象/行并且您经常对数据执行排序和过滤。但即便如此,您也可以保留十几个内存中的有序列表,并以更少的资源获得更好的性能,而不必担心数据库的问题。

如果您真的认为在这种情况下需要数据库,请考虑 HSQL。我不认为它是一个真正的数据库,但它是一个可以持久保存到文件的内存数据库。低开销、低复杂性和相对较少的故障点。另外,如果您需要编辑持久化的数据,您可以使用文本编辑器来完成。不能这么说德比。

于 2008-11-06T21:12:13.943 回答
1

考虑到这些对象可能因文件大小而异,并且您的计算机规格(总线速度、HD 速度)会影响这一点,唯一确定的方法是编写自己的基准测试。只需创建一个简单的 for 循环,从 1 数到 1000,然后一遍遍地读取循环内的文件(但不要创建和销毁循环内的对象,只关注读取部分)。

当然,这整个练习充满了预优化的味道,这可能会导致不良的编码习惯。只需以最易读、最简单的方式编写代码,如果出现速度问题,请根据需要进行重构。

但由于它是少量数据,我会说没关系。

于 2008-11-06T20:36:16.450 回答