2013-05-02 4 views
0

수억 개의 항목 (외부 스크립트에서 호출 됨)에서 초당 여러 번 시작되고 중지되는 Java 응용 프로그램이 있습니다.사전 : 하드 코딩 된 대 외부 파일

Input: String key 
Output: int value 

이 응용 프로그램의 목적은 결코 지금까지 그 어느 변경 Map (~ 30K 키)에 특정 키를보고하고 값을 반환하는 것입니다. 아주 쉽게.

질문 : 초당 여러 번 사용할 때 더 효율적 무엇인지하십시오 Map

  • 에서

    1. 하드 코딩 된 사전은 BufferedReader
    2. 와 외부 파일을 .. 읽기 다른 생각으로 나를 무척 애타다.
  • 나는 하드 코딩 알고 그러나 때때로, 당신은 효율적인 :-)

    +0

    Java App과 관련하여 쉽게 액세스 할 수 있도록지도를 작성하는 것이 좋습니다. –

    +0

    데이터베이스 사용은 옵션입니까? –

    +0

    왜 앱을 너무 많이 시작하고 멈 춥니 까? 필요에 따라 실행하고 요청을 처리하는 것이 좋습니다. – dlev

    답변

    2

    과 같은 비동기식 I/O를 사용하여 IO를 기다리는 서비스로 사용할 수 있습니다. Map에 보관하십시오. Java 응용 프로그램을 연속적으로 실행되는 서비스로 설정하십시오 (초당 여러 번 호출 됨). 그러면 Map이 RAM에 캐시됩니다.

    0

    내가 응용 프로그램의 시작시 Map에 파일을로드 한 다음로 사용 할 수 악해야 너는 설명한다.

    빠른로드 시간을 위해 데이터를 데이터베이스에 저장합니다.

    호출 할 때마다 응용 프로그램 시작 및 종료가 확실히 발생하지 않습니다. netty

    1

    가장 빠른 속도는 메모리에 하드 코딩 된 맵입니다. 깨끗한 100 라인까지 읽어하여 예 실제로 당신은 줄 바꿈에있는 파일 을 분할하는 것이 좋습니다,

    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++)); 
    

    이러한 접근 방식은 문제가 조금 생각입니다 : UA가 큰 파일이있는 경우 당신은 메모리 매핑 된 파일을 사용할 수 있습니다 버퍼와 좀 더 읽어보십시오.