在浏览器中显示100万行

时间:2012-11-29 12:44:09

标签: database hibernate design-patterns web derby

我们的Utilty有一个单独的表,它有1000万到5000万行,可能有一个案例我们需要在一个页面的html客户端页面中显示5000万行。为了在浏览器中显示我们使用jQuery的行UI。

要检索行,我们使用Hibernate并使用Spring for MVC。我正在寻找检索行和在UI中显示的最佳实践。我应该在Hibernate和缓冲区中检索大量的数千行或两千行到Web客户端,还是有最佳实践?

3 个答案:

答案 0 :(得分:9)

最佳做法是不要这样做。它会爆炸浏览器内存和渲染引擎,并且会花费太多时间来加载。

在您的网络应用中添加搜索表单,让最终用户搜索他感兴趣的内容,并且只显示N个第一个搜索结果,就像Google一样。

无论如何,没有人能够在没有搜索的情况下对5000万行做任何有意义的事情。

答案 1 :(得分:4)

我认为你应该使用滚动分页(当用户到达页面底部时进行ajax调用并加载数据)。

例如快速谷歌example& demo

如果您的数据是表格式的,那么您可以使用jQGrid

答案 2 :(得分:1)

必须通过虚拟化处​​理应用程序中的大量数据。确实,用户将被数百万条记录所淹没,但这并不是真的,他们无法对其进行处理,也不是无法理解如此大量的数据。

在实践中,根据您的工作,您会注意到,只有数千条记录会限制您的工作。坦率地说,这是很少的数据。如果以数据为中心的应用程序要在浏览器中运行并表现良好,则完全需要另一种方法。

我们这样做的方法很简单,但并不是那么简单。

这有助于确定固定高度,因为您将需要知道可滚动容器的最大高度。然后,您可以将在任何给定时刻可见的记录子集呈现到此容器中,并相应地定位它们(​​基于滚动事件)。有或多或少的有效方法可以做到这一点。

最终目标保持不变。基本上,您需要剔除屏幕上不直接可见的所有内容,以使浏览器无需为应用程序做出响应而付出存储和布局逻辑的成本。这是游戏开发中的普遍做法,在任何给定时刻,只有屏幕上当前可见的世界才会出现。这就是您需要做的事情,以使大量材料正常运转。

在浏览器的上下文中,如果不是绝对重要的,那么所有归因于内存使用和布局/渲染成本的事物都必须消除。

您还可以错开和涂抹重新计算,以免导致每次小更新都会导致应用程序降级的任何开销。如果应用程序保持响应状态,则用户可以等待1秒钟。