什么是最好的计算平台SQL或c#

本文关键字:平台 SQL 计算 什么 | 更新日期: 2023-09-27 18:25:58

我使用SQL数据库进行存储,我的网站位于c#中,两者都在同一台服务器上。

我已经在数据库的一个表中插入了Students Result,其中有TestType、MAxMarks和MarksObtained等字段。

现在我必须一次显示完整的结果,所以我必须添加所有测试类型的最大分数和学生在这些测试中获得的分数来显示最终结果。

我的问题是,

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

以上两种场景中哪一种对服务器更友好?我不想在服务器上加载太多负载,因为数据库是巨大的,有各种各样的模拟登录。

就服务器负载而言,哪一种应该是理想的最佳实践。?

什么是最好的计算平台SQL或c#

将其作为查询的一部分。在这种情况下,让数据库来完成工作。如果你有正确的索引,这应该不是问题。如果你把整张桌子都拿走,那么你的内存就会用完。

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

啊——那就完了。

与结果相比,这个故事有多大?如果你必须拉动100万行来计算10,那么这是不好的。如果你拉100行,然后全部显示出来,那么决定就不一样了。

以上两种场景中哪一种对服务器更友好?

定义服务器。数据库服务器更友好,还是应用程序服务器更友好?

我不想在服务器上加载太多负载,因为数据库是巨大的,有各种各样的模拟登录。

定义hugh和"各种同时登录"。不是说hugh现在是1000GB以上,sql服务器在处理10000个并行登录时没有问题,所以你的服务器很可能很小,而且你的用户很少。

说真的,这取决于情况。SQL通常是一个糟糕的层或复杂的计算,因为它很难扩展且成本高昂(许可),但如果替代方案是减少一百万行来进行一些模拟计算,那么你猜怎么着,这是可行的。不过,它需要比你提供的更多的基础知识。

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

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

我还建议用C#代替数据库进行复杂的计算。它更便携、更强大,而且通常更容易测试。

因为你的计算要求目前很简单(每次测试可能只需要一年/学生的总和)。您有以下选项。

解决方案#1

创建一个数据库UDF(testName,studentName,year);在这个UDF中,您可以运行一个switch或各种返回按学生姓名、年份或所有学生、所有年份列出的结果。

优点:

  • 所有结果逻辑都被拼成UDF。你不必计算结果再次&同样适用于演示级别的任何新表单/要求。缺点:
  • 当表大小增加时,必须监视SQL性能

  • 您不能在UDF 中进行太复杂的计算

解决方案#2

在表示层上创建一个实用程序类,用于汇总所有结果&提供给您的演示层。优点:在这里你可以很容易地进行复杂的计算。缺点:当结果数据集是巨大的时,可能会占用资源

解决方案#3制作SQL触发器&类似的单独结果表

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

您必须以这样的方式对触发器进行编码,即它在主表上每次成功插入行后都会运行,这些结果将自行填充。您可以根据自己的需求从该表中查询结果。

优点:

  • 不需要太多工作
  • Fast缺点:很难调试。你必须绝对确保触发器工作正常&以后不会弄乱任何记录