c# - 存储过程或通过 IQueryable 计算?

标签 c# database design-patterns architecture

这是一个基于选择性能而不是设计实践的问题。如果我有一个方法,一秒钟会执行很多次;

public static IQueryable<IPerson> InRadius(this IQueryable<IPerson> query, Coordinate center, double radius)
{
    return (from u in query
            where CallHeavyMathFormula(u, center, radius)
            select u);
}

IQueryable 的这个扩展方法生成一个 SQL,执行一些繁重的数学计算(余弦、正弦等)。这意味着应用程序每次调用向服务器发送 1-2KB 的 sql。

我听说过将所有应用程序逻辑放在您的应用程序中。我还想在将来更改为 azure 之类的数据库或其中一个可扩展数据库。我该如何处理这样的事情?我应该保持原样还是编写存储过程? Twitter 或 Facebook 等应用程序如何做到这一点?

最佳答案

存储过程语言倾向于将您与特定的供应商或产品紧密联系在一起。如果您预计将来会迁移,请考虑必须重写的可能性。

话虽如此,我认为这样的决定取决于其他因素,例如是否需要将大量数据从数据库移出并移入内存。多少数据;多少内存;来回传输多少字节?这些是您必须发送的内容。

每次数据库调用 1-2KB 对我来说并不多。

我不会考虑计算正弦和余弦繁重的数学运算。动态 FFT 或线性代数解决方案更具挑战性。任何我称之为沉重的东西都不会每秒执行几次。

在我看来,将此计算保留在应用程序端是安全的。

关于c# - 存储过程或通过 IQueryable 计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572224/

相关文章:

c# - 如何使用抛出 InvalidOperationException 的计时器更改标签内容

c# - 不使用 BindingFlag.Default 从 GetType().GetFields 获取字段

c# - CaSTLe温莎代码设计问题

php - 设置正确的 MYSQL 表选项

php - "disable"一些MySql记录所以搜索时不返回?

sql-server - sql server : one file for all the application or is it better to make it multiple db files?

c# - 如何使用 asp.net core/react 发布数据

java - Jquery 数据表的 java 包装器的设计模式

java - 如何改进 builder 模式?

c++ - 事件调度器的设计