python和sql_Python和SQL 2017的强大功能

Python和SQL Server 2017的强大功能

原文来自:https://www.red-gate.com/simple-talk/sql/sql-development/power-python-sql-server-2017/

Python是SQL Server 2017的新版本。它的主要目的是允许在SQL Server中使用基于Python的机器学习,但它可以使用的远不止这些,还可以使用任何Python库或框架。为了提供一个可能的示例,Hitendra展示了如何安全地使用该特性来提供智能应用程序缓存,其中SQL Server可以在数据更改触发缓存刷新时自动显示。

SQL Server 2017已经增加了它的高级分析扩展,现在被称为“机器学习服务”,它允许SQL Server通过Python的“机器学习服务”在TSQL中执行Python脚本。这基本上提供了一种方法,可以让数据库程序员可以将数据直接传递给Python。这不是有限的有效性提供机器学习数据分析的功能,因为Python有许多随时可用的模块和框架来解决许多问题,如执行大量计算与数据结构、图形处理进行分析,网络操作、数据库操作、网络操作或本地/基于网络文件系统操作。显然,其中很多都是在中间件中做得最好的,但是在数据库系统中,有很多时候,直接与外部系统进行直接通信是比较方便的,而不是依靠外部流程来通过轮询数据源来执行任务。当不需要在数据库或数据层中有这样的解决方案时,当它不提供任何安全问题时,这是有意义的。

在这里,我们将尝试演示在高级分析扩展中使用Python的一个示例,它展示了一个数据库如何触发一个外部流程,以执行作为参数提供的数据的活动。这是为了考虑安全性、数据可靠性和事务响应时间的问题。

用例为Python

通过从SQL调用Python脚本而不是依赖中间件,可以更容易地完成一些任务。特别是在数据库中由事件发起任务的情况下。任务可能包括

1、通过TCP /HTTP/ SOAP向基于网络的系统发送数据或接收数据。

2、利用本地平台资源,如文件系统、网络或GPU。

3、使用通用数据格式(如JSON、XML或YAML)构建一个或多个系统之间的实时集成。

4、通过与外部应用程序通信而使数据或文件变得更容易。

当然,也有一些潜在的不利因素

1、 如果您对Python的使用需要internet访问,那么有一个风险,即必须保证安全的数据可能会在internet上意外地共享。任何互联网接入都必须经过网络的严格监管。

2、 允许通过“启用外部脚本执行”在服务器上执行Python脚本,从而暴露安全风险。

3、 在同一服务器上的资源密集型Python脚本可以影响大型OLTP系统中正在进行的事务的性能。

权衡这些优点和缺点时,如果Python能够最大限度地降低风险,那么它仍然可以发挥有益的作用。作为一个例子,让我们考虑一下如何使用Python来构建应用程序层使用的数据缓存系统。

示例解决方案缓存

缓存数据可能是提高应用程序性能的一种有效方法。在缓存的存储开销上,我们可以在面对类似于数据库的chatty网络通信,以及在面对重复查询时数据库的高资源消耗时获得有用的性能收益。当我们构建缓存基础设施时,我们面临的常见问题是何时刷新缓存的内容。在一定的时间间隔后,我们倾向于采用简单的重建缓存的方法。然而,这是非常低效的。当数据发生变化时刷新缓存,并仅刷新已更改的内容,这是更好的做法。当数据被创建、更新或删除时,我们可以做到这一点。有许多工具和框架可以解决刷新问题,但是它们遇到了如何确定数据中发生了什么变化以及更改何时发生的问题。数据库最适合做这些工作。

对于我们的缓存系统,它可以在这里提供,我们将把自己限制在Microsoft堆栈上,以防止Python本身。

微软SQL服务器2017年(CPT)

用于隔离事务数据库的服务代理。

Python执行脚本,该脚本可以在HTTP上更新缓存(Python 3.5可执行从Anaconda分发版的库)

Net 4.5.2

我们的示例Web UI 的asp.netMVC

ASP.Net WebAPI封装了我们的示例解决方案的缓存存储。

下面是示例解决方案缓存系统的图形表示:

WebApplication提供了一个用户界面来读取和更新数据。

在我们的示例缓存存储解决方案中,使用ASP构建RESTful.Cache应用程序。Net WebAPI2,它的内容类型是JSON。http - get操作从本地缓存(静态集合)提供数据。

SQL Server 2017(CPT)是一个带有以下特征的数据库服务器

TransDB OLTP数据库,繁忙的处理事务。

Cacher代理数据库执行Python脚本执行,启用“启用外部脚本”选项启用脚本执行。指的是Microsoft.Doc:外部脚本支持服务器配置选项。

服务代理是一个可靠的SQL服务器消息传递框架,它可以帮助桥梁缓存代理和TransDB。通过缓存代理接收消息可以处理以更新缓存。

Python是SQL 2017(CPT)数据库系统的集成脚本语言。

解决方案的架构

在我们的解决方案中,我们将在RESTful中缓存实体的产品类型名称。缓存应用程序和WebApplication将有一个函数来创建新产品类型条目,并从restful. Cache中读取。

先决条件

顺便说一下,我们需要考虑一些先决条件和更多的信息。

1、CacheDB托管的SQL实例必须安装有Python的机器学习服务

2、要在CacheDB中执行带有TSQL的Python脚本,应该运行SQL服务MSSQLLaunchpad或SQL Server Launchpad。指的是Microsoft.Net:微软机器学习服务

3、启用SP_Configure的外部脚本执行,请参考Microsoft.Doc:外部脚本支持服务器配置选项

4、TransDB和Cacher托管环境应该有一个在其实例上创建的服务代理端点,如果它们在两个不同的SQL实例上独立托管,那么每个实例都应该有自己的端点。

5、TransDB和Cacher数据库应该启用代理。指的是微软。Technet:如何:在数据库中激活服务代理消息传递

6、

.NET Applications

WebApplication有两个主要的MVC操作;使用HTTP谓词POST更新TransDB中的新实体,以及用HTTP谓词返回从缓存返回产品类型列表的另一个操作。

RESTful.Cache有两种操作方法,一种是使用带有HTTP谓词POST的新添加的实体产品类型更新缓存,另一种是从本地缓存获取所有缓存的产品类型。

对于我们的示例解决方案,这两个应用程序都驻留在IIS下的单独应用程序池标识中,以保证应用程序安全。但是对于实际的系统实现,托管环境可以是一个局域网或internet环境中的一个单独的web服务器。

RESTful.Cache授权规则只有两个服务帐户来处理HTTP请求。

abc \ WebApp_SVC和abc \ CacherAgent_SVC。abc\ CacherAgent_SVC服务帐户允许SQL中的Python脚本通过HTTP到达应用程序以刷新缓存。

abc\ WebApp_SVC用户使用具有授权规则模式的web应用程序,以允许访问 RESTful.Cache应用程序。

SQL数据库和服务代理

OLTP数据库TransDB有一些对象,包括表、存储过程和服务代理对象。

对于我们的目的,过程UpdateProductType更新ProductType表与新记录和AcknowledgeProductTypeCache过程的激活过程是CacheIntegration队列,它接收来自目标确认处理消息时,即从Cacher数据库。它还处理异常,并在CacheIntegrationError表中记录这些异常。

更多关于服务经纪人的信息可以在Microsoft.DOC:SQL Server Service Broker找到。

对于我们的示例解决方案,TransDB是一个源数据库,它在创建一个新的ProductType记录时创建更新缓存消息,这是一个执行动作的消息,因为它有UpdateMessage消息类型,一个CacheIntegration合同,以发送带有CacheSource服务的消息以针对数据库。该服务有一个CacheQueue,它由服务代理组件使用,以执行可靠的消息传递。ToCacheTarget路由具有将消息传递到目标的信息。

为了消除增加事务处理时间的任何机会,以及避免事务数据库中其余数据的安全风险,我们将使用一个名为Cacher数据库的代理数据库在我们的示例解决方案中分离缓存更新过程。服务代理消息传递基础设施将有助于连接TransDB和Cacher数据库,基于事件的消息处理将使我们能够更新驻留在基于网络的系统上的缓存存储。当更新消息到达时,Cacher数据库扮演代理的角色,以执行缓存刷新。它通过执行Python脚本更新缓存。

隐藏自己的数据库有:

1、CacheLog和CacheIntegrationError表,跟踪缓存刷新时的记录,并记录缓存刷新过程中可能出现的任何错误。

2、PerformCacheUpdate过程通过服务代理接收来自TransDB的传入消息。如果消息的类型是UpdateMessage,那么它将执行另一个过程UpdateWebCache,它执行Python脚本执行。

a、UpdateWebCache过程的执行结果被保存在一个表变量中,然后在消息会话结束时插入到CacheLog表中。

b、当接收到的消息有错误或结束消息类型,并且在错误类型上,在CacheIntegrationError表中写入异常日志时,该过程也会结束对话。

3、UpdateWebCache程序从传入的XML消息中提取Id和名称作为参数,并在Python脚本文本中嵌入这些值。脚本执行结果集是UpddateCacheLog类型的结构化表。

Cacher的服务代理对象,主要是UpdateMessage消息类型和CacheIntegration合同与TransDB相同,CacheQueue有一个名为PerfomCacheUpdate的激活过程,该服务名为CacheTarget,而且该路由有关于TransDB服务CacheService和端点地址的信息。

对于我们的示例解决方案,将最大队列读取器设置为1,用于两个数据库队列。如果需要,这可以增加,例如,如果数据修改非常高,您需要增加缓存刷新速率。

服务代理端点

对于我们的解决方案,数据库在同一个实例上运行,因此它们都使用相同的服务代理端点来发送和接收消息。

但是,如果我们想要在单个实例上驻留数据库,那么每个SQL实例的服务帐户都应该有一个服务代理端点。而且两个SQL实例都应该允许发送消息到彼此的端点。可以使用以下一组TSQL命令来完成连接的授权和授予。注意,在消息传递基础结构中,有一个发送方和另一方是接收方,如前面提到的,如果SQL实例是发送方和接收方的一部分,那么每个实例都应该有自己的过程标识。下面的图片展示了每个SQL服务器如何根据自己的身份运行。

这是在Cacher数据库的SQL实例中授权和授予端点连接到TransDB的SQL实例服务帐户[identity]的SQL代码。

类似地,这里是授权和授予端点连接到在TransDB数据库的SQL实例中的Cacher的SQL实例服务帐户[identity]的代码。

Python脚本

这里是Python脚本文本,作为TSQL变量@ updatecache中的字符串保存。它有一个带有逻辑的UpdateCache方法,可以执行一个HTTP POST调用rest。通过传递一个具有名称和Id字段的数据对象来缓存,该数据对象作为输入参数接收。它接收一个JSON对象并将其作为输出结果返回给调用者。

在脚本的末尾,返回的对象被转换为一个数组,因此它可以被构造成一个SQL结果。

在使用SQL server中的Python脚本时,有一些事情值得注意。

1、我们可以编写一个连续的脚本,或者将它们分组到方法中,就像我们在这个解决方案中所做的那样。或者,我们可以创建一个内联类或创建一个包,并使用PIP命令在命令提示符的python中导入它们。

2、CPT的MS SQL版本,导入语句只能导入包范围内放置的地方,因此我们可以注意,导入请求导入语句存在内部方法UpdateCache,导入语句导入大熊猫存在在脚本的最后一行的脚本。

3、方法UpdateCache的输出对象立即被转换为数组,以这种方式表示熊猫。DataFrame可以将对象转换为数据结构,SQL server可以轻松地将其解释为带有行和列的表。

4、分配给OutputDataSet对象的数据结构由SQL server在TSQL执行上下文中提供。

5、最后一行程序dbo.使用结果集(作为dbo . updatecachelog)的UpdateWebCache;有一个用户定义的表类型dbo.UpdateCacheLog,它有助于保持底层列的顺序,避免在从接收的数据结构生成结果集的过程中出现任何不匹配。另一种方法是在Python内和结果集中构建一个映射的列结构。

数据库安全

TransDB是一个OLTP数据库,我们不希望任何对系统的攻击有任何安全漏洞,因此在我们的示例解决方案方法中,这样的数据库可以托管在没有安装“机器学习服务”的SQL实例上。Cacher是一个能够到达基于网络的系统的代理,因此可以停留在安装机器学习服务的SQL实例上。这两个SQL实例都可以有一个单独的服务帐户标识,它被授权仅为一个特定的端口连接到服务代理端点。另一种安全认证通信的方法是使用证书。对于服务代理端点授权,请参考Microsoft.Technet:如何:允许使用证书(transact - sql)提供服务代理网络访问。

所有组件放在一起

在将所有组件放置就绪后,下面是我们的web应用程序,它允许我们创建一个新的ProductType,并使用RESTful HTTP调用从刷新缓存中列出相同的产品类型。在墙的后面有管理数据和缓存的组件在前端应用程序是看不见的。

结论

电子商务、医疗保健等应用程序可以从良好的缓存实现中获益。通过扩展我们熟悉的技术的使用,我们可以得到一个易于维护的解决方案,而无需学习新的框架或特性。我们的示例解决方案满足了我们的需要。

当通过OLTP事务之一创建或修改数据时,系统会刷新基于网络的缓存系统来读取数据。它能够使用异步事件刷新缓存,接近实时。这不会影响原始事务的性能。

它可以通过HTTP在事务和缓存系统之间绘制一条安全界限,以便将数据保存在OLTP数据库中。

它启用了一个最小的监视功能;缓存日志和异常日志,可以进一步增强以构建管理控制台。

使用服务代理消息传递组件时,当异步消息处理发生时,解决方案可以灵活地触发或到达基于网络的系统。换句话说,数据库与SQL服务代理消息集成,基于接收到的数据,执行一个操作来获取或发送数据到外部的外部系统,这些外部系统位于数据层之外。

通过使用服务代理消息传递,隔离外部系统在专用数据库内触发事件,有助于确保OLTP数据库的事务和数据。

此项目的源代码在githib中可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xmlrpc与jsonrpc

RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而…

6的变换_电源学报 | 2020年第3期:quot;高性能双向直流变换技术及其应用quot;专辑征稿启事...

往期精选:【电源学报•热点论文】贝尔福-蒙贝利亚技术大学(UTBM)高非教授-多物理域质子交换膜燃料电池建模仿真及实验测试专辑主编:张云 研究员(天津大学)吴红飞 教授(南京航空航天大学)专辑刊期: 2020年第3期(2020年5月)专辑介绍双向直流变换…

0基础怎么学python10010基础怎么学python_0基础学python全套python教程

C语言要写1000行代码,Java只需要写100行,而Python可能只要20行,所以Python是一种相当高级的语言,如今是Python的世界,花时间学习Python编程语言将是你对未来最好的投资,这就是要学习python的理由。 如何学习…

.Net Core3 新特性整理

.net core 3实现了.net 标准2.1。 1、生成可执行文件 以前版本需要dotnet run运行项目,.net core 3支持直接生成目标平台的可执行文件。比如windows就是exe了,linux就x了。 2、生成依赖项的副本 以前版本在build时不会把NuGet的工具复制到目标目录&#…

flash大作业一分钟源文件_「百树云课堂」一写作业就像被雷劈,是什么“病”?...

一写作业就闹心,大部分都是因为在培养习惯的时候基础没打好。比如:对时间不敏感、对效率不敏感、专注力低下等等!今天咱就系统说下“习惯培养”的重点。1大部分娃写不完作业,最主要的一点就是对时间不敏感。写一个字,喝…

bzoj5147bzoj2121loj6701 字符串游戏

做不出来杂题,到处找题做 看到$loj$上新出了一道题,觉得很神仙不错, 还记得Censoring吗(一个AC自动机的题) 这个题求最优解,数据范围$150$ 题解 数据范围非常小,首先贪心肯定不行,考虑AC自动机上$dp$? 好吧其实是区间$dp$ 一个直接的想法是维护$f[l][r]0/1$表示是否可以清空$l…

7个相同小球4个不同盒子_【计算启蒙】4个游戏陪娃玩懂“数拆分”,加减法都不用愁!...

前几天我们整理了能锻炼孩子“数-量匹配”知识的家庭生活小游戏:7个家庭数-量匹配小游戏,让孩子摆脱“机械数数”!​mp.weixin.qq.com所以今天,助教就来分享一些借助实物的“数拆分”小游戏吧!已经学会数量对应&#x…

python怎么使用预训练的模型_Keras使用ImageNet上预训练的模型方式

我就废话不多说了,大家还是直接看代码吧! import keras import numpy as np from keras.applications import vgg16, inception_v3, resnet50, mobilenet #Load the VGG model vgg_model vgg16.VGG16(weightsimagenet) #Load the Inception_V3 model in…

NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」

一套题 养花 题解 分块\主席树 这里我用的是主席树 查询分段$1-(k-1)$找最大的,能向右找就向右找 for(ll nowl1,nowrk-1;nowl<maxx;nowlk,nowrk,nowrmin(nowr,maxx)){if(ansmod-1) break;chose(rt[r],rt[l-1],nowl,nowr,1,maxx);} 复杂度分析,调和级数$√n*log(n)$ 代码 #in…

宏任务和微任务执行顺序_确保任务的执行顺序

宏任务和微任务执行顺序有时有必要对线程池中的任务施加一定的顺序。 JavaSpecialists通讯的第206期提出了一种这样的情况&#xff1a;我们使用NIO从多个连接中读取数据。 我们需要确保来自给定连接的事件按顺序执行&#xff0c;但是不同连接之间的事件可以自由混合。 我想提出…

c语言中aver是什么意思_Linux系统top命令中的io使用率,到底是什么意思?

最近在做连续数据流的缓冲系统&#xff0c;C语言代码实现后&#xff0c;粗略测试了下&#xff0c;功能上应该没有问题。那么&#xff0c;接下来就该测试性能了。输入 top 命令&#xff0c;的确可以看到一系列 cpu 使用率&#xff0c;其中一个值得注意的子项就是 io 使用率了&am…

wireshark捕获选项不能用_wireshark的一些基础用法,欢迎收藏

About WiresharkWireshark是世界上最重要和使用最广泛的网络协议分析器。它让您在微观层次上看到网络上正在发生的事情&#xff0c;并且是许多商业和非营利性企业、政府机构和教育机构事实上(通常也是法律上)的标准。Wireshark的发展得益于全球网络专家的志愿贡献&#xff0c;并…

管理沟通-沟通框架

背景 管理三明治的承托&#xff0c;管理沟通。离开了沟通&#xff0c;所有的工作都将搁浅而无法前进。 常见话题&#xff1a; 向上沟通员工激励团队凝聚力提升向下沟通工作特点 工作职责说明技术开发计算机&#xff0c;编程语言&#xff0c;设计算法&#xff0c;开发功能&#…

t’触发器真值表和状态方程_清写出触发器按逻辑特性的分类;写出T触发器的状态方程。...

下列对配电所的说法有误的一项是()。A&#xff0e;市区10kV公用配电所的供电半径一般不大于300m&#xff0c;在郊区的供成功的基础设施服务的提供者都首先是按照商业化的原则经营的&#xff0c;并至少具有几个基本特点&#xff0c;这些基本特我国幅员辽阔&#xff0c;能源分布不…

NetBeans 9抢先体验

Java 9即将来临&#xff0c;NetBeans 9也即将来临。在本文中&#xff0c;我们将看到NetBeans 9 Early Access为开发人员提供的支持&#xff0c;以帮助他们构建Java 9兼容的应用程序。 Java 9提供了许多&#xff08;大约90种&#xff09; 新功能&#xff0c;包括Modules和JShel…

块裁剪后的矩形边界如何去掉_手持拍摄画面太抖?这节课教你如何快速稳定抖动的画面...

手持相机进行拍摄&#xff0c;画面会有较为明显的抖动&#xff0c;这节课就教大家如何稳定视频画面。素材导入到PR后&#xff0c;为素材添加变形稳定器效果&#xff0c;软件会自动开始分析。当前素材上方会显示在后台分析&#xff0c;这时候我们可以剪辑其他部分&#xff0c;并…

怎么把空字符串去掉_Python知识点字符串转整数需注意

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选 来源&#xff1a;简说Python 作者&#xff1a;老表One old watch, like brief python大家好&#xff0c;我是老表&#xff5e;Python知识点系列&#xff0c;学习了记得点赞、…

tree

随机走,看期望 由于zzn过于sb,考试推出来式子因为统计时间不对没有$AC$(应dfs前统计) zzn实在过于sb,式子和题解完全不一样,所以看题解的可以走了 记录tofa[x]表示当前点走到父亲期望步数 可以直接走到父亲 贡献$\frac{1}{deg[x]}$ 走到儿子再走到父亲$\frac{1}{deg[x]}*(1tofa…

android-x86 镜像iso下载_Windows 10(1909)最新12月更新版MSDN官方简体中文原版ISO镜像下载+激huo工ju...

微软已于11月中旬开始大规模推送Windows 10操作系统的最新版本1909。此次更新官方未放出具体更新日志&#xff0c;但没有太多大功能更新&#xff0c;主要还是“修修补补”为主。现在&#xff0c;为大家带来本次官方最新原版ISO镜像下载&#xff0c;具体内部版本号为18363&#…

32查运行内存的map文件_Spark Shuffle调优之调节map端内存缓冲与reduce端内存占比

本文首先介绍Spark中的两个配置参数: spark.shuffle.file.buffer map端内存缓冲 spark.shuffle.memoryFraction reduce端内存占比很多博客会说上面这两个参数是调节Spark shuffle性能的利器&#xff0c;实际上并不是这样的。以实际的生产经验来说&#xff0c;这两个参数没…