在运行时计算与SQL Server表中的查找

时间:2012-05-15 12:05:15

标签: asp.net asp.net-mvc-3 performance tsql database-design

我有一个需要运行几个计算的MVC应用程序。其中,我只对大约800万个结果感兴趣。我必须做这项工作,因为我需要看到整体的高分和低分。我将保存这些数据,并将其存储在一个包含16个浮点数的表中。我在这个表上也有一些索引用于查找。到目前为止,我只处理了5%的数据。

当用户将数据输入我的网站时,我必须根据他们的数据进行计算。我必须确定最佳和最差的结果。这只是大约400万次计算。现在,在我的本地PC上计算需要大约一秒或更少。或者它是一个简单的查询,它总是从我存储的数据中返回2条记录。最好的和最坏的。现在,获取结果的查询与计算结果的速度相同或更快,但我还没有全部800万条记录。我担心数据库会变慢。

我以为我会使用数据库查找,如果性能成为问题,请切换到运行时计算。

问题:我是否应该省去麻烦并进行运行时计算? 我不确定哪个选项更具可扩展性。我不希望这个网站有庞大的用户群。 该网站需要活泼。

3 个答案:

答案 0 :(得分:1)

你的问题有点模糊,无法提供明确的答案,但我的猜测是使用数据库来计算总数将比你在网站上编写代码更有效率。 Sql Server将尝试优化查询以尽可能多地使用服务器资源,以提高其效率。除非您专门编写代码,否则您的代码不会这样做。

我首先要在制定优化策略之前加载数据并进行测试。在加载远离您将要处理的数据的数据之前,您不知道系统的真正瓶颈在哪里。

答案 1 :(得分:0)

如果我理解执行计算的问题更具可扩展性,那么它就在单个数据集上。在向表中添加数据时,即使使用索引,查找也会变慢。此外,索引会增加表大小并增加插入记录所需的时间。

答案 2 :(得分:0)

如果我理解正确,这是一个关于缓存的问题 - 你应该动态计算,还是在缓存中查找结果?

在大多数Web体系结构中,您的SQL数据库是一个出色的缓存,直到它成为一个可怕的缓存。扩展您的(SQL)数据库是非常棘手的 - 引入群集,分片等本身就成了一种生产方式。

我的 - 非常一般 - 建议使用您的关系数据库来管理事务数据,并使用缓存技术进行缓存。如今,800万条记录应该放在一台体面的服务器的RAM中 - 而且您可以比扩展数据库更便宜地添加Web服务器。