sql - 存储过程 VS。 F#

标签 sql database stored-procedures f#

对于大多数接受 SP 培训的开发人员来说,在 Linq 和存储过程/函数之间没有选择。这可能是真的。

然而,现在有一个路口。在我花太多时间研究 F# 的语法之前,我想了解更多关于 F# 的力量(和相反)的信息。

F# 在这个主题上的表现如何(相对于 SP)?

F# 必须以某种方式与数据库通信。通过 Linq2Sql/Entity-app-layer 或直接通过 AnyDbConnection。那里没有什么新鲜事。但是 F# 具有并行性的强大功能,并且在他们的工作中开销更少 (Functional Programming with C#/F#)。 F# 还具有作为数据和机器层的效率。非常类似于 C# 作为人机之间层的力量。

  • 我真的会让数据库服务器处理重复节点的请求,还是只将纯数据提取到 F# 并在那里处理?作为从 C# 的对象方法调用封装得很好、很流畅?
  • 存储过程是否仍然是扫描 5000 万条记录以查找孤儿或匹配 0.5% 结果的标准的最佳选择?
  • SP 或函数是否仍然最适合查找下一个父节点这样的简单任务?
  • SP 是否仍然最好收集一百万条数据记录并返回计算的总和和/或周期?

完全基于单一职责原则构建的单个 f# dll 库是否比连接在 sql server 中的存储过程更有用?当然有利也有弊。但它们是什么?

最佳答案

存储过程并没有神奇的超快。通常,它们实际上相当慢。

许多人会对这个答案投反对票,提供轶事证据表明存储过程曾经使应用程序总体上更快。但是,我实际看到的所有这些示例的代码都表明,他们完全重新考虑了一些糟糕的 SQL 以将其打包为 SP。我认为将错误的 SQL 重新打包到过程中的原则比 SP 本身更有帮助。

如果没有衡量基准,您的大部分观点都无法评估。

我建议您执行以下操作。

  1. 用 F# 编写。

  2. 测量它。

  3. 如果它对于您的生产应用程序来说太慢,请尝试一些存储过程以查看它是否更快。如果它对于您的生产应用程序来说足够快,那么您就有了答案,F# 适合您。为您的应用程序。为了你的数据。为您的架构。

没有“一般”的答案。尽管我对某些特定类型查询的基准测试表明 SP 引擎与 Java 相比相当慢。 F# 也可能比 SP 引擎更快。

重要的是要确保数据库——如果它是“纯”数据——已经过优化,以便像“扫描 5000 万条记录以查找孤儿或匹配 0 的条件”这样的查询,结果的5%?”将尽快检索行。这通常涉及调整缓冲区和数组大小以及数据库到 F# 连接的其他元素。这通常意味着您需要更直接的连接,以便您可以调整尺寸。

关于sql - 存储过程 VS。 F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5065046/

相关文章:

mysql - 使用不同的值更新多行

php - JavaScript 无法获取用户的个人资料名称和 ID

sql-server - SQL服务器: inserting into a table within a transaction for logging error occurance?

python - SQLAlchemy 在提交前使用自动增量获取主键

mysql - MySQL中多个表的分组和求和

mysql - 根据条件检索值

java - 在测试数据库操作时将数据库重置为已知状态的最佳方法是什么?

mysql - 我可以从另一个数据库填充一个数据库吗

sql - 返回连接结果的 Postgresql 函数

sql - 请问有人能解释为什么在SQL Server 2005中删除和重新创建存储过程会导致最初的速度下降比预期的要多得多吗?