我想提出从数据库中获取数据的建议。例如,我在数据库中有数以百万计的数据,我希望使用某种编程语言在我的网页中显示为每页10行。
所以什么是最好的方法,
因为在first way data提取中,可能存在数据操作的机会,例如,如果我将所有数据汇总并显示出来,并且用户在数据显示后更改了一些细节。而仅仅是一个小小的改变,我就需要再次获得所有的数百万数据。
而在数据获取的第二种方式中,我需要连接所有数据库,以获取每个页面的10行。
请澄清我的疑虑
发布于 2013-06-09 00:35:06
到目前为止,最简单的选择是按需要只获取数据,就像佩尔的回答中建议的那样。然而,这可能不能产生最好的性能(尽管如果应用程序不是性能关键,我就不会做更多的事情)。
如果你只想显示其中的10条,就不要获取数百万条记录。虽然有一个值得考虑的选项(如果您的应用程序具有对数据的独占访问权限),就是始终加载所有数据,并且只是将数据库更多地用作备份设备(只有在应用程序重新启动时才从数据库读取),但我认为数百万行对于该模型来说有点大。
不过,缓存可能是一个很好的选择。维基百科有一个缓存算法列表。我可能会建议最近用得最少。
服务器端缓存通常是一个不错的考虑。危险--这里数据结构的低效选择(或缺乏应用程序使用方法的知识)可能会从性能角度影响应用程序的性能。
客户端缓存可以提供更快的应用程序响应时间,特别是在延迟较高的情况下。请记住,每个用户都将拥有自己的缓存--这仅适用于某些应用程序。
在常规缓存的基础上,对于上述任何一个,您都可以加载围绕所需的10行的100行(假设用户转到下一个/上一个页面是很常见的,这个操作实际上是有意义的)。100将是在这里玩的数字-理想的数字在很大程度上取决于如何使用您的应用程序。
以堆栈溢出为例,最常见的(select)查询可能是显示新问题列表。所有这些都可以缓存(服务器端),因此不需要数据库查询来获取它们。
有用注释
对于服务器端缓存,如果应用程序具有对数据的独占访问权限--无论何时发生任何更改,这些更改都将通过应用程序进行,因此您可以简单地修改本地副本或清除缓存,而无需查询数据库以查看其是否更改。
对于客户端缓存,或者如果应用程序进行了而不是对数据的独占访问,您可以在数据库中的某个地方添加版本控制或最后修改的值,以进行查询以检查更新。
发布于 2013-06-08 21:17:57
无论如何,使用具有查询级别限制/分页的有限数据获取来执行分页。在我看来,加载所有数据不是一种选择,因为它给系统资源带来了不必要的压力,而且实际上更难编写代码。
有一个页面变量,并使用该变量创建传递给数据查询的参数。如何实际执行查询是非常依赖于数据库的。
MySQL的简单示例可以是两个步骤的查询:
select count(*) from ... where ...
若要获得可能的结果,则
select ... from ... where ... limit *offset*,*count*
其中*计数*是项目-每页,和*偏移*是*计数*乘以页号。对查询的每一页执行两次查询,以捕获更改。
https://stackoverflow.com/questions/17003740
复制相似问题