2013-05-02 63 views
0

我有一个Java应用程序,每秒启动和停止数以亿计的项目(从外部脚本调用)多次。词典:硬编码与外部文件

Input: String key 
Output: int value 

这个应用程序的目的是为了寻找某一个键在从未永远永远变化Map(〜30K键)并返回值。好简单。

问题:多次使用时每秒有什么更有效:在Map

    1. 硬编码字典阅读与BufferedReader
    2. 外部文件..用你的其他想法给我惊喜
  • 我知道硬编码是但有时,你需要以恶是有效:-)

    +0

    最好能让地图随时随地轻松访问您的Java应用程序。 – 2013-05-02 19:55:43

    +0

    使用数据库是一个选项? – 2013-05-02 19:57:35

    +0

    你为什么要这么开始和停止应用程序?为什么不让它运行并根据需要处理请求? – dlev 2013-05-02 19:58:09

    回答

    2

    从文件中读取字典。将其存储在Map中。将您的Java应用程序设置为连续运行的服务(因为您说它每秒被调用多次)。然后你的Map将被缓存在RAM中。

    0

    我将文件加载到一个Map在应用程序的启动,然后用它作为你描述。

    我会将数据存储在数据库中以加快加载速度。

    绝对没有应用程序每次被调用时启动和关闭;把它作为一个服务来等待IO,使用异步I/O,如netty

    1

    最快的是内存中的硬编码地图。 如果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行清理缓冲区并阅读更多内容。