0

这是我第一次在这里发帖,我已经找到了很多有用的提示,可以解决我现在正在开发的程序的问题,谢谢!但是我自己还有一个问题,这个问题可能更笼统一些。

我正在为我的毕业论文构建一个 Java 程序,它是一个 RSS 阅读器(我为此使用 ROME),所有 RSS 条目都保存在 DB2 数据库中(我使用 OpenJPA 作为持久层)。所有传入的条目都将被自动标记(使用 MAUI),并根据用户对先前条目的评分(仍在研究该算法)给予“相关性分数”。有一个 SWING GUI,其中将列出所有提要和属于它们的条目,用户可以查看标签,添加新标签(MAUI 机器学习将采用这些标签来改进未来的标签)并为条目评分。

到目前为止,我实现了所有基本功能,并且运行良好。但是,我想知道这个程序的性能,考虑到所有提要都将保存在数据库和 GUI 中,如果我会按照我目前的方法进行操作的话。

为了简化它,我有对象资源和条目。资源是一个 RSS 提要,条目都是“RSS 新闻”,每个资源都有 x 个条目,但一个条目属于一个资源,这就是我在 DB2 中使用 JPA 注释对其进行建模的方式。在运行时,我创建了一个包含所有资源的列表(使用“SELECT * FROM RESSOURCES”作为我使用 Entitymanager 调用的命名查询)。那时我可以访问资源条目并用它们在 GUI 中填写一个列表。很好 - 我喜欢这样,我从一开始就从数据库中获取所有信息,然后将其转换为 Java 对象。到目前为止,我有几百个 RSS 条目,程序需要大约 7MB 的内存 - 很棒。

但是:一旦我们有一万个条目会发生什么,程序不会需要太多内存吗?我如何告诉 JPA 只加载,假设每个资源有 100 个条目(使用 JPA 检索 Ressource 对象时),我如何动态获取更多?

我知道可能有办法通过我自己的查询来解决这个问题,但我希望你知道我的意思——我想使用标准的 JPA 功能,而不会一直将我的所有数据库都变成对象,从而导致巨大的内存需求。

非常感谢您的帮助,马蒂亚斯

4

1 回答 1

1

使用分页,就像谷歌一样。不是加载所有条目,而是加载前 100 个条目,并可以加载下一页的 100 个条目,等等。

setMaxResults()setFirstResult()Query课堂上。

还要在您的 GUI 中添加一个搜索表单,因为浏览 10,000 个条目以找到您正在寻找的条目并不是任何人都想做的事情。

于 2013-01-07T18:58:20.677 回答