SQL Server CLR vs Python vs R.

时间:2018-01-07 16:05:39

标签: sql-server sql-server-2017

有人可以解释一下可以选择SQLCLR与Python vs R的各种场景。

我知道R是一种专门用于统计分析和数据挖掘的语言和库,因此我理解在适当的时候利用该功能,但是R(在SQL Server上)可以做更多并调用其他外部库,如CLR程序集可以吗?

Python是否意味着最终替代C#SQLCLR?在我看来,在我看来,Python可以简单地嵌入到存储过程中,然后在执行时进行解释而不是CLR程序集的编译性质,但是否则功能是相同的?是吗?

1 个答案:

答案 0 :(得分:1)

我会尝试回答你的问题:

SQLCLR是在SQL Server 2005中引入的,作为在SQL Server引擎中嵌入CLR(.NET)的一种方法。例如,使用SQLCLR,您的.NET代码在与SQL Server本身相同的内存和进程空间中运行。它的工作方式(简化)是您创建一个程序集并将其注册到SQL Server(CREATE ASSEMBLY)。然后你创建"包装"针对.NET方法的T-SQL存储过程/函数/触发器等,这些是在运行时执行的过程。

R在SQL Server 2016中引入,而SQL在SQL Server 2017中引入,以便为SQL Server提供机器学习功能。与.NET相反,R和Python都不会嵌入SQL Server中,但是当您在SQL Server中调用R / Python代码时,会调用位于SQL Server内存/进程空间之外的R / Python引擎。这是SQLCLR和R / Python之间的重要区别:

  • SQLCLR代码使用SQL Server执行内存/进程内
  • R / Python在SQL Server外部执行。

作为旁注;我有一系列blog-posts讨论SQL Server R服务的内部(即使帖子谈论R,其中的所有内容也适用于Python)。

至于能力; SQL Server中的R / Python不能再做什么了,不能少于#34; standalone" R / Python可以这样做:如上所述,R / Python的实际执行也发生在SQL Server之外。

我个人认为Python不是SQL Server中.NET的替代品,我将其视为工具箱中的附加工具。在我工作的地方,我们同时使用SQLCLR和R / Python(在SQL Server中)。我们的生产数据库中有100个SQLCLR程序集,做了奇怪而美妙的事情(向RabbitMQ等发送消息等),而恕我直言,用Python替换它很难,特别是看到您立即得到性能下降 - 编译代码(SQLCLR)与解释代码(R / Python)。

希望这有帮助。

Niels