2012-05-18 3 views
2

java에 정보를 저장하고 싶지만 Database (mysql, ...)를 사용하고 싶지 않습니다. 프로그램의 속성은 파일에 저장되고 초당 500 회 업데이트되며 프로그램이 실행될 때 한 번로드됩니다.이 프로그램은 5 시간 이상 실행될 수 있습니다. 이 프로그램의 성능 (속도)이 두드러집니다. PC 종료가 예기치 않게 (예를 들어, 전원 케이블 분리에 대한) 내 정보가 필요해서 저장/하나의 긴 변수, 초당 1,024분의 500 번 업데이트 손실 경우 때문에 answers.I에 대한txt 파일 또는 JDOM 또는 DOM 또는


탱크는 RAM을 사용할 수 없습니다.

+0

나는 당신이 지금까지 시도한 것을 알고 있을까요? –

+0

어느 쪽을 사용합니까 (JDOM, DOM 또는 JAXP 또는 .txt 파일 또는 데이터베이스).이 프로그램의 플랫폼은 Linux입니다. – Nasir

+1

더 나은 성능을 위해 메모리 데이터베이스에서 사용하는 것이 좋습니다. [link] (http://en.wikipedia.org/wiki/In-memory_database)에서 메모리 데이터베이스의 수를 확인할 수 있습니다. Mysql을 사용하지 마십시오. 업데이트 성능이 느립니다. –

답변

0

퍼포먼스의 적합성에 대해서는 잘 모르겠지만 Java는 java.util.prefs.Preferences를 가지고 있습니다. 이것은,이 종류의 스토리지를 실행하도록 (듯이) 설계되고 있습니다. 적어도 그것을 고려해야합니다.

또한도 쉽게 XML로, 그것도 할 수 java.util.Properties를 고려해야합니다 ....

는 JDOM 자체가 (I 유지, 따라서 어떤 편견을 가지고있는) 그것을 할 수있는 것 파일 크기와 하드웨어 및 출력 할 때 데이터의 형식을 다시 지정하는지 (또는 더 빠른/기본 '원시'형식을 사용하는지)에 따라 다릅니다.

진짜 질문은 "귀하의 질문은 무엇입니까?" ....

  • 할 수 있습니까?
  • JDOM으로 할 수 있습니까?
  • DOM으로 끝낼 수 있습니까?
  • 다른 작업으로 더 잘 수행 할 수 있습니까?
  • Windows보다 Linux에서 더 빨리 수행 할 수 있습니까? (내가 상상할 수있는 ...)
  • 두 번째로 500 번 저장하는 이유는 무엇입니까? 왜 캐쉬하지 않고 저장하려면 shutdown hook을로드해야합니까?
0

설정을 저장하려면 google protocol buffer 일 수 있습니다. 명백하게 그들은 매우 빨리 파싱/작성 될 수 있습니다. 그러나 속도를 즐기고 싶다면 사람이 읽을 수있는 형식으로 저장되지 않습니다. 나는 당신의 질문에서 당신이 그것을 원한다고 결론 내릴 수는 없습니다.

기본적으로 프로토콜 버퍼를 사용하면 저장할 내용을 정의한 다음 실제로 해당 데이터를 저장 /로드하는 코드를 생성 할 수 있습니다. 바이너리로 작성하기 때문에 XML이나 일반적인 jave Properties 파일보다 빠를 수 있습니다. 따라서 성능이 정말로 중요한 경우 반드시이를 고려해야합니다.

0

이것은 당신이 찾고있는 것이 아니지만 Object Serialization에 대해 생각해 보셨나요? 기본적으로 객체 implam java.io.Serializable을 가지고 있고 ObjectOutputStream에 부여 할 수 있으며 out.writeObject(yourObject)라고 말할 수 있습니다. 그것은 아주 쉽다. 다음은 쓰기 및 읽기 용 Java Helper Library의 예제 메서드입니다.

/** 
* Saves the given object to the given destination. The object and all it's variables must implement 
* java.io.Serializable or the variables must have the keyword "transient" in front of it. 
* 
* @param object 
* @param savePath 
* @throws IOException 
*/ 
public static void saveObject(Object object, String savePath) throws IOException { 
    FileOutputStream f_out = new FileOutputStream(savePath); //If you want the object to be saved in memory just create a ByteArrayOutputStream instead and return the bytes in this method. 
    ObjectOutputStream o_out = new ObjectOutputStream(f_out); 
    o_out.writeObject(object); 
} 

/** 
* Opens an object from the given openPath and returns it 
* 
* @param openPath 
* @return 
* @throws IOException 
* @throws ClassNotFoundException 
*/ 
public static Object loadObject(String openPath) throws IOException, ClassNotFoundException { 
    FileInputStream f_in = new FileInputStream(openPath); //If you want the object to be saved in memory just give the method a byte[] and create a ByteArrayInputStream instead. 
    ObjectInputStream o_in = new ObjectInputStream(f_in); 
    return o_in.readObject(); 
}