有人可以解释一下可以选择SQLCLR与Python vs R的各种场景。
我知道R是一种专门用于统计分析和数据挖掘的语言和库,因此我理解在适当的时候利用该功能,但是R(在SQL Server上)可以做更多并调用其他外部库,如CLR程序集可以吗?
Python是否意味着最终替代C#SQLCLR?在我看来,在我看来,Python可以简单地嵌入到存储过程中,然后在执行时进行解释而不是CLR程序集的编译性质,但是否则功能是相同的?是吗?
答案 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之间的重要区别:
作为旁注;我有一系列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