从数据库中获取并逐行序列化数百万条记录

时间:2016-06-08 21:34:49

标签: java oracle performance hibernate serialization

我想从数据库中查询表,比如

select * from TABLE1

TABLE1有大约1500万条记录。 有一个hibernate类Table1.java

@Table(name = "TABLE1")

    public class Table1 implements Serializable{

        @Column(name = "ID")
            private Long id;

        @Column(name = "Name")
            private String name;

        .. more columns

        .. getters and setters


    }

如果我使用hibernate查询并返回整个列表,它将占用大量内存。 相反,我想获取每一行,将对象序列化为一个文件,然后采取下一行并序列化它,依此类推。我的目标是将数据序列化为文件,这样我就不必将结果列表保存在内存中。

为了节省内存,我将结果作为ScrollableResults。我需要将ScrollableResults的结果序列化为文件,我需要逐行执行,这样我就不会在内存中保留任何内容。

public static void main(String args[]) {

        try {

            StatelessSession statelessSession = HibernateUtil
                    .getSessionFactory().openStatelessSession();
            statelessSession.beginTransaction();

            ScrollableResults results = statelessSession
                    .createSQLQuery("select * from TABLE1").setCacheable(false)
                    .setReadOnly(true).scroll(ScrollMode.FORWARD_ONLY);

            results.close();

            statelessSession.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

实际上,我需要从数据库中读取并立即对其进行序列化而不保留在内存中。怎么做到这一点?

0 个答案:

没有答案