清除过滤器
文章
Qiao Peng · 五月 15, 2022
在软件开发和业务集成中,规则无处不在:会员折扣的计算规则、根据消息类型和内容将其路由到不同目标系统的路由规则。还有一个规则发挥重要作用的地方- 辅助决策规则,例如临床知识库和医疗质量指标规则。
规则经常需要随业务调整和知识积累进行调整,而规则的调整是业务和行业专家定的。如果规则是以代码硬编码的,这些调整需要程序员改动,一来不直观、需要业务专家与程序员大量的沟通成本,二来硬编码改动会对应用伤筋动骨,甚至带来风险,三来没法控制新规则生效的时间 – 总不能让程序员在新规则生效的那一刻去编译和部署吧。
InterSystems规则引擎可以帮助我们解决这些问题,于构建、执行和记录消息路由规则和普通的业务规则,带给应用和集成方案充分的灵活性和可用性。甚至业务专家和临床信息学家都可以通过低代码的、图形化的规则编辑器修改规则和指定规则生效和失效时间。
InterSystems规则引擎是InterSystems IRIS数据平台和Health Connect与Ensemble集成平台的组件。创建的规则可以被单独调用,也可以被业务流程调用。
本篇介绍规则的如何使用InterSystems规则编辑器创建规则和规则引擎执行规则的逻辑。
1. 规则基本概念
在设计规则前,先了解一下规则的基本概念。
1.1 上下文
上下文是用于规则定义的数据模型。用于临床决策支持的上下文通常需要患者信息、诊断、体征与观察、过敏、医嘱等信息来制定规则。例如糖化血红蛋白(观察)超过10%,要提示紧急警告。因为上下文提供了建立规则判据的主要*数据,所以它非常关键。
医疗行业的数据格式非常复杂,有HL7 V2这种分隔符分隔的字符串、有HL7 CDA这样的XML字符串/字符流、有新的基于JSON的FHIR、还有SQL二维表的记录。这些数据格式都可能会被用做建立规则的上下文模型。
*注:除了上下文中的数据,还可以使用规则临时变量的数据作为判据。
1.2 规则类型
规则可以用于很多场景,InterSystems规则引擎支持多种规则类型,包括:
用于消息路由的规则
根据上下文(请求消息)信息类型和内容,决定消息路由的目标
InterSystems提供多种开箱即用的消息路由规则类,分别对应HL7 V2消息、行业虚拟文档消息(DICOM、X12等)、XML虚拟文档消息和普通对象消息
普通的业务判断规则
根据上下文内容,决定返回结果
上下文可以是普通对象、HL7消息、医疗行业虚拟文档、XML文档、JSON等
管理警告规则
根据系统警告信息路由警告给不同的用户
我们会介绍路由规则和普通业务规则。
无论创建哪种规则,InterSystems技术平台都以类定义保存规则逻辑,也就是创建规则类,从而方便的导入/导出。
1.3 规则辅助类
规则辅助类约束规则定义并决定规则可以使用哪些操作,例如路由规则可以使用“发送”操作,而普通业务规则可以使用“返回”操作。
系统提供的每个规则类型都有对应的规则辅助类,例如虚拟文档路由规则的规则辅助类是:EnsLib.MsgRouter.VDocRuleAssist。
在选定创建的规则类型后,规则编辑器会自动选择对应的规则辅助类,除非特殊场景,无需自己选择。通常规则辅助类不需要修改,我们将会在高级规则特性介绍文章中介绍用户自定义辅助规则类。
1.4 规则集、规则、条件、行为
规则定义由四层构成:
规则集:一个规则定义中可以定义一到多个规则集,同时只有一个规则集生效。当有多个规则集时,通常它们代表不同的版本,通过规则集不同的生效起止日期进行分别。这样,可以事先生成好新的规则集、并定义好生效时间,规则引擎会在生效时间开始后自动启用新的规则集。
规则:一个规则集中,可以有一到多个规则,这些规则同时生效。例如在HL7 V2路由规则定义中,每个规则可以处理不同类型的V2消息。规则按其在规则集中的顺序执行,只要规则没有返回(return)行为,后面的规则会继续执行。
规则条件:在一个规则中,可以处理多个规则条件,用when和otherwise定义。规则条件定义需要满足的条件和满足条件时的行为(action)。同一级别条件下,when可以有多个,但otherwise最多有一个,代表所有when都不满足的条件。不同条件间相当于if...elseif关系,因此一个条件满足时,后面的条件不会再进行判断。
行为:在规则条件下,可以执行一个或多个行为(action)。其中返回行为(return)是特殊行为,执行到这个行为会直接返回,进而中断后续的规则、条件和行为的执行。
2.使用规则编辑器
InterSystems规则引擎提供图形化的规则编辑器,通过管理门户>Interoperability>构建>业务规则 访问它。
第一步要确定我们要建立什么类型规则:是消息路由规则,还是普通业务规则,亦或是管理警告规则?
同时,规则是对象类,因此需要指定它的类包名(包)和类名(名称)。
2.1 消息路由规则的创建与编辑
本章介绍消息路由规则的创建与编辑,如果您是在找普通业务规则的创建方式,请跳到下一章。
消息路由流程本身是一种简单的业务流程,消息路由规则的上下文就是对应的业务流程对象,因此消息路由规则的上下文类型是固定的。
InterSystems提供4种开箱即用的消息路由规则,分别是:
路由规则类型
说明
上下文类
普通消息路由规则
用于用户自定义的对象类型消息的路由规则
EnsLib.MsgRouter.RoutingEngine
HL7 消息路由规则
用于HL7 V2消息的路由规则
EnsLib.HL7.MsgRouter.RoutingEngine
虚拟文档消息路由规则
用于XML、EDIFACT等虚拟文档类型消息的路由规则
EnsLib.MsgRouter.VDocRoutingEngine
基于消息段的虚拟文档消息路由规则
用于XML、EDIFACT等虚拟文档类型消息的路由规则,基于消息段,而非完整消息
EnsLib.EDI.MsgRouter.SegmentedRoutingEngine
2.1.1 HL7 v2消息路由规则的创建和部署
HL7 v2消息是使用分割符分隔的字符串,在InterSystems数据平台上使用内建的虚拟文档来操作,因此可以将HL7 v2消息的段(Segment)和属性(Field)作为对象和属性方式操作,非常简单。同时,InterSystems数据平台提供开箱即用的路由production模版,直接基于模版编辑即可。
2.1.1.1 创建HL7 v2路由规则的方法
方法1: 使用HL7 v2 production模版向导创建
在production创建向导中,选择production类型为HL7消息发送。这时同时创建用户HL7 v2路由的production和对应路由规则类。这种方法最简单,如果目标就是建立一个路由HL7 v2的产品,推荐使用这个模版向导。
向导会自动应用模版,创建如下的HL7 v2路由产品,它带处理输入HL7文件的BS和输出HL7文件的BO、一个路由规则BP:MsgRouter和一个异常警告BP:Ens.Alert。
选择MsgRouter,在右侧的业务规则名称中可以看到,向导自动创建了名为HIP.Prod.HL7Router.RoutingRule的路由规则。点击后面的放大镜图标,即可对该规则进行编辑。
方法2: 直接使用规则向导创建规则
在规则创建向导中,选择规则类型为:HL7 Message Routing Rule。
2.1.1.2 编辑规则
使用HL7 v2 production模版向导创建的规则定义已经包含了一个规则集(ruleSet),其中有一个规则(rule),而该规则下只有一个条件(when)。使用规则向导创建的v2路由规则是完全空白的规则定义,只有一个规则集。
我们以HL7 v2 production模版向导创建的规则定义为例介绍规则的编辑。
在规则编辑器页面,右侧是规则辅助,由规则辅助类提供支持,列出可以执行的操作。选中ruleset、rule、条件(when/otherwise)和行为,都会显示不同的可以执行的操作和相应的解释。
规则集(ruleSet)是一系列的规则的组合。
规则集可以设置生效时间范围:effectiveBegin和effectiveEnd。如果未定义生效时间范围,规则定义编译后即刻生效。当定义多个ruleSet时,应该定义每个ruleSet的生效时间范围;如果有生效时间范围的重叠,会使用第一个生效的规则集。
规则集有名称 name,建议设置为有意义的规则集说明。
规则(rule)是一系列条件的组合。
选中ruleSet,点击+号就可以添加规则。
规则可以设置:
名称(name): 应该设置为有意义的字符串,例如” ADT文件消息处理”。
是否禁用(disabled):默认是启用的(false)。
约束(constraint):设置本规则的消息约束。双击constraint即可编辑。对于HL7 v2消息,可以对下列信息进行约束:
源(source):对消息来源进行约束,本例中源被默认为HL7FileService,就是HL7文件源。如果这个路由规则需要处理多个HL7消息源,例如文件和TCP,可以把源约束删除掉。
Schema类别(Schema Category):对HL7 v2消息的Schema版本进行约束。如果路由规则只处理特定版本的消息,可以进行选择,例如2.5.1。
文档名称(Document Name):因为HL7 v2被作为虚拟文档对象进行处理,因此每种类型的v2消息都是一种虚拟文档。如果要对处理的v2消息类型进行约束,可以多选v2消息类型,例如ADT_A01和ADT_A03。
注意,这些约束项都是可选的。任何不符合约束的消息,都不会被路由,并且会被记录在规则日志(rule log)中。
规则条件(when/otherwise)设定条件(condition)。
选中rule,点击+号,即可增加条件when或otherwise。增加后,双击condition即可编辑。可以用在条件的判据数据就是上下文中的属性(数据),在表达式编辑窗口的文本输入栏会有属性提示,打首字母就会提示,也可以打任意字符并删除,从而显示所有上下文可用属性。
HL7消息是一种虚拟文档*,因此有Document特殊变量用于访问其虚拟文档内的数据。如果在上一步的规则约束中选择了虚拟文档的类型,如ADT_A01,那么引擎还会在Document.{ 后提供所有对应HL7 v2虚拟文档的段和属性提示,如下图。
*注:关于虚拟文档,我将在下一篇文章中介绍。
在表达式编辑窗口中,点击op打开操作符向导,选择操作符,例如判等、大于、包含等。点击fx打开函数向导,选择函数,例如ConvertDateTime函数可以将HL7的时间格式(YYYYMMDDhhmmss)转为ODBC格式(YYYY-MM-DD hh:mm:ss)。也可以直接写表达式,而不使用这些操作符和函数向导。用户可以扩展自定义函数,见第二部分的规则函数扩展章节。
行为(action)定义了满足条件时的行为。
例如满足条件,将消息做模型转换后发送给外部HL7接口。在右侧的规则辅助窗口列出可以执行的行为。注意在同一个规则条件下,可以有多个行为,例如向多个目标发送不同的消息。
对于路由规则,通常的行为时发送(send)。发送前,选中转换(transform)可以选择发送前要执行的数据转换;
发送目标(target)会列出production中的所有业务操作和业务流程,可以多选。
注意1:规则(rule)也是一种行为,即满足条件时,可以执行子规则。
注意2:返回(return)行为会中断当前规则条件下的后续行为。
<<未完待续>>
公告
Claire Zheng · 二月 16, 2022
亲爱的开发者们!
“InterSystems中国”在B站现在已经有两百多位粉丝啦,欢迎查收2021年InterSystems中国在B站最受欢迎的视频列表!
2021 InterSystems中国在B站最受欢迎的视频(Top10)
№
视频(点击查看)
播放量
1
从Caché数据库升级到InterSystems IRIS数据平台的N个理由
466
2
Caché从零基础到精通-第0讲 前言
397
3
Caché从零基础到精通-第1讲-Caché 简介
346
4
Caché从零基础到精通-第2讲_初识M程序
324
5
FHIR标准和国际基于FHIR的互联互通实践
229
6
乔鹏-IRIS数据库在医疗行业发展(1):InterSystems IRIS架构
221
7
InterSystems Caché系统运维培训:InterSystems Caché架构、备份与恢复
200
8
【中文字幕】经济学人访谈录:凝望医疗健康数字化的未来
192
9
Caché从零基础到精通-第3讲_语法规则
188
10
InterSystems Caché系统运维培训:InterSystems Caché系统高可用与数据库镜像
177
欢迎大家B站搜索“InterSystems中国”关注我们,我们将持续上传优秀视频!
文章
Lucy Ma · 五月 18, 2022
InterSystems IRIS商业智能支持用多种方式使你的模型保持数据同步。这篇文章将展示如何构建和同步。当然有多种方式可以手动同步,但是这些是特殊案例,几乎所有的模型保持数据同步的方式都是通过构建和自动同步。
什么是构建?
构建开始于将所有的数据从模型中移除。这样保证了构建的过程是从一个干净的起点开始的。接着构建会逐步从每个源类查询所有数据条目。这里会提取所有的数据条目,或者有限制的数据条目。当构建到对应的数据条目时候,被模型选择的数据会插入到模型中。最终,一旦所有的数据都被插入到模型里,索引会被构建。在这个过程中,模型是不可用的,数据也不能被查询。构建的执行过程是单线程或者多线程的。它可以被初始化于UI或者终端界面。UI界面会默认是多线程。从终端界面来运行构建过程会默认成多线程,除非过程中设置传入的参数。在更多的场景下,多线程构建是可行的。也有特殊的场景是不允许执行多线程构建的,那么构建过程只能通过单线程完成。
什么是同步?
如果一个模型的源类是启动了DSTIME (参见文档),它就可以被同步。DSTime允许通过更改源类来被追踪。当同步过程被启动,只有在模型中设定的需要变更的数据条目会被插入,更新或者删除。当同步过程正在运行,模型是可以用于查询数据的。同步机制只能通过终端界面来启动。它可以在UI界面的模型管理器中设置定时任务,但是不能够直接从UI界面执行。默认场景是,同步只能是单线程,但是也可以通过参数设置来启动多线程同步。
一个永远不会出错的办法是通过构建来初始化模型,然后通过同步机制来保持数据的更新。
差异回顾
构建
同步
多少数据需要更新?
所有
只有变更的数据
可在UI界面操作?
是
否
多线程
是,默认
是,非默认
模型是否可被使用
否(*1)
是
需要源类的变更
否
是,DSTIME需要开启
构建更新
(*1)从InterSystems IRIS 2020.1开始,选择性构建功能可以作为一个选项来构建模型了。这个功能将允许模型在构建过程中能够被使用。更多信息请参考 Getting Started with Selective Build
同步更新
从 InterSystems IRIS 2021.2开始,DSTIME会作为一个新的“条件”选项。这个改动将允许实施有条件的开启DSTIME选项,专门服务于特殊的场景和安装。
文章
Claire Zheng · 十月 19, 2021
Hi 亲爱的开发者们,
在这篇帖子中,我们将向您展示如何善用开发者社区的各类标签(Tags),让我们充分利用这个开发者社区的选项吧!
一个标签(Tag)就是一个描述帖子主题的单词或短语,是一种将开发者社区成员和专家与文章联系起来的方法,通过合理地运用标签(Tag),他们将能够讨论/给出正确的答案,将文章分类为具体的、定义明确的类别。
标签(Tag)也可以用来帮助你识别你感兴趣或相关的文章。
在开发者社区顶部的菜单中,你可以看到 标签(Tag)完整列表
标签(Tag)的类型和开发者社区的标签树(Tag Tree)
在开发者社区有两种标签:
标签组(Groups)– 所谓的主标签,用于标识广泛的主题,包括所有InterSystems技术。
标签(Tags)–用于更专门化主题的常规标签。
每个帖子必须至少有一个这样的组(Group)。你知道所有的组(Group)吗?
针对InterSystems technology的标签组 (9):
针对 Visual Studio Code的标签组:
InterSystems开发者社区的官方声明标签组“official announcements” :
来自Worldwide Response Center (WRC)的警告和警报标签组:
Open Exchange的一个标签组(InterSystems软件解决方案和框架的InterSystems库),另一个标签组是Global Masters(InterSystems游戏化平台),还有一个另一个标签组是Partner Directory (合作伙伴目录,客户和合作伙伴的InterSystems平台):
标签组Global Summit(全球峰会),这是InterSystems的年度盛会:
标签组Online Learning (在线学习)和Documentation(文档):
供用户进行评论、发表意见、提供建议的标签组 DC Feedback:
与InterSystems技术相关的工作标签组 job opportunity announcements (工作机会发布):
用以标记那些无法用前述标签归类的文章的标签组Others:
除了标签组(Group)之外,开发者社区成员还使用标签(Tags)来指定更多的帖子内容。
在 开发者社区标签树(Tag Tree),你会看到一些子标签(subtags),对标签的内容进行分类。
例如,在"语言(Languages)"标签下有如下子标签:"C++", "Python", "JavaScript", "MultiValue Basic", "ObjectScript", "Java" and ".NET".
需要注意的是,为帖子加标签(Tags)并非强制性的,但是在发帖前你必须为帖子选择至少一个"标签组(Groups)”:
标签(Tags)归类:
你可以通过 开发者社区标签树(Tag Tree)以三种不同方式为标签归类:
1. 按热门程度:
标签组(Groups)和标签(Tags)根据它们在帖子中被使用的次数排列,这个数字会出现在每个标签(Tag)旁边的括号内。
例如,标签“Open Exchange” 出现在了368篇帖子中:
2. 按名称:
标签组(Groups)和标签(Tags)按字母顺序排列。
3. 按新增:
在这种模式下,新增标签组(Groups)和标签(Tags)会出现在最前面。
标签(Tag)页:按标签关注、排序、筛选文章
每个标签(Tag)都有自己的URL/网页,在那里你可以看到所有使用该标签的帖子。
例如, "XML" 标签(Tag)的标签页面是:https://cn.community.intersystems.com/tags/xml, 在这个页面展示了所有使用这一标签的文章:
在标签页面上,所有的帖子都可以通过不同的标准进行再次排列:按更新时间、按日期、按点赞、按查看数、按回复。
它们也可以按发布类型分类:公告、文章、问题、讨论、视频或工作。你需要到左上角的菜单,选择你要找的文章类型。
快来关注你感兴趣的标签(Tags)吧!
如果你对某个主题感兴趣,你可以在开发者社区标签树(Tag Tree)中寻找它的标签,选择它,然后点击它旁边的“关注”按钮。当你关注了某一标签(Tags)时,你会收到所有使用该标签(Tags)的帖子的邮件。
我们推荐您可以关注以下标签: Best practices(最佳实践) | Tips and tricks(提示和技巧) | Beginner(初学者) | Tutorial(教程).
那么,现在就来看看开发者社区标签树(Tag Tree)吧——一大波儿有趣的主题(标签)和各种有用的内容正在等着你!
阅读所有与你感兴趣的主题相关的文章;
关注标签走,这样你就不会错过任何关于你最喜欢的话题的帖子了。
如果你有任何关于标签(Tags)的问题,或者你想@任何人,请在下面留下你的评论/建议!
文章
Hao Ma · 九月 22, 2021
技术概要:ODBC 和 InterSystems 数据库
如果您希望在 InterSystems IRIS®数据平台上使用 ODBC,本文将介绍如何设置它。要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems 技术概要(InterSystems First Looks)。
1 ODBC: 如何在 InterSystems IRIS 中使用它InterSystems 提供了一个完全兼容的(ODBC 3.5)ODBC 驱动程序,您可以使用它通过 ODBC 访问 InterSystems IRIS 数据库。当您安装 InterSystems IRIS 时,默认安装该驱动程序。为了开始在 InterSystems IRIS 中使用 ODBC,您只需要在 InterSystems IRIS 实例上配置驱动程序。本技术概要(First Look)文档对这一过程进行了概述。如果您还不熟悉 ODBC,请参见本文档末尾的 "了解更多信息" 一节中的链接,以获得更多信息。
2 用前须知要使用这个程序,您需要一个安装了 InterSystems IRIS 实例的 Windows 系统。有关如何安装和授权 InterSystems IRIS 开发实例的说明,请参见InterSystems IRIS Basics: Installation(《InterSystems IRIS 基础:安装》)。
3 在 Windows 上设置 ODBC本节介绍如何在 Windows 上为 InterSystems IRIS 数据库创建 DSN。本节中的说明假定您已经安装了 InterSystems ODBC 驱动程序。默认情况下,标准的 InterSystems IRIS 安装过程会安装驱动程序,所以除非您执行了自定义安装,否则驱动程序应该存在于您的实例中。要使应用程序能够通过 ODBC 访问 InterSystems IRIS 数据库,您需要创建一个 DSN,该 DSN 为 ODBC 客户端驱动程序定义数据库的位置。在 Windows 上,您可以从 Windows 控制面板执行此操作,如下所示:1. 打开Windows Administrative Tools control panel(Windows 管理工具控制面板)。2. 选择 Data Sources(数据源)(ODBC)。3. 在 User DSN(用户 DSN) 标签上,选择 Add(添加)。4. 选择 InterSystems ODBC 并点击 Finish(完成)。
技术概要:ODBC 和 InterSystems 数据库 1 了解更多有关 ODBC 的信息
DSN 创建完成后,将显示 InterSystems ODBC Data Source Setup (InterSystems ODBC 数据源设置)对话框。图 1:InterSystems ODBC 数据源设置对话框
5. 输入必要的配置细节:• 输入 DSN 的名称和描述。• 输入与此 DSN 代表的 InterSystems IRIS 数据库相对应的 IP 地址、端口号和命名空间。• 选择一种身份验证方法,并输入或选择适合 InterSystems IRIS 实例的其他安全信息。
6. 选择 Test Connection(测试连接) 按钮来测试您的设置是否正确。
如果连接测试成功,那么恭喜您!您已经完成了 InterSystems IRIS 数据库的设置,以使用 ODBC。现在您可以修改支持 ODBC 的应用程序,以使用刚刚创建的 DSN。
4 了解更多有关 ODBC 的信息如果您更喜欢使用文件 DSN,请参见Using the InterSystems ODBC Driver guide(《使用 InterSystems ODBC 驱动程序指南》)中的 " Using File DSNs and DSN-less Connections(使用文件 DSN 和无 DSN 连接) "一章,以了解相关说明。InterSystems IRIS 还支持 UNIX®上的 ODBC;详情请参见Using the InterSystems ODBC Driver guide(《使用 InterSystems ODBC 驱动程序指南》)中的 " Using an InterSystems Database as an ODBC Data Source on UNIX®(在 UNIX®上使用 InterSystems 数据库作为 ODBC 数据源)"一章。若要在 Windows 上使用 TLS 保护 ODBC 连接,请参见Connecting from a Windows Client Using a Settings File(《使用设置文件从 Windows 客户端进行连接》)。 要了解更多有关 ODBC 和 InterSystems IRIS 的信息,请参见:• Using the InterSystems ODBC Driver(《使用 InterSystems ODBC 驱动程序》) — InterSystems 文档:使用 ODBC 的逐步说明• Using InterSystems SQL(《使用 InterSystems SQL》) — InterSystems 文档:使用 SQL 的逐步说明• InterSystems SQL Reference(《InterSystems SQL 参考文献》) — InterSystems 文档:SQL 参考文献
2 技术概要: ODBC 和 InterSystems 数据库 了解更多有关 ODBC 的信息
• SQL Optimization Guide(《SQL 优化指南》) — InterSystems 文档:优化 InterSystems SQL 性能的指南
文章
Jingwei Wang · 十一月 2, 2021
InterSystems 技术概要
技术概要(First Look)是为用户提供InterSystems IRIS的关键技术和选项的实践经验的简短文档,其中涉及到的许多技术都可以在免费的评估实例上体验。所有这些技术都可以在已授权的InterSystems IRIS实例上完成。
部署
技术概要:InterSystems 云管理器(First Look: InterSystems Cloud Manager)
介绍InterSystems 云管理器,为您展示如何利用它在公有云上部署InterSystems产品。
技术概要: 容器中的InterSystems 产品(First Look: InterSystems Products in Containers)
介绍Docker容器和在容器中运行InterSystems产品。
InterSystems IRIS 基础:安装(InterSystems IRIS Basics: Installation
指导用户完成InterSystems IRIS的单实例安装,以便与其它技术概要(First Looks)一起使用。
架构
技术概要:使用InterSystems分布式缓存扩展系统的用户容量
介绍了使用由ECP支持的分布式缓存来扩展用户容量。
技术概要:部署InterSystems分片集群
介绍分片(sharding),以及如何使用分片扩展基于InterSystems的应用程序的数据量。
技术概要:数据弹性和镜像
介绍InterSystems产品的故障恢复、高可用性和灾备功能。
开发环境
InterSystems IRIS基础: 连接一个IDE
介绍如何将一个IDE连接到InterSystems IRIS上。
Java和JDBC
技术概要:JDBC 和 InterSystems数据库
介绍如何通过JDBC连接到InterSystems数据库:快速入门,并有机会自己尝试
技术概要: InterSystems IRIS Native API for Java
介绍如何使用InterSystems IRIS Native从Java应用程序中访问InterSystems globals。
技术概要:用XEP实现Java对象持久化
介绍如何使用XEP对象持久化API存储和检索持久化的Java对象。
技术概要:Java 网关和 InterSystems 产品
介绍InterSystems产品通过Java 网关与Java组件进行互操作的能力。
.NET和ODBC
技术概要: ODBC 和 InterSystems数据库
介绍如何通过ODBC连接到InterSystems数据库。
技术概要:InterSystems IRIS Native API for .NET
演示如何通过使用了IRIS Native的.NET应用程序访问InterSystems globals
技术概要:ADO.NET 和InterSystems产品
介绍了如何通过InterSystems ADO.NET Managed Provider连接到InterSystems产品
技术概要: 用XEP实现.Net对象持久化
介绍如何使用XEP对象持久化API存储和检索持久化的.NET对象
技术概要:InterSystems .NET网关
介绍如何使用InterSystems . NET网关(Gateway)。
嵌入式语言
技术概要: ObjectScript
介绍ObjectScript语言,演示如何使用它以多种方式访问数据。
技术概要: Globals
介绍Globals概念,这是InterSystems IRIS数据平台的底层存储结构。.
技术概要:InterSystems SQL
介绍InterSystems SQL、InterSystems产品中常用SQL语句的使用,以及优化查询性能的独特方法。
技术概要:使用InterSystems产品优化SQL性能
介绍InterSystems SQL查询优化技术。
技术概要:在InterSystems产品中开发REST接口
介绍在InterSystems产品中开发REST接口,以提供对数据库和应用程序的访问。
互操作Production
技术概要:使用带有互操作性的Production连接系统
Production介绍。
技术概要:使用 Production 进行大文件传输(Managed File Transfer,MFT)
介绍了大文件传输(MFT)特性,该特性允许用户将第三方文件传输服务直接轻松地包含到InterSystems互操作性产品中。
技术概要:数据转换
介绍DTL编辑器以及如何在互操作性产品中将数据转换为不同的格式。
分析
技术概要:使用InterSystems产品进行SQL搜索
介绍对SQL文本搜索的支持,它为非结构化文本数据提供了语义上下文搜索。
技术概要:InterSystems产品文本分析功能
介绍了对自然语言处理(NLP)文本分析的支持,它为各种自然语言中的非结构化文本数据提供语义分析。
技术概要:InterSystems IRIS 和 UIMA
介绍InterSystems IRIS如何实现并补充了UIMA分析管道.
安全
技术概要:基于角色的访问控制
介绍InterSystems产品中基于角色的访问控制:快速了解并尝试。
技术概要:LDAP和InterSystems产品
介绍如何使用LDAP服务器对InterSystems产品的用户进行身份验证和分配特权。
技术概要:数据加密
技术概要:数据加密
提供对InterSystems数据库加密工具的简要的实际操作介绍。
技术概要:InterSystems公开密钥基础设施 (PKI)
技术概要:InterSystems公开密钥基础设施 (PKI)
介绍了在InterSystems产品中可用的公钥加密、证书颁发机构(CAs)和PKI。
文档目录里面的链接打不开,请看看,谢谢!
文章
Lele Yang · 七月 13, 2021
与Windows上默认安装为服务随机自启动不同,我们在Linux上安装完InterSystems IRIS后,默认是没有配置系统服务的,需要做手动配置。本文提供使用systemd方式来配置InterSystems IRIS服务随机自启动的简单示例,供大家参考。
假设我们已经安装了InterSystems IRIS产品,安装完成后您可以通过iris list来来查看实例信息,包括安装路径,如:"/intersystems/iris"
[root@RHEL8-64-001 ~]# iris list
Configuration 'IRIS' (default)
directory: /intersystems/iris
versionid: 2021.2.0L.546.0
datadir: /intersystems/iris
conf file: iris.cpf (SuperServer port = 51773, WebServer = 52773)
status: running, since Mon May 31 05:03:09 2021
state: ok
product: InterSystems IRIS
在安装完成后,用以下方式搜索不到iris.service,
[root@RHEL8-64-001 ~]# systemctl list-unit-files --type=service|grep iris.service
如何将其配置为系统服务呢,下面是一个简单示例及操作步骤,供大家参考。注意:请使用root用户或者拥有root权限的用户来进行。
1. 创建systemd service,1) 在/usr/lib/systemd/system下创建文件,iris.service,内容如下,
[root@RHEL8-64-001 system]# cat iris.service
[Unit]
Description=InterSystems IRIS
[Service]
Type=forking
ExecStart=/bin/bash -c '/intersystems/iris/irisstart 2>&1 | logger -t iris_start'
ExecStop=/bin/bash -c '/intersystems/iris/irisstop quietly 2>&1 | logger -t iris_stop'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
其中,/intersystems/iris为实例安装目录。2) 创建后,更改文件的属性,
[root@RHEL8-64-001 system]# chmod 755 iris.service
更改后,文件属性如下,-rwxr-xr-x. 1 root root 225 May 31 07:32 iris.service
2. 启用该Service。1)启用,创建系统service的link,
[root@RHEL8-64-001 system]# systemctl enable iris.service
Created symlink /etc/systemd/system/multi-user.target.wants/iris.service → /usr/lib/systemd/system/iris.service.
2)确认状态,确保已经enabled
[root@RHEL8-64-001 system]# systemctl list-unit-files --type=service|grep iris.service
iris.service enabled
3. 测试该Service,1)进行到这个步骤,查看状态应为inactive(dead)。
[root@RHEL8-64-001 system]# systemctl status iris
● iris.service - InterSystems IRIS
Loaded: loaded (/usr/lib/systemd/system/iris.service; enabled; vendor preset>
Active: inactive (dead)
lines 1-3/3 (END)
2) 下面来启动iris服务,
[root@RHEL8-64-001 system]# systemctl start iris.service
3) 再次查看服务状态已经为active(running),启动成功。
[root@RHEL8-64-001 system]# systemctl status iris
● iris.service - InterSystems IRIS
Loaded: loaded (/usr/lib/systemd/system/iris.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-05-31 07:57:43 EDT; 1min 37s ago
Process: 1704 ExecStart=/bin/bash -c /intersystems/iris/irisstart 2>&1 | logger -t iris_start (code=exited, status=0/SUCCE>
Tasks: 52 (limit: 11442)
Memory: 246.0M
CGroup: /system.slice/iris.service
├─2076 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr/ -w/intersystems/iris/mgr/ -cc -B -C/intersystems/i>
├─2085 /intersystems/iris/bin/irisdb WD >
├─2086 /intersystems/iris/bin/irisdb GC >
├─2087 /intersystems/iris/bin/irisdb JD >
├─2088 /intersystems/iris/bin/irisdb AUX7 >
├─2089 /intersystems/iris/bin/irisdb AUX6 >
├─2090 /intersystems/iris/bin/irisdb AUX5 >
├─2091 /intersystems/iris/bin/irisdb AUX4 >
├─2092 /intersystems/iris/bin/irisdb AUX3 >
├─2093 /intersystems/iris/bin/irisdb AUX2 >
├─2094 /intersystems/iris/bin/irisdb AUX1 >
├─2095 /intersystems/iris/bin/irisdb DBXD >
├─2098 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 START^MONITOR
├─2102 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 START^CLNDMN
├─2105 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 stumonitor^JRNRESTO
├─2109 /intersystems/iris/bin/irisdb -s/intersystems/iris/mgr -cj -p13 ^RECEIVE
4)最后重启操作系统,测试iris可以随机自启动。
注:以上测试在Red Hat Linux Enterprise 8版本上进行。
文章
Johnny Wang · 二月 11, 2022
Hello 家人们,
InterSystems 学习网站有许多非常棒的课程。 因此,如果您想了解 InterSystems 并开始使用 InterSystems,希望这些资源可以帮到你:
概述:
InterSystems 产品和技术简介
基础知识:
InterSystems ObjectScript 基础知识
InterSystems SQL 概述
InterSystems IRIS 对象介绍
迁移到 IRIS
后端开发:
设置 RESTful 服务
在 InterSystems IRIS 中使用 JSON
面向开发人员的 InterSystems API Manager 动手实践
构建数据驱动的 Web 应用程序
集成开发:
集成架构
构建 BPL 业务流程
建立自定义业务运营
构建定制业务服务
数据转换基础
非常好的外部资源
互操作性课程
分析开发:
IRIS BI 架构师
IRIS BI 分析器
BI 数据模型
InterSystems IRIS 自适应分析基础
InterSystems 报告入门
IntegratedML 动手实践
来自 learning.intersystems.com 的资源:
如果你想开始,您还可以根据您想要做的事情来个性化选择你需要的资源:
使用 InterSystems 构建服务器端应用程序
使用 InterSystems IRIS 构建业务集成
使用 InterSystems IRIS BI 分析数据
使用自适应分析构建数据模型
使用 InterSystems 报告以可视方式交付数据
在 InterSystems IRIS 中使用 IntegratedML 预测结果
或者,我们在这里为实施合作伙伴(或将做所有事情的其他人,资源对所有人开放)提供了一些更大的资源
公告
jieliang liu · 四月 7, 2021
2021年4月18日,Caché 系统运维培训线上实操课,此次培训的主题包括, Intersystems Caché 架构,Intersystems Caché 备份与恢复,Intersystems Caché 高可用与数据库镜像,Intersystems Caché 安全,Intersystems Caché 监控和性能采集。 欢迎大家报名参加!
线上实操演练,机会难得,欢迎大家报名参会:) 名额有限,先到先得,速速报名啦!
公告
Claire Zheng · 三月 1, 2021
亲爱的社区开发者们:
本周进入 InterSystems 编程大奖赛 的投票时间! 来为你心目中基于InterSystems IRIS而构建的最佳方案投票吧!
🔥 点击投票 投票入口 🔥
如何投票?有哪些最新信息值得了解一下?
所有社区开发者都可以为自己提交的项目投票——投票将根据用户的Global Master级别自动计入专家提名奖(Experts Nomination)和社区提名奖(Community Nomination)。
所有InterSystems员工都可以为专家提名奖(Experts Nomination)或社区提名奖(Community Nomination)投票。
根据目前的投票引擎和算法,您可以选择三个项目进行投票,选出您心目中的一、二、三名。
以下是社区排行榜说明:
社区(Community)提名投票计分方式:
提名
得分
第一名
3
第二名
2
第三名
1
专家(Experts)提名投票计分会有更复杂的数学计算,不同级别的专家有更多的“点数”权力:
专家(Experts)提名投票计分方式:
级别
提名
第一名
第二名
第三名
VIP级:总经理,版主,产品经理
9
6
3
Global Masters中的专家(Expert)级
6
4
2
Global Masters中的专业(Specialist)级
3
2
1
专家(Experts)提名投票也将为按“3-2-1”为社区排行榜贡献出分数。
投票
1. 登录 Open Exchange – 使用开发者社区的账号即可登录。
2. 在开发者社区进行的任何有效贡献后——回答或提问,写一篇文章,对任何帖子发表评论,您就会看到可用的投票按钮。
如果您改变了主意,可以取消并投票给其他您看中的应用——从3月1日-3月7日,您有七天的时间充分选择!
提醒:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~
➡️ 请查收最新的 InterSystems在线竞赛投票规则. 还剩三天,北京时间3月8日中午12点截止,请大家抓紧投票! 我会为我欣赏的项目投票! 介绍的很详细,非常感谢!
公告
Claire Zheng · 五月 12, 2021
亲爱的社区开发者们,大家好!
InterSystems开发者竞赛:FHIR加速器 已于5月10日开启! 我们邀请所有FHIR开发者们在AWS上使用InterSystems IRIS FHIR加速器服务 (FHIRaaS)上开发或测试您的应用。
现在,我们为您提供绝佳机会,您可以在AWS上免费访问FHIRaaS! 那么,掌握FHIRaaS的第一步,是使用URL的特殊code在ISC Dev FHIR Portal 门户注册,链接如下:👉🏼 https://portal.trial.isccloud.io/account/signup
点击上面的链接,遵循相应步骤,即可掌控InterSystems FHIRaaS!
关于此次竞赛的任何疑问,请随时跟帖提问,或在 discord-contests channel 中提问。
再次欢迎大家加入此次竞赛,成为InterSystems FHIRaaS 大师! ✌🏼
Happy coding! :) 原帖更新:
您可以在AWS上免费访问FHIRaaS! 那么,掌握FHIRaaS的第一步,是使用URL的特殊code在ISC Dev FHIR Portal 门户注册,链接如下:👉🏼 https://portal.trial.isccloud.io/account/signup
不要错过哦!
文章
Meng Cao · 五月 10, 2023
今天从官网下载了IRISHealth-2023.1.0.229.0-lnxrh9x64版本的数据库安装包,在RHEL9.0上进行安装配置测试,遇到一个问题,趁热记录下来。
测试环境及软件版本:
操作系统——Red Hat Enterprise Linux release 9.0 (Plow)
数据库——IRISHealth-2023.1.0.229.0-lnxrh9x64
测试创建镜像时,配置好虚拟IP,点击保存。
保存后发现数据库没有变成主成员状态,一直是等待的状态,如下图所示:
这时查看控制台日志发现有大量报错,如下图所示:
从控制台日志看出,此时矛头指向了virtualIP.sh,经过查找发现这个脚本位置在安装目录下的bin目录中。
这里只是创建了MIRROR的配置,然后出现了问题,大概可以猜到可能是添加VIP的方法有什么问题,开启脚本的DEBUG,测试运行添加VIP的方法。
果然,发现了一处报错,如下图所示:
打开脚本文件,查看第588行代码。
研究发现RHEL9.0中,ID=`id | grep uid= | awk -F"=" '{print $2}' | awk -F"(" '{print $1}'`,$ID返回是空,不是数字,所以报错了,修改脚本,注释掉其中六行代码,并关闭DEBUG,如下:
保存脚本后,再次执行添加IP方法测试,IP可以正常添加。PS:不要忘记把测试添加的IP移除掉。
重启数据库,发现MIRROR状态恢复正常。
大家是否有遇到这个问题,可在评论区交流~~~
公告
Claire Zheng · 八月 26, 2022
社区开发者们,大家好!
我们很自豪地宣布我们的InterSystems开发者社区已经达到了几个令人惊喜的里程碑:
📝 10,000 帖子
👥 11,000 注册用户
👁 5,000,000 浏览量
亲爱的开发者成员们,感谢你们的贡献,我们才能达成这样的目标:11K会员、10K发帖、5M浏览量 🍋🍋🍋🍋🍋 !我们为这一成就感到自豪,衷心感谢创造这一切的你们!
我们要感谢你们每一个人,因为你们是我们志同道合的一员!感谢你的每一次提问和对话!感谢你的每一次知识分享!感谢你的中肯建议,推动我们思考,从而变得更好、更有用!每一个你,都让这个社区保持活力和繁荣的原动力!我们很高兴与你在一起!❤️
以下消息让这篇帖子的基调更欢乐!
开发者社区Discord channel 已经有500成员了! 🎉在这个方向上,我们还有很多工作要做,但我们已经准备好迎接挑战了。我们希望你也能加入我们,获得更多有用的信息和想法. 点击加入
再次感谢!让我们一起继续前行,共同成长!
文章
Lele Yang · 二月 18, 2022
InterSystems的产品包括Caché/Ensemble/Health Connect/IRIS/IRIS for Health,均基于进程,当它们及在它们之上开发的应用运行时,您能在操作系统上看到大量cache/irisdb进程。下面以InterSystems IRIS为例,来说明下InterSystems产品的内存使用。
InterSystems IRIS进程的内存使用主要有以下两大类,
第一类,进程私有内存。
私有内存只由该进程使用,且会为每个进程单独分配。进程初始时会被分配128KB的内存空间,随着进程运行根据需要,这个内存空间会自动扩展。InterSystems IRIS对于进程内存使用的限制是Maximum Per-Process Memory, 该参数的设置位置在系统管理门户SMP,System > Configuration > Memory and Startup,允许的取值范围是256KB到2147483647KB(2TB)。如果系统遇到<STORE>错误,那么可以尝试增加该数值,来解决进程运行时无法申请到更多内存的问题。从InterSystems IRIS开始,我们推荐将该值设置为-1, 也就是取上限2TB。
更多InterSystems IRIS进程内存使用可参见如下在线文档"Process Memory in InterSystems Products",https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AVMEM
第二类,共享内存。共享内存是一个在进程之间共享的内存区域,因此内存中只有一个实体。
InterSystems中的共享内存包括如下,1. Database Cache, 也就是我们常说的Global Buffer,设置位置在SMP,System > Configuration > Memory and Startup。 2. Routine Cache, 也就是Routine Buffer,设置位置同上。3. gmheap,设置位置在SMP,System > Configuration > Advanced Memory Settings。我们通常所说的Process Table和Lock Table占用的内存也是从这部分内存中划分出来的,如果遇到Lock Table Full的问题,需要增加locksiz大小,请注意同步调大gmheap。
InterSystems IRIS在实例启动时,会首先尝试为这部分共享内存分配Huge Page/Large Page,以获得最佳性能实践,如果分配成功,您可以在日志文件messages.log中看到如下类似内容,
11/28/21-21:00:09:081 (41752) 0 [Generic.Event] Allocated 35046MB shared memory (large pages): 31000MB global buffers, 1024MB routine buffers
另外,除以上两大类之外,还有一类特殊的内存使用,
1.长字符串内存使用InterSystems IRIS默认启用长字符串,最多支持3,641,144个字符,当进程使用长字符串时,为其分配的内存直接来自于操作系统的malloc() buffer,它不占用进程的私有内存空间,因此为字符串实际分配的内存不受限于Maximum Per-Process Memory。
综上,InterSystems IRIS所使用的内存总量是所有InterSystems IRIS进程使用的内存之和,也就等于,(进程私有内存 * 进程数) + Global Buffer + Routine Buffer + gmheap + 长字符串总体使用内存。
文章
Louis Lu · 九月 22, 2021
技术概要(First Look)有助于您了解在InterSystems IRIS ®数据平台中如何使用SQL:标准的SQL功能、特有功能以及如何快速上手使用。
要体验技术概要(First Look)的所有内容 ,您可以在InterSystems IRIS的免费评估实例上执行相关操作 ,请参阅InterSystems First Looks(《InterSystems 技术概要》)。
1. InterSystems SQL: 特性和性能
InterSystems IRIS 提供高性能、功能完善的 SQL。在 InterSystems IRIS 中使用SQL,包括在单个CPU内核上运行查询,到使用数十个内核的CPU上并行执行查询,已至在InterSystems IRIS服务器集群上运行分布式查询。
在InterSystems IRIS中,可以使用 SQL 的范围包括:
联接(Joins)
灵活、高性能索引
聚合函数和分组
以SQL或InterSystems ObjectScript (以下简称“ObjectScript” )编写的存储过程
JDBC和ODBC连接
自动并行查询
透明分布式查询
InterSystems SQL提供了强大的工具来实现最佳的SQL查询性能。其中一个工具是使用压缩位图索引:使用紧凑、高度有效的结构和向量化的CPU指令, InterSystems SQL可以只用单个内核即可执行每秒数十亿行的聚合操作以及检查逻辑判断条件。本指南的后续内容将提供位图索引的示例。
想要快速尝试InterSystems IRIS的SQL功能吗?查看SQL QuickStart!
2. 演示:SQL Shell
可以通过各种应用程序接口、交互式客户端和标准协议在InterSystems IRIS中执行SQL ,包括:
用于交互式SQL语句执行的InterSystems IRIS SQL Shell
ODBC和JDBC客户端、交互式应用(例如, SQuirreL SQL或WinSQL )或通过将InterSystems IRIS驱动程序嵌入使用的应用程序
InterSystems IRIS管理门户中的System Explorer,为执行SQL提供了交互式的Web界面
在ObjectScript类中执行嵌入式SQL或动态SQL
如果在阅读本指南后,想了解这些主题的更多有关信息,请参阅下面的“了解有关InterSystems SQL的更多信息”。
此示例向您展示如何使用SQL Shell交互式执行SQL语句,或执行文件中的SQL语句。
2.1 用前须知
要使用该程序,需要一个正在运行的InterSystems IRIS实例。可以选择多种类型的已授权的免费评估实例;该实例不必存储在正在运行的系统(尽管它们可以互相进行网络访问)。如何部署每个类型的实例(如果您还没有要使用的实例)的有关信息,请参阅 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的Deploying InterSystems IRIS(部署 InterSystems IRIS)。
还需要从GitHub存储库https://github.com/intersystems/FirstLook- SQLBasics获取本指南的实用程序文件。应该克隆存储库来下载以下文件:
stock_table_demo_one.sql ,其中包含用于创建和加载小型( 20行)存量数据的表格的SQL语句
stock_table_demo_two.csv ,其中包含一百万行存量表数据
Loader.xml ,包含实用程序方法的类文件,用于将数据从stock_table_demo_two.csv加载到InterSystems IRIS表中
注意: stock_table_demo_two.csv 非常大 ,要下载它之前需要安装Git Large File Storage。
必须通过该实例访问FirstLook-SQLBasics源。下载文件的程序取决于所使用的实例类型,如下所示:
如果使用的是ICM部署的实例:
1.使用具有-machine 和-interactive 选项的 icm ssh 命令在储存该实例的节点上打开默认shell ,例如:
icm ssh -machine MYIRIS-AM-TEST-0004 -interactive
2. 在Linux命令行上,使用以下命令之一将存储库克隆到该实例的数据存储卷(data storage volume)。 例如,对于部署在Azure上的配置,数据卷的默认装入点为 /dev/sdd ,因此应使用如下命令:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics
或者使用命令:
$ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd
这些文件现在可以通过容器文件系统的/irissys/data/FirstLook-SQLBasics 目录被InterSystems IRIS获取。
如果您使用的是通过其他方式部署的容器化实例(授权的版本或社区版本):
1. 在主机上打开Linux命令行。(如果您在云节点上使用社区版本 ,请使用SSH连接到节点,如部署和浏览InterSystems IRIS中所述。)
2. 在Linux命令行上,使用git clone或wget命令,如上所述,将存储库克隆到加载为容器中的数据卷的存储位置。
对于社区版实例,可以克隆到该实例的%SYS 目录(社区版实例指定的配置数据存储的位置)。在Linux文件系统上,此目录为/opt/ISC/dur。该文件可以在容器文件系统的/ISC/dur/FirstLook-SQLBasics目录下被InterSystems IRIS获取。
对于授权的容器化实例,选择加载为容器中的数据卷的存储位置(包括durable%SYS 目录,如果使用的话)。例如,如果您的docker run命令包括选项 -v /home/user1:/external,然后将存储库克隆到/home/user1 ,这些文件在容器文件系统上的/external/FirstLook-SQLBasics目录中可被Inter- Systems IRIS获取。
如果您使用的是InterSystems Learning Labs实例:
1. 在集成的IDE中打开命令行终端。
2. 将目录更改为/home/project/shared ,并使用 git clone命令克隆存储库:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics
该文件夹添加到“Shared”下左侧的Explorer面板,且该目录可在InterSystems IRIS 选择路径的 /home/project/shared下被获取。
如果您使用的是已安装的实例:
如果实例的主机是安装有GitHub Desktop和GitHub Large File Storage 的Windows系统:
a. 在主机的web浏览器中转到 https://github.com/intersystems/FirstLook-SQLBasics。
b. 选择Clone or download ,然后选择 Open in Desktop。
这些文件可在GitHub目录中被InterSystems IRIS 获取,例如 C:\ Users\ User1\ Documents\ GitHub\ FirstLook-SQLBasics。
如果主机是Linux系统,只需使用Linux命令行上的git clone命令或wget命令将存储库克隆到您选择的位置即可。
2.2 使用SQL脚本文件创建和填充表
为达到演示目的,我们使用一个SQL脚本文件,stock_table_demo_one.sql,来创建并加载包含几行示例数据的表。
创建和加载表格:
打开InterSystems 终端terminal。将看到如下交互式提示:
USER>
此提示表示您目前在 USER 命名空间(namespace)中,默认情况下该空间为空,可供客户自由使用。从该提示开始,可以执行ObjectScript。
通过输入如下命令立刻打开SQL Shell
DO $SYSTEM.SQL.Shell()
这将输出以下内容:
SQL Command Line Shell
The command prefix is currently set to: <<nothing>>. Enter q to quit, ? for help.
[SQL]USER>>
将当前SQL数据库方言设置为IRIS:
SET DIALECT=IRIS
要运行stock_table_demo_one.sql中的语句,请输入命令
RUN <Path>stock_table_demo_one.sql
其中Path是放置文件的位置(请参阅前面的用前须知)。系统会提示您为日志文件指定名称,日志文件包含文件中的语句及其输出结果、如何处理错误以及语句分隔符。接受所有默认值。
语句创建一个表格并插入20行。文件的前几行是:
CREATE TABLE FirstLook.StockTableDemoOne (ClientID INTEGER, BrokerID INTEGER, Symbol VARCHAR(10), TransactionType VARCHAR(4), TransactionDate TIMESTAMP,Quantity INTEGER, Price DECIMAL(15,2), CommmissionRate DECIMAL(15,2))
GO
INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol, TransactionType, TransactionDate, Quantity, Price, CommmissionRate) VALUES (29834783, 3103, 'RTYU', 'SELL', '2016-01-03', 342, 5.05, 3.25)
GO
当脚本运行时,在处理每个SQL语句后将看到输出结果:
1. INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol,
2. TransactionType, TransactionDate, Quantity,
3. Price, CommissionRate)
4. VALUES (92609349, 3103, 'HWVT', 'BUY', '2017-10-25', 1500, 451.09, 3.25)
1 Row Affectedu
处理完所有语句后, SQL Shell会列出编译的语句数量以及报告的错误和警告,并报告已用时间:
Statements
.................compiled: 21
.....with errors reported: 0
...with warnings reported: 0
Elapsed time: .125181 seconds
2.3 在SQL Shell中直接运行查询
有了已填充的表后,可以对它运行查询。可以使用单行或多行模式来执行此操作,但后者可能更方便。
若要进入多行模式,请根据提示按Enter键。将看到处于多行模式的确认信息。
输入以下SQL语法,逐行输入。关键字GO 指示shell执行查询并退出多行模式:
SELECT BrokerID, TO_CHAR((Quantity * Price),'9,999,999.99') as SubTotal, TransactionDate FROM FirstLook.StockTableDemoOne
WHERE TransactionType='SELL' ORDER BY SubTotal DESC
GO
您输入的语句将与SQL Shell呼应,后附查询结果。
BrokerID
SubTotal
TransactionDate
5001
302780.00
2017-11-06 09:51:24.735
5002
92350.00
2018-01-15 22:21:17.638
3103
57645.00
2017-09-24 19:36:43.079
3103
45015.00
2016-10-31 19:21:08.913
5001
23180.50
2017-07-31 23:05:49.83
5001
13113.60
2015-11-13 22:13:49.457
5001
12636.00
2015-10-13 05:50:23.209
3103
1727.10
2016-01-03 13:59:01.098
1009
1693.50
2016-01-15 18:18:15.346
在查询结果后,您将看到准备和执行语句所需时间的信息:
9 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0625s/47683/263292/0ms execute time(s)/globals/cmds/disk: 0.0006s/64/2903/0ms
cached query class: %sqlcq.USER.cls47
准备步骤包括从一条SQL语句的语法到生成可执行代码。此代码被缓存,以供重复使用,因此一条语句通常仅完全准备一次。后续准备只需要使用语句文本的hash来定位已经缓存的代码。
执行步骤包括执行针对查询生成的代码并返回其结果。在每个步骤的列表中都包含以下指标:
每个步骤所花费的时间。
Globals计数,即为准备或执行SQL语句而引用InterSystems IRIS存储的数量。如需进一步了解全局有关信息,请参阅Orientation Guide for Server-Side Programming(《服务器端编程入门指南》)中的“Introduction to Globals (Globals简介)”一章。
为准备或执行SQL语句而执行的ObjectScript命令的数目。
显示结果的结尾是缓存的查询类(cached query class),这是首次准备语句时生成的缓存代码的ObjectScript类。
3. 也可以使用聚合函数和 GROUP BY。请注意,可以对聚合函数的别名排序:
SELECT BrokerID, TO_CHAR(SUM(Quantity * Price), '9,999,999.99') as SubTotal FROM FirstLook.StockTableDemoOne
GROUP BY BrokerID ORDER BY SubTotal DESC
GO
BrokerID
SubTotal
3103
868,993.60
1009
808,453.50
5001
593,242.82
5002
187,560.00
4 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.1665s/45832/237712/77ms
execute time(s)/globals/cmds/disk: 0.0025s/122/2434/2ms
cached query class: %sqlcq.USER.cls9
3. 演示:使用位图索引提高查询性能
如果您正在使用大型数据集,寻找改善查询性能的方法,位图索引是您可以使用的几种方法之一。
如果一个表有一个或多个字段,字段的可能值集合较小,则创建位图索引特别适合。
有关位图索引运行的详细信息,请参阅InterSystems SQL Optimization Guide(《InterSystems SQL优化指南》)的 Bitmap Indices(位图索引)章节。
在本演示中,您将看到在股票交易数据的百万行数据表格中创建目标位图索引引发的变化。您将使用几个简单的 ObjectScript 命令;很容易地从SQL Shell内无缝访问 ObjectScript 类库。
要运行演示:
按照“使用SQL脚本文件创建和填充表格”(Creating and Populating a Table With a SQL Script File)所述,在终端中启动SQL Shell。
创建表:
CREATE TABLE FirstLook.StockTableDemoTwo (ClientID INTEGER, BrokerID INTEGER,
Symbol VARCHAR(10), TransactionType VARCHAR(4),
TransactionDate TIMESTAMP, Quantity INTEGER,
Price DECIMAL(15,2), CommissionRate DECIMAL(15,2))
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0063s/1811/22260/0ms
execute time(s)/globals/cmds/disk: 0.2138s/76495/655985/76ms
cached query class: %sqlcq.USER.cls1
导入Loader类( Loader.xml文件)。OBJ前缀表示 SQL Shell 按照 ObjectScript 处理以下命令; “c”标志指示InterSystems IRIS编译代码, “k”标志确保源代码存储在活动命名空间(active namespace)中。
OBJ DO $ system.OBJ.Load ("< Path > Loader.xml", "ck")
其中Path是放置文件的位置(请参阅用前须知)。将输出如下结果:
Load started on 04/19/2018 15:17:53
Loading file C:\Users\user\repos\FirstLook-SQLBasics\Loader.xml as xml Imported class: FirstLook.Loader
Compiling class FirstLook.Loader Compiling routine FirstLook.Loader.1 Load finished successfully.
要将stock_table_demo_two.csv中的数据加载到表中,请在终端中运行以下命令:
OBJ WRITE ##class(FirstLook.Loader).LoadStockTableCSV("<Path>stock_table_demo_two.csv")
其中Path是放置文件的位置。此命令的输出结果1000000仅表示已加载100万行。
运行以下查询:
SELECT DISTINCT BrokerID FROM FirstLook.StockTableDemoTwo
输出结果显示,可能的经纪人ID的数量非常小,因此该字段是位图索引的好选择。
BrokerID
115
107
101
114
119
104
109
108
20 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0645s/43430/197693/9ms
execute time(s)/globals/cmds/disk: 1.2569s/2000039/9001314/0ms
cached query class: %sqlcq.USER.cls10
6. 要在添加位图索引之前查看涉及BrokerID字段的COUNT查询的性能,请运行以下查询:
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
BrokerId
Transactions
103
50386
118
50304
107
50247
112
50207
101
50174
109
50088
115
50088
104
50048
111
50031
105
50008
113
49996
119
49942
114
49919
116
49894
110
49888
108
49882
102
49843
120
49768
106
49742
117
49545
20 Rows(s) Affected
观察查询返回结果后显示的查询性能统计信息:所用总时间(包括准备和执行时间)约为0.65秒。
statement prepare time(s)/globals/cmds/disk: 0.0695s/45048/225490/13ms
execute time(s)/globals/cmds/disk: 0.5878s/1000250/11002218/0ms
cached query class: %sqlcq.USER.cls7
7. 在BrokerID上添加位图索引:
CREATE BITMAP INDEX BrokerIDIdx ON TABLE FirstLook.StockTableDemoTwo (BrokerID)
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0056s/1723/15958/0ms
execute time(s)/globals/cmds/disk: 0.9805s/2071557/18505697/1ms
cached query class: %sqlcq.USER.cls11
8. 运行与上述相同的SELECT查询。请注意性能提升:在下面的示例中,查询总共花费了大约0.35秒,减少了近50%。
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
...
statement prepare time(s)/globals/cmds/disk: 0.0573s/45585/231374/0m
execute time(s)/globals/cmds/disk: 0.2926s/622/15004397/0ms
cached query class: %sqlcq.USER.cls1
4. 了解有关InterSystems SQL的更多信息
要了解有关SQL和InterSystems IRIS的更多信息,请参阅:
4.1 介绍材料
Using InterSystems SQL(使用InterSystems SQL)
InterSystems SQL Reference(InterSystems SQL参考书目)
InterSystems SQL Overview(InterSystems SQL概述)
4.2 SQL开发
SQL –Things You Should Know (SQL-您应该知道的事情)
Developing with InterSystems Objects and SQL(使用InterSystems Objects和SQL开发)
4.3 查询优化
First Look: Optimizing SQL Performance with InterSystems IRIS(技术概要:使用InterSystems IRIS优化SQL性能)
InterSystems SQL Optimization Guide(InterSystems SQL优化指南)
Academy – Optimizing SQL Performance(学院派–优化SQL性能)
Optimizing SQL Queries(优化SQL查询)
4.4 分片和可扩展性
First Look: Scaling for Data Volume with Sharding(技术概要:带分片的数据卷扩展)
Scalability Guide(可扩展性指南)
4.5 SQL Search
SQL Search First Look: SQL Search with InterSystems IRIS(技术概要:使用InterSystems IRIS进行)
Using InterSystems SQL Search(使用InterSystems SQL Search)
Creating iFind Indices for Searching Text Fields(创建用于搜索文本字段的iFind索引)
4.6 JDBC
First Look: JDBC and InterSystems IRIS(技术概要:JDBC和InterSystems IRIS)
Using Java JDBC with InterSystems IRIS (documentation)(使用InterSystems IRIS进行Java JDBC <文档>)
Java Overview(Java概述)
Using JDBC with InterSystems IRIS (online learning)(在InterSystems IRIS中使用JDBC <在线学习>)