我使用SQL数据库进行存储,我的网站使用c#,两者都在同一台服务器上。
我已将学生结果插入DataBase中的表格,该表格包含TestType,MAxMarks和MarksObtained等字段。
现在我必须一次性显示完整的结果,所以我必须添加学生在这些测试中获得的所有测试类型和标记的最大标记,以显示最终结果。
我的问题是,
1)我应该从数据库中获取整个表并在c#类中进行所有计算吗? 要么 2)我应该在SQL服务器中使用t-SQL进行所有计算,然后获取结果?
以上两种情况中哪一种更适合服务器?我不希望在服务器上加载太多,因为数据库非常庞大,各种各样的simaltane登录。
就服务器负载而言,哪个应该是理想的最佳做法。
答案 0 :(得分:4)
将其作为查询的一部分。让数据库在这种情况下完成工作。如果你有正确索引的东西,它应该不是问题。如果您获取整个表,那么您将耗尽内存。
答案 1 :(得分:3)
1)我应该从数据库中获取整个表并在c#类中进行所有计算吗?或者2)我应该这样做 在SQL Server中使用t-SQL进行所有计算,然后获取结果?
啊 - 这取决于。
与结果相比,这个故事有多大?如果你必须拉出100万行来计算10,那么这并不好。如果你拉100行并且无论如何都要显示它们,那么决定是不同的。
以上两种情况中的哪一种更适合服务器?
定义服务器。更多数据库服务器友好,或更多的应用程序服务器友好?
我不希望服务器上有太多负载,因为数据库非常庞大,并且有各种各样的simaltane登录。
定义休和“各种同时登录”。这些天没有ethat hugh是1000g +并且sql服务器在处理10.000并行登录时没有问题,所以很可能你的服务器很小,并且你的用户很少。
严重 - 这取决于。 SQL通常是一个糟糕的层或COMPLEX计算,因为它很难扩展和昂贵(许可),但如果替代方案是将一百万行向下拉以进行一些simeple计算 - 猜猜是什么,这是可行的。但是,它比你提供的要多得多基础知识。
答案 2 :(得分:1)
正如其他人已经提到的,一切都取决于你的项目的具体情况。
还要记住,根据具体情况(例如,许多读取但非频繁更改),预先计算报告并将结果存储在数据库中是值得的。例如,我认为学生报告的结果不会比每天更改一次。在晚上(或您知道不太忙的其他时间)运行批处理作业,计算所有报告并将其存储在数据库中(甚至可能是专用的报告数据库)。这样获取报告非常便宜并且不会干扰在线交易。您甚至可以更智能地进行报告计算,并仅在结果实际发生变化时触发。
我还建议在C#而不是数据库中进行复杂的计算。它更便携,功能更强大,通常更容易测试。
答案 3 :(得分:0)
由于您的计算需求目前很简单(每次测试可能需要一年/学生)。您有以下选择。
解决方案#1
创建数据库
UDF(testName,studentName,year);
在此UDF中,您可以运行切换或返回的各种if else语句 学生姓名,年份或所有学生,所有年份的结果。
优点:
表大小增长时,您必须监控SQL性能
您无法在UDF中进行太多复杂的计算
解决方案#2
在表示层上创建一个实用程序类,它总结了所有结果&传递到您的演示层。 优点: 您可以在此轻松完成复杂的计算。 缺点: 当结果数据集很大时,可能是一种资源匮乏
解决方案#3 制作SQL触发器&一个单独的结果表,如
MaxMarks MarksObtained StudentId Status Year
-------------------------------------------------
500 100 1 Failed 2011
400 300 1 Passed 2010
您必须以在主表上每次成功插入行之后运行的方式对触发器进行编码,这些结果将自行填充。您可以根据您的要求查询此表中的结果。
优点: