0

データベース内のすべてのオブジェクト(行)をエクスポートしたい。それらは一度にメモリに収まらないので、一度にすべてをフェッチするのではなく、ストリーミングしたいと思います。メモリーフットプリントが低いアプローチはどれですか?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();
    }
}
4

1 に答える 1