データベース内のすべてのオブジェクト(行)をエクスポートしたい。それらは一度にメモリに収まらないので、一度にすべてをフェッチするのではなく、ストリーミングしたいと思います。メモリーフットプリントが低いアプローチはどれですか?JDO(Datanucleusの実装)はストリーミングをサポートしていますか?
別のプロジェクトでは、jdbc ResultSetと100のfetchsizeを使用してそれを行うことができました。ただし、可能であれば、単純なJDBCの実装ではなく、JDOのマッピングを使用したいと思います。
編集:言うのを忘れました:PersistenceManagerに強力なキャッシュを使用していますが、無効にできますか?とにかくデータは読み取り専用であり、保持する必要はありません。
編集:クエリコード:
リポジトリメソッドを呼び出すサービスメソッドにはSprings@Transactional(readonly = true)アノテーションが付けられ、persistenceManagerFactoryはSpringプロキシであり、try-catch-finally処理は省略され、すでに述べたようにレベル1キャッシュは強力です。
public class MyRepository extends AbstractRepository<MyItem> {
public Collection<MyItem> retrieve(Object value) {
return query("myfiel==:myvalue",value)
}
}
public class AbstractRepository<T> {
private Class<T> type;
private PersistenceManagerFactory persistenceManagerFactory;
public Collection<T> query(String query, Object value) {
return createManager().newQuery(type, query).execute(value);
}
public PersistenceManager createManager() {
return persistenceManagerFactory.getPersistenceManager();
}
}