如何通过不可预测的结果实现服务器端分页

时间:2012-09-12 23:14:39

标签: java caching pagination server-side

我有一堆工具存储在一个表中,每个工具关联的事务存储在其子表中。我有一个算法,根据事务表条目中的性能确定要购买的工具。我的算法输出可能会建议购买工具,而不是基于其性能。

我的最终目标只是逐页显示工具列表(具有服务器端分页),建议由算法购买。我的问题是,如果我获取前10个工具及其交易并作为算法的输入,我的算法可能会或可能不会推荐所有购买的工具,在这种情况下,有资格显示的工具是不够的对于当前页面。我必须再次返回数据库并获取更多内容,直到我的结果足以显示当前页面(包括太多的db迭代)。

我目前正在获取所有内容并在服务器端缓存结果集合(使用Ehcache)并在我的集合上应用服务器端分页。但如果有太多并发用户访问此页面,这会推动服务器内存不足。

这类问题的最佳解决方案是什么.. !!?

1 个答案:

答案 0 :(得分:0)

我担心没有银弹解决方案,但我想在这里分享我的想法

通常,如果您希望获得准确的分页结果,则理想情况下需要在同一事务中运行所有迭代,否则数据将不一致,因为可以对持久存储执行并行更新。但是我不确定你的帖子是否可行。

所以,请考虑以下事项:

  • 不要像现在一样将所有内容存储在内存中,而是在内存中维护一些共享对象池,而并行客户只会存储指向对象而不是整个对象的指针。

  • 使用某种结果序列化。除了琐碎的序列化,你可能会对“off heap memory”感兴趣,它适用于ehcache:http://ehcache.org/documentation/user-guide/bigmemory

  • 考虑仅在迭代中存储工具ID,并且可能是算法需要做出决定的最小数据。然后,当您准备好显示结果时,请提出额外的请求,并通过提供一系列ID作为输入,从持久层获取显示结果所需的内容。您可能仍然不需要所有数据,这将节省您的记忆

  • 增加堆。琐事:-)

希望这有帮助