2012-02-27 60 views
3

我正在使用SQL数据库存储和我的网站是在c#中,并且都在同一台服务器上。什么是最好的计算平台SQL或c#

我已经插入了学生结果在DataBase中的表中,其中包含像TestType,MAxMarks和MarksObtained字段。

现在我必须在一个镜头中显示完整的结果,所以我必须添加所有测试类型的标记和学生在这些测试中获得的标记以显示最终结果。

我的问题是,

1)我应该从数据库中读取整个表,并做在C#类中的所有计算? 或 2)我应该使用SQL服务器内的t-SQL进行所有计算,然后获取结果?

以上哪两种方案更适合服务器?我不想在服务器上造成很大的负载,因为数据库对于各种自动登录都很重要。

这应该是服务器负载方面的理想最佳实践。

+4

即使在同一台服务器上,有两个进程之间抛出所有的数据没有任何好处 – 2012-02-27 09:55:22

回答

4

将其作为查询的一部分。让数据库在这种情况下完成工作。如果你有正确的索引,这应该不成问题。如果你拿起整个桌子,那么你将耗尽内存。

3

1)我应该从数据库中获取整个表并在c#类中进行所有计算吗?或者2)我应该使用SQL服务器内的t-SQL执行所有计算,然后获取结果?

啊 - 这取决于。

与结果相比,故事有多大?如果你不得不拉动100万行计算10,那么这是不好的。如果你拉100行并将其全部显示出来,那么决定就不同了。

以上哪两种方案更适合服务器?

定义服务器。更多的数据库服务器友好,或更多的应用服

我不想在服务器上负载太多,因为数据库是巨大的各种自动登录。

定义休和“各种同时登录”。不是ethat hugh现在是1000gig +,sql server在处理10.000并行登录时没有问题,所以你的服务器可能很小,而且你很少有用户。

认真 - 这取决于。 SQL通常是一个坏层或复杂计算,因为它很难扩展和昂贵(授权),但如果另一种方法是将一百万行向下拖动以进行一些模拟计算 - 猜猜看,这是可行的。尽管如此,它需要更多的基础知识。

1

正如其他人已经提到,一切都取决于您的项目的具体情况。

还要记住,根据情况(例如,许多读取但非频繁的更改)可能需要预先计算报告并将结果存储在数据库中。例如,我想你的学生报告结果不会每天更改一次。在晚上(或其他知道不太忙的时间)运行批处理作业,计算所有报告并将它们存储在数据库中(甚至可能是专用的报告数据库)。这样获取报告便宜而且不会干扰在线交易。您甚至可以使报表计算更加智能,并且只有在结果实际发生变化时才会触发。

我也建议在C#而不是数据库中进行复杂的计算。它更便携,更强大,通常更容易测试。

0

由于您的调整要求目前很简单(只是每个测试可能一年/学生的总和)。您有以下选项。

解决方案#1

进行数据库UDF(testName,studentName,year);这个UDF里面你可以运行一个交换机或不同的if else语句,其由学生姓名,年或所有学生,各年返回 结果。

优点:

  • 所有结果逻辑emebed到UDF。对于演示级别的任何新表单/要求,您不必再次计算 结果&。 缺点:
  • 您必须监控SQL性能时,表规模的增长

  • 你不能做的UDF

解决方案#2

做一个实用工具里面很多复杂的计算在演示文稿层上总结所有结果&提供给您的演示文稿图层。 优惠价: 您可以在这里轻松地进行复杂的计算。 缺点: 可能是一个资源猪当结果集是巨大的

解决方案#3 做一个SQL触发器&一个单独的结果表像

MaxMarks MarksObtained StudentId Status Year 
------------------------------------------------- 
500  100   1   Failed 2011 
400  300   1   Passed 2010 

你必须代码这样的方式触发它在主表上每行成功插入后运行,这些结果将自行填充。您可以根据您的要求查询此表中的结果。

优点:

  • 没有太多的工作需要
  • 快速 缺点: 难以调试。 你必须绝对确保触发器正常工作&不弄乱任何记录后
相关问题