数据获取技术

时间:2013-06-08 20:53:01

标签: java database

我想建议从数据库中获取数据。 例如,我在数据库中有数百万个数据,我希望在我的网页中使用一些编程语言将其显示为每页10行。

那么最好的办法是什么,

  1. 获取所有数据并进行分页
  2. 或仅提取有限数据。
  3. 由于在第一种方式获取数据,可能存在数据操作的可能性,例如,如果我汇集所有数据并显示它,并且用户在显示数据后更改了一些细节。而对于一个小小的改变,我需要再次获得所有数百万的数据。
    而在第二种数据获取方式中,我需要始终连接数据库以获得每页10行的信息 请澄清我的疑问

2 个答案:

答案 0 :(得分:1)

一定要使用具有查询级别限制/分页的有限数据提取进行分页。在我看来,加载所有数据不是一个选项,因为它给系统资源带来了不必要的压力,实际上编码起来有点困难。

拥有页面变量,并使用它来创建传递给数据查询的参数。如何实际执行查询与数据库相关。

MySQL的简单示例可能是两步查询:

select count(*) from ... where ...

获取可能结果的数量,然后

select ... from ... where ... limit *offset*,*count*

其中* count *是items-per-page,* offset *是* count * times page-number。对您查询的每个页面执行两个查询,以捕获更改。

答案 1 :(得分:1)

到目前为止,最简单的选择是根据需要获取数据,如Per's answer中所述。但是,这可能无法产生最佳性能(但如果应用程序不是性能关键,我不会再做任何其他事情了。)

如果您只打算显示10条记录,请不要获取数百万条记录。虽然值得考虑的选项(如果您的应用程序具有对数据的独占访问权限)是将所有数据一直加载,只需将数据库更多地用作备份设备,只有在应用程序重新启动时才能读取,我认为数百万行对于这个模型来说有点多了。

虽然缓存可能是一个不错的选择。 Wikipedia有一个缓存算法列表。我可能会建议最近最少使用。

服务器端缓存通常是一个不错的考虑因素。 危险 - 这里的数据结构选择效率低下(或者对应用程序的使用方式缺乏了解)可能会严重影响您的应用程序性能。

客户端缓存可以提供更快的应用程序响应时间,尤其是在存在高延迟的情况下。请记住,每个用户都有自己的缓存 - 这仅适用于某些应用程序。

除了常规缓存之外,对于上述任何一种情况,你可以加载让我们说10条所需行周围的100行(假设用户通常会转到下一页/上一页,这个操作实际上是有意义的)。 100就是这里要玩的数字 - 理想数字在很大程度上取决于你的应用程序的使用方式。

以Stack Overflow为例,最常见的(选择)查询可能是显示新问题列表。这些都可以缓存(服务器端),因此不需要数据库查询来获取它们。

实用说明

对于服务器端缓存,如果您的应用程序具有对数据的独占访问权限 - 只要有任何更改,这些将通过您的应用程序进行,因此您只需修改本地副本或清除缓存,无需查询数据库,看它是否发生了变化。

对于客户端缓存,或者如果您的应用程序具有对数据的独占访问权限 - 您可以在数据库中的某处添加版本控制或最后修改的值,您可以查询这些值以进行检查更新。