首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在结果不可预测的情况下实现服务器端分页

问如何在结果不可预测的情况下实现服务器端分页
EN

Stack Overflow用户
提问于 2012-09-13 07:14:39
回答 1查看 1.1K关注 0票数 1

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

我的最终目标只是一页一页地显示工具列表(带有服务器端分页),这些工具被算法推荐购买。我的问题是,如果我获取前10个工具及其事务,并将其作为算法的输入,我的算法可能会推荐购买所有工具,也可能不推荐购买所有工具,在这种情况下,有资格显示的工具对于当前页面来说是不够的。我必须再次回到数据库并获取更多,直到我的结果足以显示当前页面(其中包含太多的db迭代)。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-13 07:51:14

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

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

因此,请考虑以下几点:

  • 不要像你现在那样将所有东西都存储在内存中,而是在内存中维护一些共享对象池,这样并行客户只会存储指向你的对象的指针,而不是整个对象。
  • 会对你的结果进行某种序列化。除了简单的序列化,你可能对“离堆内存”感兴趣,它与ehcache一起工作:http://ehcache.org/documentation/user-guide/bigmemory
  • 考虑只存储迭代过程中的工具id,并且可能只存储算法做出决策所需的最少数据。然后,当您准备好显示结果时,发出额外的请求,并通过提供一系列ids作为输入,从持久层获取显示结果所需的内容。有可能你仍然不需要所有的数据,这将节省你的memory
  • Increase堆。琐碎:-)

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12397320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档