2

我对分页做了一些研究,从我读过的内容来看,有两种相互矛盾的解决方案

  1. 每次用户单击下一个时从数据库中加载一小组数据 问题 - 假设有一百万行满足任何 WHERE 条件。这意味着一百万行被检索、存储、文件排序,然后大部分被丢弃,只有 20 行被检索。如果用户单击“下一步”按钮,同样的过程再次发生,只会检索到不同的 20 个。(参考 - http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated -显示/

  2. 从数据库加载所有数据并缓存它......这里也提到了一些问题 - http://www.javalobby.org/java/forums/t63849.html

所以我知道我将不得不使用两者的混合......但是问题归结为 - 哪个操作更昂贵 - 在数据库中重复查询小块数据或通过网络传输大型结果集

4

1 回答 1

0

我的公司正是这种情况,我们选择了一些混合体。我们的数据是表格的,因此我们通过 AJAX 将其发送到数据表 允许良好的 UI 格式化、排序、过滤和显示/隐藏列。Datatables 有一个很棒的解决方案,它可以“提前排队”,称为“流水线”,它将在用户操作之前获取大量数据(在我们的例子中,最多是他们请求的记录的 5 倍)然后在没有请求的情况下进行分页,直到它用完数据的。使用 Datatables 非常容易实现,但我怀疑如果您必须使用 jQuery 的 AJAX 功能手动编写类似的解决方案,那么它不会很困难。

我尝试在一个 150 万条记录的数据库上进行完全加载和缓存,结果是一场火车事故。客户差点甩了我,因为他们生气太慢了。经过一夜的 AJAX 优点,客户再次感到高兴。但最好永远不要达到这一点。

祝你好运。

于 2010-10-15T23:04:12.700 回答