如何实现持久查找表

时间:2010-12-27 10:11:04

标签: java memory-management persistence

我的Java应用程序使用只读查找表,该表存储在XML文件中。应用程序启动时,只需将文件读入HashMap即可。到目前为止,这么好,但由于表格正在增长,我不喜欢立即将整个表加载到内存中。 RDBMS和NoSQL键值存储对我来说似乎有些过分。你会建议什么?

1 个答案:

答案 0 :(得分:1)

使您希望Java允许将无限量的堆分配为内存映射文件: - )

如果使用Java 5,则使用Java DB;它是一个基于Apache Derby的用Java编写的数据库引擎。如果您了解SQL,那么设置嵌入式数据库只需几分钟。由于您可以在每次启动应用程序时再次创建数据库,因此您不必担心权限,数据库架构迁移,陈旧缓存等。

或者您可以使用像db4o这样的OO数据库,但很多人发现很难进行心理转换以使用查询来迭代内部数据结构。举个例子:你有一个巨大的HashMap。您必须使用DB4o构建查询,然后在地图上运行该查询以查找项目,而不是使用map.get();否则DB4o将被迫立即加载整个地图。

另一种方法是创建自己的最小系统:从XML文件中读取数据并将其保存为大型随机访问文件和索引+缓存,以便快速查找项目。如果您的对象都是可序列化的,那么您可以在使用ObjectInputStream搜索到正确的位置后使用RandomAccessFile来阅读各个条目。