2010-07-13 2 views

답변

3

컴팩트/축소로 무엇을 의미합니까? 기존 데이터베이스를 더 작게 만드시겠습니까? 또는 데이터베이스를 압축 하시겠습니까?

이 중 하나의 역할은 defragmentation입니다. 이렇게하면 데이터베이스에서 사용하지 않는 공간이 확보됩니다. 개체를 삭제하면 데이터베이스가 축소되지 않습니다. 대신 공간은 새로운 객체에 대해 무료로 표시됩니다. 그러나 초과 작업으로 데이터베이스를 조작하면 파일이 조각화됩니다. 따라서 조각 모음은 데이터베이스의 사용되지 않는 공간을 다시 가져옵니다.

많은 문자열을 저장할 때 기본 전체 유니 코드 대신 UTF8 encoding을 사용해야합니다. 이제 문자가 한 바이트 만 사용하기 때문에 많은 공간을 절약 할 수 있습니다.

EmbeddedConfiguration config = Db4oEmbedded.newConfiguration(); 
config.common().stringEncoding(StringEncodings.utf8()); 
ObjectContainer database = Db4oEmbedded.openFile(config,"database.db4o"); 

기존 데이터베이스에 대해서는이 설정을 변경할 수 없습니다. 문자열 인코딩을 변경하려면 데이터베이스의 조각 모음을 수행해야합니다.

데이터베이스를 압축하려면 압축 storage-implementation을 사용할 수 있습니다. 그러나 나는 이것을 수행하는 사용 가능한 구현을 모른다.

+0

내가 RSSOwl (sourceforge 제외)이라는 프로그램을 사용하고 있기 때문에 내가 묻는 이유가 있습니다. 프로그램에 대한 데이터베이스는 이제 거의 2GB에 달하며, 포럼에서 프로그램에서 뉴스 항목을 삭제할 수 있다고 말했지만 DB는 결코 작아지지 않을 것이라고합니다. 개체가 데이터베이스에서 삭제되었지만 크기가 줄어들지 않는다면 압축 또는 축소 작업을 수행 할 수있는 방법이 있어야한다고 가정합니다. 그냥 그것을 찾을 수 없습니다 ... – NinjaCat

+0

db4o 조각 모음은 당신이 원하는 것을 할 것입니다. CLASSPATH의 RSSOwl 소스를 사용하여 실행해야합니다. 제품에 Defragment를 포함하도록 RSSOwl 담당자에게 요청할 수 있습니다. 그것들은 정말로 쉽습니다. 코드에 3 줄을 추가하고 앱에 하나 더 많은 메뉴 항목을 추가했습니다. –

+0

와우 ...이 작업을 수행하는 유틸리티가 있습니까? 아니면 작은 응용 프로그램을 작성해야합니까? – NinjaCat