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