标签:启动 固定 提示 sql style 很多 添加 nbsp 避免
Python对SQL Server 2017是新的。它的目的主要是允许在SOL Server 的范围内使用python的学习机。但它的用途远不止于此,使用任何Python库或框架。为了提供一个可能的例子,Hitendra展示了如何安全使用的功能提供智能应用程序缓存,当数据改变触发储存刷新时,SOL Server 能够自动的指示出来。
MS SQL Server 2017已经添加到其高级分析扩展中,现在被称为“机器学习服务,通过启用SQL服务器执行Python脚本在TSQL通过机器学习Python的服务。这基本提供了一种方法:数据库程序员能够直接通过数据发送的python. 有用的是它不限于为数据分析提供机器学习的能力。因为Python有许多现成的模块和框架来解决许多问题,例如对数据结构执行繁重的计算工作,用于分析、网络操作、数据库操作、Web操作或本地/基于网络的文件系统操作的图形处理。显然的,这些中的很多在中间件做的最好。但是在数据库中,有时,与外部系统直接通信更为方便,而不是依靠外部进程通过轮询数据源来执行任务。如果在数据库或数据层中有这样的解决方案,并且当它不提供任何安全问题时,他就有意义了。
在这里,我们将展示一个在高级分析扩展中使用Python的示例,显示数据库如何触发外部进程,对作为参数提供的数据执行活动。这是为了考虑到安全性、数据可靠性和事务响应时间等问题。
python的使用案例
一些任务能够更容易的完成通过从SQL中调用python的脚本,而不是依赖中间件。任务开始与数据库中的一个事件,这个任务包括:
1·发送数据,或从网络系统,TCP / HTTP /肥皂中接收。
2·利用本地平台系统资源,例如文件系统,网页或GPU.
3,建立实时集成一个或多个系统之间采用通用数据格式,如XML或JSON、YAML。
4.通过与外部应用程序的通信产生的数据或文件。
当然,也有一些潜在的缺点。
1.如果你使用的python要求网络访问。这是一个风险,必须保持安全的数据可能会意外地在互联网上共享。任何互联网访问必须通过网络仔细调节。
2.允许通过“外部脚本执行”在服务器上执行Python脚本,从而暴露了安全风险。
3..resource-intensive Python脚本在同一台服务器上可以影响大的OLTP系统正在进行的交易的表现。
权衡这些优点和缺点,有时似乎Python可以发挥有益的作用,如果它可以把风险降到最低。作为一个例子,让我们考虑如何使用Python构建一个数据缓存系统,供应用程序层使用。
对于缓存的解决实例
据高速缓存可以提高应用程序的性能的一种有效方法。
性能.在对缓存的存储开销的成本,我们可以使有用的性能增益,面对与数据库健谈的网络通讯之类的东西,和高资源消耗的数据库的时候,面对重复查询。当我们构建缓存基础结构时,我们面临着刷新缓存内容的常见问题。我们倾向于采取一定的时间间隔后缓存重建简单的解决方案。然而,这是非常低效的。当数据更改时,刷新缓存更好,只刷新已更改的内容。我们可以接近实时的,在数据的创建、更新或删除。有很多工具和框架可以用来解决刷新的问题,但是它们遇到的问题是如何确定数据中的变化以及何时发生了更改。数据库是最适合所有能够做这。
对于我们这里可用的缓存系统,我们将把自己限制在微软堆栈中,以阻止Python本身。
微软SQL Server 2017(CPT)
经合经纪人隔离事务数据库。
python执行脚本可以更新缓存的HTTP(Python 3.5执行从长长的发行库)
·净4.5.2。
溶解。例如Web UI NET MVC
溶解。净webApI封装缓存存储我们的例解。
下面是示例解决方案缓存系统的图形表示:
Web应用程序提供了一个用户界面来读取和更新数据。
RESTFUL.在我们的例子中的高速缓存存储解决方案缓存应用建立在ASP。NET webapi2,其内容类型是JSON。HTTP-GET操作提供本地缓存的数据(静态采集)。
MS SQL Server 2017(CPT)是一个数据库服务器
跨数据库 OLTP数据库,忙着处理事务。
ocacher代理数据库执行Python脚本执行,执行脚本启用外部脚本启用”选项打开。请参阅微软:外部脚本启用服务器配置选项。
经合经纪人,一个可靠的SQL Server的通信框架,辅助桥藏剂和跨数据库。通过藏代理收到消息可以处理更新缓存。
Python是用SQL 2017数据库系统集成的脚本语言(CPT)。
解决方案的体系结构
在我们的解决方案中,我们将在一个RESTFUL.中储存实体产品类型的名称。缓存应用和VB应用程序将会对创建新的产品类型实体和从RESTful.缓存中读取有很大的作用。
先决条件
另有方面,我们也需要考虑一些先决条件和更多的条件。
1.SQL实例,catchDB托管必须有python安装的机器学习服务器。
2.在CacheDB中用TSQL执行Python脚本,SQL服务mssqllaunchpad或SQL Server启动应该跑。参考微软.NET:微软机器学习服务。
3.使sp_configure外部脚本的执行,是指微软,医生:外部脚本启用服务器配置选项
sp_configure外部脚本启用,1;
配置;
4.transDB和缓存托管都应该有一个server Broker端点创建的实例。如果这些托管独立在两个不同的SQL实例中,然后每一个实例都应该有它自己的端点。
5.TransDB 和缓存数据库都应该有经纪人启用.涉及到:
修改数据库transdb集enable_broker;
更改数据库设置enable_broker cachedb;
网络应用
Web应用程序主要有两个MVC的行动;一个更新HTTP动词后TransDB一个新的实体与另一个行动来回报从HTTP动词缓存产品类型列表中得到。
RESTFUL缓存有两个行动方案。一个是用HTTP verb POST最新添加的实体产品类型。另外一个是从本地的缓存中得到所有的缓存产品类型。
对于我们的解决案列,在IIS中的所有运用托管在个体运用本身下保证运用的安全,但是对于执行实际的系统,托管的环境是在一个个体webserver中,托管环境可以是一个单独的服务器在一个局域网或互联网环境中。
缓存授权规则只有两个服务帐户来处理HTTP请求,即
ABC webapp_svc 和ABC cacheragent_svc。ABC \ cacheragent_svc服务帐户允许在SQL的Python脚本,达到使用HTTP刷新缓存。
ABC \ webapp_svc用户是Web应用程序拥有授权规则模式允许访问缓存应用的RESTful.
SQL数据库和服务代理
OLTP数据库transdb有xu‘duo‘n个对象,包括表、存储过程和服务代理对象。
为了我们的目的,程序updateproducttype用一条新的记录来更新产品类型表。acknowledgeproducttypecache程序更新cacheintegration队列激活。它接收来自目标的确认消息时正在处理即从藏库。它也处理其他的例外,并记录这些在cacheintegrationerror中的表。
在服务代理的很多信息中,都能在microsoft.doc:SQL Server服务代理中发现。
对于我们的解决事案列,当一个新的产品类型被创建时,数据库的来源TransDB能够更新缓存信息。一条信息执行一个方案,它有UpdateMessage信息类型,一个CacheIntegration合同,用于向数据库发送一个带有CacheSource服务的消息。服务有一个CacheQueue,服务代理组件使用它来执行可靠的消息传递。ToCacheTarget路由有信息将消息传递给目标
为了消除增加事务处理时间的机会,以及避免事务数据库中其余数据的任何安全风险,我们将使用代理数据库将缓存更新过程解耦,在我们的例解藏数据库。Service Broker消息基础设施将有助于连接transdb和藏数据库,基于消息处理的事件将使我们能够更新缓存存储驻留在网络系统。公章数据库执行缓存刷新更新消息到达时播放以代理人的角色。它通过执行Python脚本来更新缓存。
缓存数据库具有:
1·cachelog and to keep track of cacheintegrationerror表格。为了跟踪缓存已经刷新和记录任何在缓存刷新过程吃可能出现的错误。
2·PerformCacheUpdate 程序通过服务代理transdb接受进来的信息,如果消息的类型是updatemessage,然后它就会执行其他的程序,UpdateWebCache, Python脚本执行。
1·updatewebcache程序的执行结果,成功地在一个冰table变量,然后插在我们的cachelog table of the conversation消息的结尾。
2·程序结束谈话当接受到错误消息或错误消息类型时,在错误的类型中,除了被写在cacheintegrationerror 表中的。
3·updatewebcache程序从输入的XML消息传递的参数提取的ID和名称并将这些值在Python脚本文本。脚本执行的结果集是一个类upddatecachelog结构表。
公章的服务代理对象,主要更新消息类型和缓存融合合同与跨数据库相同,缓存队列有活化过程称为执行缓存更新,一种名为缓存的目标,和路由跨数据库服务缓存服务和端点地址信息。
对于我们的示例解决方案,最大队列读取器是数据库队列设置为1。如果需要,这可以增加,例如,如果数据修改很高,需要增加缓存刷新率。
服务代理端点
对于我们的解决方案,数据库托管在同一个实例上,因此它们都使用同一个服务代理端点来发送和接收消息。
但是,如果我们想在单个实例上托管数据库,那么每个SQL实例的服务帐户应该有一个服务代理端点。这两个SQL实例都应该具有允许将消息发送到对方端点的权限。授权和批准的连接可以做以下TSQL命令。注意,在消息传递基础结构中,有一个发送方和另一个接收方,正如前面提到的,如果SQL实例是发送方和接收方的一部分,那么每个实例都应该有自己的进程标识。下面的图片展示了每个SQL Server在其标识下运行的方式。
这是授权和授权的端点连接到跨数据库的SQL实例的服务帐户[认同]在藏数据库SQL实例的SQL代码。
改变授权的终点:服务代理终结点到[ ABC跨数据库_SVC ]
授予连接端点:服务代理终结点到[ ABC 跨数据库_SVC ]
同样,这是批准和授予的端点连接到缓存器的SQL实例的服务帐户[认同]在跨数据库SQL实例代码。
改变授权的终点:服务代理终结点到[ ABC 缓存器代理_SVC ]
授予连接端点:服务代理终结点到[ ABC 缓存器代理_SVC ]
Python脚本
这里是Python脚本文本,保存在TSQL变@更新缓存一个字符串。它具有更新缓存方法和逻辑,通过传递带有名称和ID字段的数据对象执行HTTP POST调用,这些数据对象被作为输入参数接收。它接收一个JSON对象,并将它作为方法的输出结果返回给调用者。
在脚本的结尾,返回的对象被转换成一个数组,因此它可以被构造成一个SQL结果。
声明@更新缓存 NVARCHAR(MAX) = N‘
进口大熊猫作为PND #数据结构包
更新缓存(名称,ID):
进口请求HTTP # HTTP请求包
#执行HTTP缓存的更新
HTTP请求,HTTP。后(http:/ /本地/ restful.cache/producttype/updatecache,{姓名:姓名、身份证:身份证})
缓存的日志= httpRequest.json()
返回缓存的日志
#更新缓存和生成日志元
日志= [更新缓存(”+“姓名+“,”+投(@ ID为VARCHAR(10))+)]
#返回数据帧即表结构的SQL
输出集= PND。DataFrame(数据记录)
在SQL Server中使用Python脚本时,有几件事是值得注意的。
1、我们可以像我们在这个解决方案中所做的那样,编写一个连续脚本或将它们分组到方法中。或者,我们可以创建一个内联类,或者创建一个包,并在命令提示符下用一个PIP命令在Python中导入它们。
2。在这个CPT版MS SQL,输入语句可以导入包只能在地方范围内的放,因此我们可以看到,进口要求输入语句内部存在着方法更新缓存,输入语句导入熊猫存在在上面的脚本,在脚本最后一行。
3。方法更新缓存输出对象立即转化为一个数组,这样pandas.dataframe可以转换一个对象为一个数据结构,SQL Server可以很容易地解释为行和列的表。
4。数据结构分配到输出集对象是由SQL Server TSQL执行上下文提供。
5。程序DBO的最后一行。更新网页缓存,结果集(为dbo。更新缓存日志);有一个用户定义的表式dbo。更新缓存日志有助于保持底层柱为避免发电机组从接收到的数据结构的结果,过程中的任何不匹配。另一种方法是在Python中和结果集中构建一个映射的列结构。
数据库的安全性
跨数据库OLTP数据库,我们不需要任何安全漏洞,任何对系统的攻击,因此我们的例子的解决方法,这样的数据库可以托管在一个SQL实例的机器学习服务未安装。缓存器是一个代理,是能够达成一个网络系统,因此可以在SQL实例让机器学习服务安装。这两个SQL实例都可以有一个单独的服务帐户标识,它已被授权仅为特定端口连接到服务代理端点。另一种安全认证通信的方法是使用证书。在服务代理端点授权是指微软TechNet:如何:允许使用证书服务代理网络接入(Transact-SQL)详情。
所有组件组装在一起
在把所有的组件的地方,这里是我们的Web应用程序,允许我们用一个RESTful HTTP调用创建一个新的产品类型和刷新缓存相同的产品类型列表。这墙的后面有是管理数据和缓存是前端应用程序不可见组件。
结论
应用如电子商务,医疗电子可以从一个良好的缓存实现效益。通过扩展我们熟悉的技术的使用,我们可以获得一个易于维护的解决方案,而不需要学习新的框架或特性。
我们的示例解决方案满足了我们的需要,因为数据时创建或由一个OLTP事务修改,系统刷新读取网络缓存系统。
可采用异步事件刷新缓存,近实时。这不会影响原始事务的性能。
得出安全线的事务处理和缓存系统之间通过HTTP以保持固定在OLTP数据库中的数据。
是最小的监控功能;高速缓存的日志和异常日志,可以进一步提高建立一个管理控制台。
与服务代理消息组件,解决的办法是足够灵活的触发或达到网络系统在异步消息处理事情。换句话说,数据库与SQL服务代理消息传递集成,并基于接收到的数据,执行一个动作来获取或发送数据层以外的外部系统的数据。
隔离,外部系统触发事件在专门的数据库,使用服务代理消息有助于交易安全和OLTP数据库中的数据。
这个项目的源代码是可用的。https://github.com/hi10p/sql17python
*原文引用:Hitendra Patel 04 August 2017
标签:启动 固定 提示 sql style 很多 添加 nbsp 避免
原文地址:http://www.cnblogs.com/nicestlala/p/7664216.html