我有一个Java应用程序,每秒启动和停止数以亿计的项目(从外部脚本调用)多次。词典:硬编码与外部文件
Input: String key
Output: int value
这个应用程序的目的是为了寻找某一个键在从未永远永远变化Map
(〜30K键)并返回值。好简单。
问题:多次使用时每秒有什么更有效:在
Map
- 硬编码字典阅读与
BufferedReader
- 外部文件..用你的其他想法给我惊喜
我知道硬编码是邪但有时,你需要以恶是有效:-)
我有一个Java应用程序,每秒启动和停止数以亿计的项目(从外部脚本调用)多次。词典:硬编码与外部文件
Input: String key
Output: int value
这个应用程序的目的是为了寻找某一个键在从未永远永远变化Map
(〜30K键)并返回值。好简单。
问题:多次使用时每秒有什么更有效:在
Map
- 硬编码字典阅读与
BufferedReader
- 外部文件..用你的其他想法给我惊喜
我知道硬编码是邪但有时,你需要以恶是有效:-)
从文件中读取字典。将其存储在Map
中。将您的Java应用程序设置为连续运行的服务(因为您说它每秒被调用多次)。然后你的Map
将被缓存在RAM中。
我将文件加载到一个Map
在应用程序的启动,然后用它作为你描述。
我会将数据存储在数据库中以加快加载速度。
绝对没有应用程序每次被调用时启动和关闭;把它作为一个服务来等待IO,使用异步I/O,如netty
最快的是内存中的硬编码地图。 如果UA有一个巨大的文件,你可以使用内存映射文件:
MappedByteBuffer in = new FileInputStream("map.txt").getChannel().map(
FileChannel.MapMode.READ_ONLY, 0, LENGTH);
StringBuilder bs = new StringBuilder();
//read 1/4 of the file
while (i < LENGTH/4)
bs.append((char)in.get(i++));
这种做法是有点问题,虽然,在实践中,你将要分区的换行符的文件 即读,直到第100行清理缓冲区并阅读更多内容。
最好能让地图随时随地轻松访问您的Java应用程序。 – 2013-05-02 19:55:43
使用数据库是一个选项? – 2013-05-02 19:57:35
你为什么要这么开始和停止应用程序?为什么不让它运行并根据需要处理请求? – dlev 2013-05-02 19:58:09