第六周翻译

Python和SQL Server 2017的力量

Python是新的SQL Server 2017。 它主要的目的是允许使用面向机器学习在SQL Server中,但它可以用于远远超过这一点,与任何Python库或框架。 提供一个例子,什么是可能的,Hitendra展示了如何使用该功能安全提供智能应用程序缓存,在SQL Server可以自动显示数据更改时触发一个缓存刷新。

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

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

用例为Python

一些任务可以做更容易通过调用一个Python脚本从SQL而不是依靠中间件。 这是特别的情况中的任务是由一个事件数据库。 任务可能包括

  1. 发送数据,或接收从基于网络的系统TCP / HTTP / SOAP。
  2. 利用当地的平台资源,比如文件系统、网络或GPU。
  3. 构建实时集成在一个或多个系统之间通过使用一个通用的数据格式如JSON、XML或YAML。
  4. 与外部应用程序生成的数据或文件的沟通。

自然,也有一些潜在的缺点

  1. 如果您使用Python需要上网,有可能数据必须保持安全可能是不小心在互联网上共享。 任何互联网接入必须仔细的监管网络。
  2. 安全风险暴露通过允许执行Python脚本在服务器上通过“外部脚本执行启用”。
  3. 资源密集型的Python脚本在同一台服务器上可以影响交易正在进行的大型OLTP系统的性能。

权衡这些优点和缺点,似乎仍有次当Python可以发挥有益的作用,如果它可以最小化风险。 作为一个例子,让我们考虑如何使用Python来构建一个应用程序使用的数据缓存系统层。

示例解决方案缓存

缓存的数据可以提高应用程序性能的有效途径。 缓存的存储开销成本,我们可以使有用的性能收益当面对诸如健谈与数据库、网络通信和高资源消耗由数据库当面对重复查询。 当我们建立一个缓存基础设施时,我们面临的共同问题何时刷新缓存的内容。 我们倾向于采用简单的解决方案在一定时间间隔后重建缓存。 然而,这是非常低效的。 最好是刷新缓存数据更改时,和只刷新是什么发生了改变。 我们可以接近实时数据时在创建、更新或删除。 有许多可用的工具和框架来解决刷新的问题,但是他们遭受的问题如何确定中发生更改的数据和修改之后提交。 数据库是最有能够做到这一点。

对于我们的缓存系统,可用的来源吗,我们将限制微软堆栈的一切除了Python本身。

  • Microsoft SQL Server 2017(CPT)
    • 服务代理来隔离事务数据库。
    • Python执行脚本,可以更新缓存通过HTTP(Python 3.5可执行库从蟒蛇分布)
  • 。 4.5.2净
    • ASP。 净MVC示例Web UI
    • ASP。 净WebAPI封装缓存存储我们的示例解决方案。

这是我们的示例解决方案缓存系统的图示:

  • WebApplication提供了一个用户界面来读取和更新数据。
  • RESTful.Cache在我们的示例应用程序缓存存储解决方案是用ASP。 净WebAPI2,其内容类型JSON。 http - get操作提供本地缓存的数据(一个静态的集合)
  • MS SQL Server 2017(CPT)是一个数据库服务器和一个
    • TransDBOLTP数据库,忙着处理事务。
    • 隐藏自己代理执行Python脚本执行数据库,使用外部脚本启用的选项启用脚本执行。 指的是微软。 道格:外部脚本启用服务器配置选项
    • 服务代理SQL server的可靠的消息传递框架,艾滋病的桥梁隐藏自己代理和TransDB。 接收到的消息的隐藏自己代理可以处理更新缓存。
  • Python是集成脚本语言和SQL 2017数据库系统(CPT)。

解决方案的架构

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

先决条件

另外,有一些先决条件和一些我们需要考虑的更多信息。

  1. SQL实例,CacheDB承载一定的马中国与Python的学习服务安装
  2. 执行一个Python脚本CacheDB TSQL,SQL服务MSSQLLaunchpad应该运行或SQL Server发射台。 指微软。 净:微软机器学习服务
  3. 使外部脚本执行SP_Configure,请参考微软。 道格:外部脚本启用服务器配置选项
  4. TransDB隐藏自己托管环境应该有一个服务代理端点上创建它的实例,如果这些是独立托管在两个不同的SQL实例然后每个实例都应该有自己的端点。
  5. TransDB隐藏自己数据库应该启用代理。 指微软。 技术:如何激活服务代理消息传递在数据库中

。 网络应用

WebApplication有两个主要的MVC行动; 一个更新一个新的实体TransDBHTTP动词POST和另一个操作返回的列表产品类型从缓存HTTP动词。

RESTful.Cache有两个操作方法,一个更新和新增实体缓存吗产品类型与HTTP动词后,另一个让所有的缓存产品类型从本地缓存中。

对于我们的示例解决方案,两个应用程序驻留在IIS在单个应用程序池标识保持应用程序了。 但对于实际系统的实现,可以个人网络服务器托管环境在内部网或互联网环境。

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

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

abc \ WebApp_SVC用户的WebApplication有授权规则允许的访问方式RESTful.Cache应用程序。

SQL数据库和服务代理

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

就我们的目的而言,手术UpdateProductType更新ProductType表与新记录AcknowledgeProductTypeCache过程的激活过程CacheIntegration队列,它接收来自目标确认处理消息时,即从隐藏自己数据库。 它还处理异常,以及这些在日志CacheIntegrationError表。

在服务代理可以找到更多的信息微软。 道格:SQL Server服务代理

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

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

 

隐藏自己的数据库有:

  1. CacheLog和CacheIntegration错误表,跟踪当缓存刷新和记录在缓存刷新过程中可能发生的任何错误。
  2. PerformCacheUpdate程序接收传入的消息TransDB通过服务代理。 如果消息的类型UpdateMessage然后它执行另一个程序,UpdateWebCache,执行Python脚本的执行。
    1. UpdateWebCache程序的执行结果保存在一个变量,然后插入到表CacheLog表的最后消息对话。
    2. 这个过程也结束了谈话当收到的消息的错误结束消息类型,错误类型,异常日志写在CacheIntegrationError表。
  3. UpdateWebCache过程中提取Id的名字从传入的XML消息作为参数传递和Python脚本中嵌入这些值文本。 脚本执行的结果集是一个结构化的表的类型UpddateCacheLog

 

隐藏自己的主要是服务代理对象UpdateMessage消息类型和CacheIntegration合同是相同的TransDB,CacheQueue有一个激活过程叫什么PerfomCacheUpdate,一个服务CacheTarget,路由信息TransDB的服务CacheService和端点地址。

对于我们的示例解决方案,最大队列读者对队列的数据库设置为1。 这可以增加如果需要,例如,如果数据修改是高,你需要增加缓存刷新频率。

服务代理端点

我们的解决方案,数据库驻留在相同的实例,所以都是使用相同的服务代理端点来发送和接收消息。

但是如果我们想在个人主机数据库实例然后每个SQL实例的服务帐户应该有一个服务代理端点。 和SQL实例应该许可允许将消息发送给对方的端点。 连接的授权和批准可以用以下组TSQL命令。 注意,在消息传递基础结构另一边有一个发送方和接收方,如前所述,如果SQL实例发送方和接收方的一部分,那么每个实例都应该有自己的进程标识。 下图表示的每个SQL服务器运行在自己的身份。

这是授权和批准端点连接到SQL代码TransDB的服务帐户(身份)在SQL SQL实例的实例隐藏自己数据库。

 

 

同样,这是授权和批准端点连接的代码隐藏自己的服务帐户(身份)在SQL SQL实例的实例TransDB数据库。

 

 

Python脚本

这是Python脚本文本,@UpdateCache TSQL保存为字符串变量。 它有UpdateCache方法与逻辑执行HTTP POST调用RESTful.Cache通过一个数据对象的名字Id领域,收到作为输入参数。 接收JSON对象并将其作为输出结果的方法返回给调用者。

在脚本结束时,返回的对象转换成一个数组,所以它可以作为一个SQL结构化的结果。

 

 

有几件事值得注意的是,使用SQL server的Python脚本。

  1. 我们可以编写一个脚本或连续成方法我们做了在这个解决方案中。 另外,我们可以创建内联类或创建一个包和进口在python PIP命令在命令提示符。
  2. CPT的MS SQL版本,导入语句只能导入包范围内放置的地方,因此我们可以注意,导入请求导入语句存在内部的方法UpdateCache熊猫,导入语句导入存在的脚本脚本的最后一行。
  3. 输出对象的方法UpdateCache立即转换为一个数组,熊猫。 DataFrame能够将对象转换为一个SQL server数据结构可以很容易地理解作为一个表行和列。
  4. 分配下来的数据结构OutputDataSet在TSQL执行上下文对象可用SQL服务器。
  5. 程序的最后一行dboUpdateWebCache,结果集(dbo.UpdateCacheLog类型); 有一个用户定义的表类型dbo.UpdateCacheLog这有助于保持底层列秩序和避免任何不匹配过程中生成的结果集接收的数据结构。 另一种方法是建立一个映射列结构中的Python和结果集。

数据库安全

TransDB是一个OLTP数据库,我们不希望任何安全漏洞的攻击系统,因此我们的示例解决方案的方法,这样可以托管在一个SQL数据库实例的机器学习服务”是没有安装。隐藏自己是一个代理,能够达到一个基于网络的系统,所以可以在SQL实例安装机器学习服务。 SQL实例可以有个人服务帐户的身份,已授权服务代理端点连接仅供特定端口。 另一种安全通信是通过使用证书进行认证。 授权服务代理端点引用微软。 技术:如何:允许服务代理网络访问使用证书(transact - sql)为更多的细节。

所有组件放在一起

后把所有的组件,这是我们的WebApplication让我们创建一个新的ProductType和列表相同的产品类型与RESTful HTTP调用刷新缓存。 后面墙上有组件的管理数据和缓存是无形的前端应用程序。

结论

应用,如电子商务、医疗电子政务可以受益于一个好的缓存实现。 通过扩展的使用技术,我们都很熟悉,我们可以得到一个解决方案,是易于维护的成本没有学习一个新的框架或特性。

满足我们需要的,因为我们的示例解决方案

  • 当数据被创建或修改一个OLTP事务,系统刷新网络缓存系统进行读访问。
  • 它可以使用异步事件刷新缓存,接近实时的。 这不会影响原来的事务的性能。
  • 它可以画一个安全事务之间的界限,通过HTTP缓存系统,保证数据安全的OLTP数据库。
  • 它与最小启用监测功能; 缓存日志和异常日志,可以增强进一步建立一个管理控制台。
  • 与服务代理消息传递组件,解决方案是足够灵活来触发或到达网络系统异步消息处理时发生。 换句话说,与SQL数据库集成服务代理信息和基于接收的数据,执行一个动作来获取或发送数据到外部系统数据层之外。
  • 隔离,外部系统触发事件内部专用的数据库使用消息传递服务代理,有助于安全事务和OLTP数据库的数据。

这个项目的源代码在githib可用。https://github.com/hi10p/SQL17Python

相关文章

也在发展

为什么我的数据库应用程序那么慢?

当你的应用程序运行缓慢,反射动作是指责数据库查询。 确实,一些更奢侈的延迟可以相当归咎于缺少索引或不必要的锁定,但还有其他潜在的恶棍的戏剧,包括网络和应用程序本身。 丹·特纳指出,你可以节省很多的时间和金钱之前确定问题在哪里锻炼深入细节。…阅读更多
posted @ 2017-12-25 22:50  黄百万  阅读(174)  评论(0编辑  收藏  举报