清除过滤器
文章
Claire Zheng · 一月 18, 2021
亲爱的是社区用户,您好!
如果您看到本页面,则说明您已进入 InterSystems 开发者社区! 非常欢迎您!
在这里,您可以了解和讨论有关InterSystems 产品和技术的信息,包括:InterSystems IRIS数据平台、Caché、Ensemble、HealthShare、DeepSee 和 iKnow。
在这里可以找到什么类型的内容?
我们在开发者社区 (DC) 提供三种类型的内容:文章、问题、公告。还有对问题的回答。 以及视频。
文章的内容涉及 InterSystems 技术和产品的最佳实践和经验。InterSystems 员工和社区用户都可以发表文章。 您可以找到版本说明和新功能描述,以及有关经验和 InterSystems 技术示例的文章。
当然,您也可以在这里提出问题,并获得来自世界各地的最有经验的 InterSystems 技术工程师的答案。
为何要注册?
在 DC 注册后,可以针对以下方面发表和评论文章,提出问题和给出答案:InterSystems数据平台、使用 InterSystems 数据平台和工具构建的解决方案、有助于在 InterSystems 数据平台上构建、部署和维护解决方案的工具、技术和方法。
注意!如果您是InterSystems 技术现有用户,在注册过程中出现如下报错信息,请尝试使用自己的WRC账户直接登陆社区。
点击查看发帖指南。
注意! 版主可能会删除与 InterSystems 产品和技术无关的帖子。
InterSystems 开发者社区行为准则。
注册会员可以投票。 如果您喜欢某篇文章、某个问题或回答,可以为其投票。
何时应该投反对票?
当您遇到发布过于草率、毫不费力就发出的帖子,或者是明显错误、甚至可能造成危险的回答时,请投上反对票。 如果投反对票,并且您认为帖子有改进空间,请考虑添加评论。
查看有关投票的更多信息。
网站如何运作?
帖子按标签进行分类。 有一些标签是必选的,这些标签在编辑时称为“组”。 必选标签与 InterSystems 产品或 InterSystems 服务相关。 您需要提供至少一个这样的标签。 标签有助于对帖子进行分类。 您可以订阅标签,以通过电子邮件或 RSS 获得通知。
此外,您还可以关注您喜欢的会员,相当于订阅该会员的帖子和评论。 在主页面,您可以看到发帖动态,其中最上面的是最新发布或者有最新评论和回答的帖子。
您可以使用筛选器,以便只查看您订阅的标签,以及投票最多的帖子和新帖子。
此外,我们还有 DC 分析网站,可用来查看一些关于 DC 会员、帖子、回答等的数据。
有关其他所有内容,请参见开发者社区常见问题解答。
订阅须知
注册会员可以收到关于开发者社区上的不同操作的电子邮件通知。 请参见此文章了解如何设置。
此外,每个人都可以订阅 RSS:所有内容和特定标签。
InterSystems Global Masters倡导中心!
这是我们的 InterSystems 倡导中心。如果您认为自己是 InterSystems 技术的倡导者,请加入由全球数百名 InterSystems 倡导者组成的团队。 我们将为您提供挑战、徽章,当然还有奖励。 点击查看详细信息。
InterSystems Open Exchange!
在 InterSystems Open Exchange 上查找工具、框架、解决方案、技术示例!点击了解更多信息。
还有什么?
如果您对网站有任何疑问,请在群组中提问,或查看常见问题解答。
我们在 Twitter 上发布开发者社区中的所有有价值内容,如果您更愿意点赞 Facebook,也可以访问我们的 Facebook 页面。
还有 InterSystems 开发者 LinkedIn 信息通道以及 InterSystems 开发者 LinkedIn 群组。 您也可以关注InterSystems中国领英账户,及时获取精彩信息!
如果您喜欢 Telegram,我们也有 DC Telegram 频道发布相同内容。
我们开通了 InterSystems 开发者 YouTube 频道。
在中国,我们在B站开通了InterSystems中国官方账号,将不定时更新由SE团队精心制作的视频课程、讲座等内容。
我们还在 Reddit 的开发者社区子板块发布所有最有趣的公告。
欢迎加入 InterSystems 开发者社区!
公告
Claire Zheng · 一月 7, 2021
亲爱的社区用户,您好!
我们在 Global Masters上推出了商业服务奖励计划,这是一个绝佳的契机,您可以在开发者社区和我们的社交媒体上宣传贵公司的应用、解决方案和服务,甚至为您的 OEX 应用兑换 Google AdWords 推广!
$1,000 Google AdWords 推广代金券 兑换此奖励可在 Google Adwords 上推广您的 OEX 应用。我们将设置推广(关键字、描述、受众),并在推广结束后发送报告。 要求:应用程序应该在 InterSystems IRIS数据平台/IRIS医疗版 上工作,或是通过 IRIS 进行管理/开发的工具。
3,000 积分
开发者社区上的“NEWS”宣传块 兑换此奖励可在开发者社区上宣传您的服务、活动或职位空缺。时长:1 周。 显示在网站所有网页的右侧。 我们的设计人员将为您准备一个横幅。 要求:开发服务、活动或职位空缺应该与 InterSystems 技术相关。
1,500 积分
开发者社区上的 Open Exchange 项目推广 兑换此奖励可在开发者社区上推广您的 OEX 项目。1 周之内,所有社区访问者在网站所有网页右侧的“本周应用”板块中都会看到一个横幅,其中包含您的项目的可点击链接。
1,000 积分
InterSystems 支持的网络研讨会 如果您想针对开发者组织一次专业的网络研讨会,以介绍您的解决方案/工具和公司服务,那么请兑换此奖励,我们将帮忙组织。 您将获得:InterSystems 团队将建立一个在线网络研讨会;在 开发者社区和社交媒体上推广该网络研讨会;开发者社区上的登录页面;网络研讨会前演练和会议期间的技术支持。 要求:应用程序应该在 InterSystems IRIS数据平台/IRIS医疗版上工作,或是通过 IRIS 进行管理/开发的工具。
3,000 积分
让您的视频出现在 InterSystems 开发者 YouTube 频道上 您是否有描述InterSystems 数据平台相关的工具、解决方案或经验的YouTube 视频? 通过订购视频加速包提高您的 YouTube 视频流量:在 InterSystems 开发者 YouTube 频道上推广视频。 列入每月的“InterSystems 开发者视频”摘要。 这是一个示例。 在 Global Masters 和 InterSystems 开发者社交媒体上宣传。
1,500 积分
在开发者社区上发布您公司的标签 兑换此奖励可获得您公司在开发者社区上的标签,它也是一种公司描述,一个包含帖子和您的订阅者的区域。
5,000 积分
如果您还不是 Global Masters 会员,如何兑换?
➡️ 我们邀请您加入:
1. 使用您在开发者社区上的相同账密登录Global Masters 。
2. 回答“自定义你的程序。 从这里开始!”挑战中的 4 个问题(您会在挑战中看到)。
3. 您对 OEX 和开发者社区的贡献积分将在 3 天内自动授予。
4. 在奖励目录兑换奖励。
InterSystems 开发者社区每个月的访问量超过 35000 人。让世界了解您在 InterSystems 数据平台上构建的应用、解决方案和服务!
欢迎在下面的评论中提出您的问题。
* * *
有关 Global Masters 的其他信息:认识Global Masters倡导中心,从这里开始 欢迎几位把你们的相关单位和产品介绍发布出来,展现给全球客户。
@jingqi LIu @Weiwei Yang @Deming Xu @Botai Zhang @姚.鑫
文章
jieliang liu · 一月 7, 2021
我非常高兴地宣布,InterSystems 容器注册表现在可以使用了。 这为客户访问基于容器的版本及预览提供了新的渠道。 所有的社区版镜像都可在公共存储库中找到,且无需登录。 所有完整发布的镜像(IRIS、IRIS for Health、Health Connect、System Alerting and Monitoring、InterSystems Cloud Manager)和实用程序镜像(例如,仲裁器、Web 网关和 PasswordHash)都需要登录令牌,该令牌从 WRC 帐户生成。 WRC 发布网站暂时将继续以 tarball 方式提供已发布镜像。 不过,您现在可以配置 CI/CD 管道以直接从 InterSystems 容器注册表“docker pull”镜像。 可通过 https://containers.intersystems.com 访问该注册表。 有关完整的使用说明,请参阅下文或参阅文档(使用 InterSystems 容器注册表)。如果您遇到任何问题或有任何反馈要分享,请在下面的评论中告知我们,或联系 support@intersystems.com。--------------------------------------------------------------
使用 InterSystems 容器注册表
本文档列出了 InterSystems 容器注册表 (ICR) 中可用的镜像,并提供了使用说明。该注册表位于 containers.intersystems.com 上。
可以使用 docker pull 命令下载 ICR 中的镜像,例如:
docker pull containers.intersystems.com/intersystems/iris-community:2020.3.0.221.0
本文档包含以下部分:
公共像
受限访问镜像
对 ICR 进行身份验证
列出 ICR 清单
公共镜像
以下 ICR 镜像是公开可用的,无需身份验证即可拉取:
InterSystems IRIS
IntegratedML
2020.3
containers.intersystems.com/intersystems/iris-ml-community:2020.3.0.302.0
Community Edition
2020.3
containers.intersystems.com/intersystems/iris-community:2020.3.0.221.0
2020.3 ARM64
containers.intersystems.com/intersystems/iris-community-arm64:2020.3.0.221.0
InterSystems IRIS for Health
IntegratedML
2020.3
containers.intersystems.com/intersystems/irishealth-ml-community:2020.3.0.302.0
Community Edition
2020.3
containers.intersystems.com/intersystems/irishealth-community:2020.3.0.221.0
2020.3 ARM64
containers.intersystems.com/intersystems/irishealth-community-arm64:2020.3.0.221.0
System Alerting and Monitoring
1.0
containers.intersystems.com/intersystems/sam:1.0.0.115
以下 ICR 镜像仅对经过身份验证的用户可用:受限访问镜像
以下 ICR 镜像是公开可用的,无需身份验证即可拉取:
Arbiter
2020.1
containers.intersystems.com/intersystems/arbiter:2020.1.0.215.0
2020.2
containers.intersystems.com/intersystems/arbiter:2020.2.0.211.0
2020.3
containers.intersystems.com/intersystems/arbiter:2020.3.0.210.0
Health Connect
2020.1
containers.intersystems.com/intersystems/healthconnect:2020.1.0.215.0
InterSystems Cloud Manager (ICM)
2020.1
containers.intersystems.com/intersystems/icm:2020.1.0.215.0
2020.2
containers.intersystems.com/intersystems/icm:2020.2.0.211.0
2020.3
containers.intersystems.com/intersystems/icm:2020.3.0.221
InterSystems IRIS
2020.1
containers.intersystems.com/intersystems/iris:2020.1.0.215.0
2020.2
containers.intersystems.com/intersystems/iris:2020.2.0.211.0
2020.3
containers.intersystems.com/intersystems/iris:2020.3.0.221.0
2020.1 ARM64
containers.intersystems.com/intersystems/iris-arm64:2020.1.0.215.0
2020.2 ARM64
containers.intersystems.com/intersystems/iris-arm64:2020.2.0.211.0
2020.3 ARM64
containers.intersystems.com/intersystems/iris-arm64:2020.3.0.221.0
2020.3 IntegratedML
containers.intersystems.com/intersystems/iris-ml:2020.3.0.302.0
InterSystems IRIS for Health
2020.1
containers.intersystems.com/intersystems/irishealth:2020.1.0.217.1
2020.2
containers.intersystems.com/intersystems/irishealth:2020.2.0.211.0
2020.3
containers.intersystems.com/intersystems/irishealth:2020.3.0.221.0
2020.1 ARM64
containers.intersystems.com/intersystems/irishealth-arm64:2020.1.0.217.1
2020.2 ARM64
containers.intersystems.com/intersystems/irishealth-arm64:2020.2.0.211.0
2020.3 ARM64
containers.intersystems.com/intersystems/irishealth-arm64:2020.3.0.221.0
2020.3 IntegratedML
containers.intersystems.com/intersystems/irishealth-ml:2020.3.0.302.0
PasswordHash
1.0
containers.intersystems.com/intersystems/passwordhash:1.0
Web Gateway
2020.2
containers.intersystems.com/intersystems/webgateway:2020.2.0.211.0
2020.3
containers.intersystems.com/intersystems/webgateway:2020.3.0.221.0
要登录至 ICR,请执行以下步骤:对 ICR 进行身份验证
在您的浏览器中加载 https://containers.intersystems.com/,然后使用您的 InterSystems/WRC 凭据登录。
检索您的 Docker 登录令牌或完整的登录命令。
在 Docker 界面(例如,PowerShell 窗口或 Linux 命令行)中,使用提供的凭据对 ICR 进行身份验证。 您可以通过复制并粘贴显示的完整 docker login 命令来执行此操作,例如:
docker login -u="bbinstoc" -p="provided_password" containers.intersystems.com
但是,出于安全原因,您可能想要输入命令 docker login container.intersystems.com,然后在 Username 提示符下输入用户名并将密码粘贴到 Password: 提示符下。
注意:如果您登录到另一个 Docker 注册表,则 docker login 命令可能会导致错误;登录到 container.intersystems.com 之前,请先注销其他注册表。
现在,您可以从 ICR 中拉取镜像,例如:
docker pull containers.intersystems.com/intersystems/iris:2020.3.0.221.0
列出 ICR 清单
API 可用于列出 Docker 注册表中的镜像和标签。 可用于列出注册表清单的开源第三方实用程序的一个示例是 docker-ls ,其可从 https://github.com/mayflower/docker-ls 获取。
获取此实用程序的方法有几种。 你可以:
下载用于各种平台的预编译 docker-ls 二进制文件。
直接在某些平台上安装该实用程序,例如,在 Linux 系统上使用以下命令进行安装:
sudo snap install docker-ls
在 Linux 平台上拉取并运行镜像 carinadigital/docker-ls:latest 以安装该实用程序,例如:
docker run --rm carinadigital/docker-ls:latest
安装 docker-ls 后,您可以使用以下命令列出 ICR 中的存储库:
docker-ls repositories --registry https://containers.intersystems.com --user username --password password
注意:使用 --interactive-password 选项提示输入密码,不要在命令行中输入密码。
要仅列出公开可用的镜像,请为 -user 和 --password 选项提供空字符串 ("") 作为参数, 例如,以下仅列出了公共 InterSystems IRIS for Health 镜像的标签:
docker-ls tags --registry https://containers.intersystems.com --user "" --password "" intersystems/irishealth-community
如果希望看到非公共镜像的完整列表,则无论是否登录 container.intersystems.com,都需要向该实用程序提供用户名和密码。
可访问 https://github.com/mayflower/docker-ls 了解其他示例。
公告
Claire Zheng · 三月 17, 2021
通过持续进行云投资,InterSystems能够提供礼宾级的云服务。
InterSystems IRIS®数据平台和InterSystems IRIS医疗版™现已在亚马逊AWS云服务平台提供完全托管式服务,并可向客户提供一种风险最低、最便捷的充分利用云资源的途径。
客户在AWS基础架构中部署InterSystems环境后,InterSystems的礼宾级托管服务将帮助其处理性能、安全、可用性和操作问题。这种端对端服务可以让客户专注于自己的核心业务,而InterSystems则负责软件部署、基础架构、监测、高可用性、安全、补丁及升级等一系列工作。
InterSystems数据平台副总裁Scott Gnau表示:“在InterSystems,我们致力于通过云服务为客户提供礼宾级的托管式服务,并在AWS云端维持安全、可扩展、高性能的环境。”
“我们的完全托管式云服务可为客户提供两全其美的解决方案——客户既可以利用InterSystems的云端技术,又可以免去相关的担忧和复杂问题。这一最新服务再次证明了我们对云投资的持续承诺,同时也为更多的客户提供了获得所有云技术效益的机会,并彰显了我们一流的客户参与度和支持服务。”
作为一个独立于云的数据平台,InterSystems IRIS可部署在所有的大型公有云中,并支持多云和混合云环境。InterSystems IRIS无需集成多种技术,可以更加便捷地构建支持机器学习的高性能应用程序,从而连接数据和应用程序孤岛。 欢迎国内的云托管服务小伙伴们前来咨询
公告
Michael Lei · 十月 7, 2021
InterSystems 安全基础线InterSystems Security Basics
通过本课程可以:
识别安全模式下的各个组件.
选择合适的认证方法.
创建用户和角色.
利用针对资源的许可来保护资产.
激活系统审计.
https://learning.intersystems.com/course/view.php?id=1774 这个网址国内打不开么 应该可以的,learning 网站不需要翻墙 谢谢,已经打开了,当时应该是网络不太好吧。
文章
Claire Zheng · 三月 21, 2022
谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月“极客聊吧”的话题,我们计划通过上、下两期视频探讨这一话题。在第一期视频中(点击查看),InterSystems中国销售工程师吕正之、马浩和WRC产品支持专家杨乐乐针对以下两点分享了他们的观点:(1)开发语言的多样性与对FHIR的支持; (2)开发平台的前瞻性:对Smart Data Fabric架构的支持。
主题
开发语言的多样性与对FHIR的支持
@Louis.Lu 吕正之(Louis):
大家好,我是InterSystems售前工程师吕正之,这是我的同事杨乐乐和马浩,今天的“极客聊吧”我和我的同事会和大家介绍一下如何为客户提供更好的开发体验的。首先有请我们的资深销售工程师马浩,我们一般称他为老马。老马,你有什么和我们分享的吗?
@Hao.Ma 马浩(老马):
大家好,我是马浩。说到更好的开发体验,首先要聊的是嵌入式Python。原来只能使用InterSystems ObjectScript, Objectscript最大的问题是“开发者的欠缺”——培养开发者需要时间。
Python是最受欢迎的语言。据统计有超过800万的开发者,比Java多。嵌入到系统安装包里, 安装后就可以在代码里使用,混用。开发应用时,使用Embedded Python不仅访问IRIS的数据,包括我们的Ensemble组件,叫Interoperability in Python,也是用Python做的Objectscript的优化。
另一个令人振奋的是 VSCode。还有我们原本的开发IDE只有在Windows平台下的Studio,但是它对于源代码管理、Debug调试等方面的支持都不是很方便,现在我们可以使用VSCode作为InterSystems IRIS的开发IDE,客户端编程、代码调试、代码质量、GitHub, Container管理、Extension等等,所有这一切,对以往的Caché的程序员来说是非常大的改变,也是非常令人高兴的变化。
@Louis.Lu 吕正之(Louis):
嗯,这样确实不错,原来会有一些用户担心会我们开发语言的工程师比较少,现在他们可以招聘擅长Python的工程师进行InterSystems IRIS的开发了。
@Hao.Ma 马浩(老马)
是的,这对于我们的合作伙伴真是个好消息,他们可以招聘一些Python的工程师。当然,对于使用ObjectScript的工程师来说,也意味需要有一个学习新工具的适应的过程。
另外一个提升客户开发体验的是对于HL7 FHIR标准的进一步支持。InterSystems IRIS 医疗版提供了开发FHIR应用的所有必须模块,包括几个东西:API的接口,FHIR服务器以及FHIR资源仓库、FHIR Message Broker消息代理。无论是开发FHIR应用、创建FHIR的数据存储,还是把旧有系统映射的数据映射成FHIR的格式,IRIS for Health(IRIS医疗版)都有非常方便的工具和组件。
@Louis.Lu 吕正之(Louis):
我知道FHIR是HL7最新的互操作性标准,它将医疗数据的基本单元定义为资源,比如患者资源、就诊资源、检查结果资源、药嘱资源等,每个资源都定义了合适的数据格式,约束、值集范围、资源之间的相互关系等,而且FHIR还有强大的扩展能力,满足各方面的实际需求。
同时它也是文档、消息交换的标准,并且它定义了每个资源的接口API、查询参数等。现在的一个问题是针对FHIR资源的查找只能通过API进行,这样对于我们熟悉使用SQL查询的工程师感觉很不方便,会影响到客户的开发体验。
@Hao.Ma 马浩(老马)
现有的FHIR定义确实有这样的问题,FHIR是一个JSON的格式,资源的关系很复杂。不方便做查询。好消息是,InterSystems 在2021年全球线上峰会上演示了FHIR SQL Builder预览版的一些功能,简单地说:它就是一个工具,分析FHIR资源仓库的数据,创建你自己的SQL schema,一部分灵活的控制,总结存储的资源和他们的元素信息。对于大型FHIR资源仓库,用户可以指定只分析总资源库的一个部分。他还提供了一个页面让用户选择资源、元素,并生成相对应的SQL schema,这样对于熟悉SQL的工程师来说,只要访问那个SQL schema就可以使用到你想要的FHIR数据了。
@Louis.Lu 吕正之(Louis):
听上去真不错,这个在哪里可以体验呢?
@Ida.Yang 杨乐乐(Ida):
有希望体验FHIR SQL Builder的观众可以通过400-601-9890 技术热线联系,或者添加我们小助手的微信联系我们,我们很高兴听到各位的使用反馈,很有可能您的建议会被添加到我们未来的产品中。
扫码添加小助手
或搜索“ISC-Johnny”即可添加
主题
开发平台的前瞻性:对Smart Data Fabric架构的支持
马浩(老马):
关于如何为客户提供更好的开发体验,开发平台的前瞻性也是至关重要的,去年我们的全球峰会中提到的InterSystems IRIS 对于Smart Data Fabric(智能数据编织)架构的支持。那么Louis,你是如何理解Smart Data Fabric的呢?
吕正之(Louis):
嗯,很好,你注意到了这一点,对于Smart Data Fabric架构的支持确实贯穿了我们全球峰会的主题。Data Fabric中文有的翻译成数据经纬、数据编织,还有的更直接称为智能数据结构,它描述的是一种数据的管理架构。这种架构可以优化对分散数据的访问,这里说的“分散”包含两方面的含义:一是物理层面,数据存储在不同的数据库、不同的服务器、甚至是在不同的地理位置中。另一层含义指的是数据类型的多样性——它可能是传统的关系型数据,比如主外键关联的多张表,或者是非关系型的比如xml、JSON格式的文档数据,又或者是对象型数据、键值对数据、流数据等。
Data Fabric架构可以智能地、规划并协调它们,方便向数据消费者提供自助式的服务。有了这样的架构,可以通过让用户实时访问正确的数据来提升企业数据的价值,而不管它存储在哪里。Data Fabric整合了核心数据管理功能,依据Gartner对于Data Fabric的组成的描述,在数据源和数据消费者之间主要包含:
数据连接:帮助客户连接数据孤岛
数据填充:实时、智能地选取合适的数据
数据治理:对数据进行处理和提炼
数据访问:并让数据方便于使用,方便于分析
马浩(老马):
那么InterSystems IRIS 是如何支持的呢?
吕正之(Louis):
InterSystems IRIS数据平台集合了Caché、Ensemble的众多功能和特点:
它可以使用同一个平台管理多类型的数据:关系型、文档型、键值对、对象型数据;
它兼容了事务性数据与分析型数据的存储与读取;
内置的多种协议比如Http、SOAP、文件、SQL或者标准HL7、IHE的适配器可作为系统互操作性重要的组成,方便用户用于数据连接、数据访问;
适配器的不同参数可以对应于实时、批量加载数据的不同场景。
Data Fabric还有一个重要的用户使用特性是self-service,也就是用户自己可以花很短的时间去寻找到需要的数据,花更多的时间去探索数据中的隐藏的含义,从而指引自己对数据变化进行更快的反应。
对于业务流程开发工程师,InterSystems IRIS 提供的全部管理、配置界面都是基于BS架构的,也就是说你可以通过网页方便地开发出一个复杂的业务流程,比如要根据实时的数据运行机器学习算法给出预测值,或者在问诊过程中根据当前病情、历史用药、历次化验结果调用临床决策知识库实时给出诊疗建议,又或者需要在很短时间内对满足特定条件的人群发出诊疗告警等等类似于这样的业务流程,需要涉及多个系统、多种数据结构,仅仅通过网页画流程图的方式就可以轻松实现。
对于前端工程师、接口工程师可以借助InterSystems IRIS IAM工具,掌握任何服务端接口的变化,也可以集中监控和管理接口,比如流量管控、访问认证、灰度发布等。
对于机器学习,内嵌的Integrated ML功能可以让非数据科学家,仅仅执行类似于SQL的语句,就完成了从数据建模到数据准备、特征工程、模型选择、训练模型再到验证模型,如果想使用训练好的模型,也仅仅是执行InterSystems扩展SQL 语句就可以获得结果,这对于想使用机器学习对海量数据进行初步筛选的医疗一线人员真是很方便。
对于数据分析师,不但可以使用自己熟悉的PowerBI、Tableau等工具直接访问IRIS中保存的数据,IRIS还提供了自适应分析工具AA(Adaptive Analytics),利用图形化工具对需要分析的数据进行预处理,创建一个虚拟的Cube,该虚拟Cube会在后台运行一个AI引擎,根据数据特点、访问习惯等做出最佳优化,供分析软件调用。
可以看到InterSystems IRIS 对于Data Fabric的架构进行了完整的支持。
当然还有更多、更详细关于InterSystems IRIS 对于Data Fabric的支持的信息请访问我们的官网、开发者社区等渠道获取。正如Gartner的评价,Data Fabric是数据管理的未来。
欢迎通过以下平台与我们联系,敬请关注近期即将推出的视频:如何为用户提供更好的开发体验(下)
文章
Lilian Huang · 六月 23, 2022
InterSystems许可证是指InterSystems发放的电子或纸质版的产品许可证,内容包括许可证订购日期、产品描述等。
激活码/License Key是InterSystems随许可证发放的许可软件激活码。通常情况下,客户收到的是电子许可证。
以下是一些许可证,激活码/License key常见咨询问题参考:
收到电子许可证后,如何获取纸质版许可证?
纸质版许可证或是安装介质盘,可通过合作伙伴或是致电原厂核验许可证信息后获取。
如需申请WRC支持,需要
申请准备:
WRC账号,如无请通过WRC联络信息申请WRC账号
故障问题描述
许可证或激活码/License key
最终客户名称
WRC全球响应中心联络信息:
电话: +86 400-601-9890
邮件: support@intersystems.com
网站1(国内用户): https://wrc.intersystems.cn/
网站2:https://wrc.intersystems.com
如何查询您的授权文件客户名和授权密钥?
方法1: 使用管理门户
以管理员身份登录到系统管理门户,进入菜单:系统管理>软件许可颁发>软件许授权码 (或英文菜单:System Administartion>Licensing>License Key)
记录客户名和授权密钥:
方法2 :使用命令行
执行命令: w $System.License.CKEY(),并拷贝输出内容
USER>w $System.License.CKEY()
Cache Key display:
Based on the active key file 'c:\intersystems\cache\mgr\cache.key'
LicenseCapacity = Cache 2017.1, Enterprise:100, Concurrent User
CustomerName = ***
OrderNumber = 54321
ExpirationDate = 11/30/2022
AuthorizationKey = ********************************************************
MachineID =
方法3 :查看授权文件
使用文本编辑器查看您收到的授权文件。如果您不知道授权文件保存在哪里,可以到服务器的<InterSystems产品安装目录>/mgr/ 下找到cache.key (Cache’/Ensemble/旧版HealthConnect) 或iris.key (IRIS/新版HealthConnect)。
如何查询您的许可证产品类型和版本
方法1 :使用管理门户
任意身份登录到管理门户,点击菜单“关于”,记录版本信息。
方法2 :使用命令行
执行命令: w $ZV,并拷贝输出内容
USER>w $ZV
Cache for Windows (x86-64) 2017.1.1 (Build 111U) Wed May 17 2017 15:34:56 EDT
备注:其他许可证任何问题,欢迎咨询:GCDPSales@intersystems.com。
文章
Qiao Peng · 八月 23, 2022
任何技术总是有些自己独特的术语,尤其是一些英文术语,对于新的用户来说往往即陌生又迷惑。这里整理了一下常听到的InterSystems术语,帮助大家尽快进入InterSystems技术圈子。
名词
说明
Arbiter
仲裁器。用于在mirror高可用集群里辅助判断主备机成员状态,提高高可用集群的有效性
Atelier
InterSystems开发的基于Eclipse的IDE,可以单独部署、也可以嵌入Eclipse
bitmap索引
位图索引。以位图方式保存的枚举类型数据的索引,用于高性能查询
bitslice索引
位片索引。用位图方式对数值型数据建立的索引,用于高性能查询
Buttons
Cache'数据库上的诊断报告工具。历史上,InterSystems曾经提供一个routine,名为^Buttons,用于收集系统数据用于诊断。虽然后来这个工具已经被放在%SYS.Task.DiagnosticReport类中,但大家还是习惯称之为buttons
cconsole log
Cache'数据库的控制台日志文件,记录通用信息、系统错误、特定操作系统错误、网络错误等。它含有非常重要的系统诊断信息
CPF
InterSystems数据平台的参数配置文件(Configuration Parameter File), 文件后缀为cpf
CSP
Cache' Server Page的缩写,它是InterSystems数据平台提供的服务器端网页技术
CSP gateway
部署在网络服务器上的、用于和后台InterSystems Cache'数据平台通讯的组件,它由InterSystems提供
deamon
InterSystems数据平台的后台关键进程,例如写进程、journal进程等
DeepSee
InterSystems Cache'数据库提供的内嵌式BI工具,不用迁移数据即可对事务型数据进行BI分析。在InterSystems IRIS中改名为InterSystems Analytics
dejournal
将数据库操作日志Journal中的记录重新执行的过程
dejournal filter
在数据库操作日志Journal中的记录重新执行的过程中,对记录进行事先过滤的过滤器代码
dismount
数据库卸载
ECP
ECP是InterSystems企业缓存协议(Enterprise Cache Protocol)的缩写。ECP是InterSystems高性能集群架构协议,简称ECP集群,由数据服务器和应用服务器组成。应用服务器缓存数据服务器的数据,对客户端提供媲美内存数据库性能的访问效率
Embedded SQL
嵌入式SQL,在ObjectScript中直接使用SQL语言的特性
Global Buffers
数据缓存
global mapping
将数据库的global映射到特定命名空间,从而使其在命名空间中可以被访问
IAM
InterSystems API管理器。它是一个容器化的API全生命周期管理的独立组件
ICM
InterSystems的云管理器,用于对云部署的InterSystems数据平台集群进行配置、管理和运维
iKnow
InterSystms Cache'数据库上的自然语言处理技术。在InterSystems IRIS上已经改名为InterSystems IRIS Natural Language Processing (NLP)
Instance
一个安装好的InterSystems Cache'/Ensemble/Health Connect/IRIS实例
Journal
Journal是InterSystems数据平台产生的数据操作日志。它被用于保证数据一致性、高可用、灾备等多种场景,是非常重要的数据库特性
License
授权文件,用于激活InterSystems产品
License服务器
在InterSystems数据平台集群部署时,把授权文件集中部署在一台服务器上供集群分享。这台服务器称之为license服务器
messages log
InterSystems IRIS数据平台的控制台日志文件,记录通用信息、系统错误、特定操作系统错误、网络错误等。它含有非常重要的系统诊断信息
Mirror
InterSystems镜像技术,这是一个高可用的技术。通过主服务器与镜像备用服务器间的同步操作日志(journal)来保持数据一致,并在故障时自动切换。Mirror不依赖共享存储和操作系统级的故障转移能力,提供低成本的、秒级的切换
mirror同步成员
用于高可用的一对mirror实例,它们之前保持强同步
mirror异步成员
用于高可用目的之外的mirror实例,它们与主机保持弱同步,可以用于灾备、报告与查询等目的
mount
数据库加载
M语言
M语言是MUMPS(Massachusetts General Hospital Utility Multi-Programming System)语言的简称。MUMPS在马塞诸塞州总医院开发,是一个基于多维模型数据库的高性能事务处理语言。InterSystems是M语言的早期厂商之一,后来通过收购兼并了市场上主要的M厂商。InterSystems目前自己的ObjectScript语言与M语言有非常大的差异,例如支持面向对象,因此并非一种语言
namespace
命名空间。 InterSystems数据平台的逻辑工作平台,包括保存在不同数据库的数据和代码
ObjectScript
InterSystems的对象脚本语言,这是一个弱类型的面向对象语言
Package mapping
数据包映射。将数据库的类包映射到特定命名空间,从而使其在命名空间中可以被访问
pButtons
Cache'数据库上的性能监控工具。它是一个routine, 名为^pButtons。由于Cache'数据库庞大的安装基数,即便在InterSystems IRIS新一代数据平台上性能监控工具已经改名为^SystemPerformance,大家还是习惯称系统自带的性能监控工具为pButtons
routine
用ObjectScript编写的非OO的服务器端程序
routine mapping
将数据库的routine映射到特定命名空间,从而使其在命名空间中可以被访问
SAM
InterSystems的系统告警与监控管理器。它是一个容器化的独立组件
Shadow
在Mirror技术之前的InterSystems数据同步机制。通过在Shadow主备机之间传递Journal来实现备机对主机的数据同步。它不是严格意义上的高可用方案
sharding
数据分片。通过将一个大数据集拆分成若干小的数据分片,提供横向可扩展的访问机制
SMP
系统管理门户。它是随InterSystems数据平台安装的用于后台管理与开发的Web应用,最常用的后台管理应用
Studio
InterSystems开发的IDE,运行在Windows操作系统上
superserver
超级服务器,InterSystems数据平台实例监听特定端口,并分配给后台子系统,它称之为超级服务器。默认的监听端口时1972
Web网关
部署在网络服务器上的、用于和后台InterSystems IRIS数据平台通讯的组件,它由InterSystems提供
WIJ
write image journaling的缩写,是InterSystems数据平台在写后台进程将数据更新完全写入数据库文件前,保证数据一致性、降低硬件故障造成的数据风险的机制
ZEN
Zen是InterSystems Cache'数据库提供的组件化的网页应用架构
Tune table
调优表。是InterSystmes 数据平台提供的对SQL数据进行统计的分析工具和分析过程。调优表采集的统计数据会被用于SQL编译器对SQL语句进行执行优化
私有Apache
InterSystems数据平台安装时,会自动安装一个私有的Apache,用于支撑其管理门户网页应用,同时方便其开放的网页应用、SOAP服务、RESTful API等基于HTTP服务的测试与调试。私有Apache功能不完整,不应用于发布InterSystems数据平台上基于HTTP的服务,应该独立部署完整功能的网络服务器
虚拟文档
InterSystems数据平台上,将非结构化数据以对象方式操作的技术。支持XML、以分隔符分隔的字符串等非结构化数据
资源
InterSystems数据平台用于基于权限保护的对象,称之为资源。它包含被保护对象和需要的权限,例如对数据库User的读权限,就是一个资源
镜像
同Mirror
专业
问题
Liang Jianhui · 八月 24, 2022
InterSystems 有解析log文件的工具或者API吗? 您说的是哪个log呢? message Log ,alerts 还是event log? alerts.log
如果您是IRIS或者HC的2017.4版本以上的话,可以用REST API 接口 http://<IP>:<端口号>/api/monitor/alerts 我这边也找到了,非常感谢
文章
Qiao Peng · 二月 22, 2023
面向对象编程的优势
在应用程序开发时,我们使用的大多数开发语言都是面向对象编程 object-oriented programming (OOP)语言,例如大家熟悉的Java、.NET。而TIOBE的2023年2月的最新开发语言流行排行榜上,前5大语言都是面向对象编程语言,连排名第六的Visual Basic都有了越来越多的OO特性:
为什么使用面向对象编程这么流行?因为它有诸多优势:
封装:将数据和操作数据的代码封装在一个单元中,在确定范围的数据上进行编程。方便代码的开发、管理与分享。
抽象:将业务数据概括为不同的对象类型,从而进行业务分组开发、简化程序。
继承:一个类可以从另一个类继承它属性和行为,从而实现更大范围的代码复用。
多态:多个对象可以创建自一个类,且可以有不同的行为。一段灵活的代码能实现多种形态的业务,它进一步降低了代码开发量和调用难度。
而这4个优势正是面向对象编程的核心特征。
关系型数据库的对象/关系错配
虽然面向对象编程是绝对的主流,但数据通常被保存到关系型数据库中。关系型数据库的行和列二维关系与复杂的对象并不匹配:
面向对象的核心特性:封装、抽象、继承、多态,关系数据库都无法直接支持。
对象可以表达复杂的多维度、多类型的数据集,关系性数据库只能表达二维(行和列)、简单类型的数据集。例如对于集合类型-列表或数组,面向对象可以直接将其作为对象的属性,而关系型数据库只能用额外的关联子表或序列化为字符串/字符流等进行表达。
面向对象间通过继承、引用等方式建立对象间关系,关系性数据库通过外键建立表之间的关系。例如人和患者这两个业务概念,在面向对象编程中可以是两个有继承关系的对象类 – 子类患者的属性和方法多数是由人继承来的;而在关系数据库中,只能表达为没有关系的两张表,无法体现这种关系。
在表达和操作数据的方式上, 面向对象基于封装原则,其中数据和操作该数据的代码被组合到一个单元中。而关系数据库基于规范化原则,其中数据被分成单独的表以最小化数据冗余并提高查询性能。例如患者和其病历这两个业务概念,在面向对象编程中病历是患者对象类中的一个集合属性,通过患者可以直接操作病历集和每一份病历;而在关系数据库中,只能表达为通过外键关联的两张表:患者表和病历表。还要保证一个业务对象操作时对应多张表的事务一致性问题。
简单比喻一下这种错配,这就像一辆车,我们使用面向对象方式操作时,是以整车的形式操纵它;但存这辆车时,我们要把它先拆成零件 – 发动机、轮胎、车架… - 分类保存,取车时,再把零件组装起来才能上路。
为了应对这种对象关系错配,通常有三种方法:
自己开发数据映射逻辑,将一个对象拆成对应的多张表,自己维护保存对象数据时的SQL(可能是复杂的存储过程)和从SQL获取数据后组合为对象的代码。
使用对象关系映射 (ORM)框架,例如Hibernate,来自动实现对象模型和关系模型间的映射。它增加了系统的复杂度、降低了性能和可靠性。
直接使用面向对象数据库管理系统。
InterSystems IRIS的面向对象特性
InterSystems Caché和InterSystems IRIS作为多模型数据库管理系统,其面向对象数据库特性在全球面向对象数据库排名中分列第1、第2位。它提供了丰富的面向对象特性和对包括SQL的支持。
完整的OO特性
InterSystems IRIS提供了完整的面向对象特性:封装、多重继承、多态。
封装
InterSystems IRIS可以将数据、逻辑和复杂的模型关系封装在类中。在类中,可以定义:
属性: 支持任意复杂的属性类型,包括简单数据类型、对象型类型、关系型类型、集合类型、透明类型、计算类型等。并支持对属性的复杂约束,例如取值范围约束、模式约束、唯一性约束等
参数:静态属性
方法:操作对象的方法,可以是静态方法或实例方法。方法可以是私有方法,从而不会被继承。InterSystems IRIS提供方法生成器的概念:方法是创建方法实现的程序。使用方法生成器,可以创建类、为不同的情况自动生成特定的应用代码。
索引:用于加速数据检索等索引,支持多种索引类型,包括普通索引、位图索引、位片索引;支持复合索引
查询:封装好的对数据的查询方法,可以基于对象或SQL构建对数据的查询,并可封装为SQL视图或SQL存储过程
持久化方案:可以动态调整的底层多维存储方案。调整持久化方案,不影响以对象和SQL方式对数据的操作与查询代码
/// 人
Class User.Person Extends (%Persistent, %XML.Adaptor, %Populate)
{
/// 属性: 姓名
/// 类型: 字符串
Property Name As %String;
/// 属性: 性别
/// 类型: 字符串
/// 约束取值范围为男和女
Property Gender As %String(VALUELIST = ",男,女");
/// 属性: 家庭住址
/// 类型: User.Address
Property HomeAddress As User.Address;
/// 索引: 基于Gender的位图索引
Index bmIndGender On Gender [ Type = bitmap ];
}
支持纯虚类开发,同时InterSystems IRIS提供庞大的、功能完善的类库,方便用户直接使用或继承。
多重继承
多重继承让一个子类可以同时从多个的父类那里继承属性和行为(方法)。InterSystems IRIS通过多重继承能力,可以快速构建代码。子类可以覆盖父类的属性和方法。
/// 患者,继承与人
Class User.Patient Extends User.Person
{
/// 患者病案号
Property MRN As %String;
}
多态
InterSystems IRIS多态特性让程序可以用父类打开子类的实例,运行这个实例上的方法时,执行的是子类覆盖过的方法。通过多态特性,避免父类的代码臃肿、降低维护难度。
例如1号实例是人,6号实例是患者。都用类User.Person打开对应对象,并用XMLExport输出对象的XML序列化结果,可以看到6号患者的记录输出了它独有的病案号信息:
USER>do ##class(User.Person).%OpenId(1).XMLExport()
<Person><Name>Ximines,Joe U.</Name><Gender>男</Gender><HomeAddress><City>Washington</City><Street>3006 Washington Blvd</Street></HomeAddress></Person>
USER>do ##class(User.Person).%OpenId(6).XMLExport()
<Patient><Name>Geoffrion,Clint R.</Name><Gender>女</Gender><HomeAddress><City>Fargo</City><Street>908 Franklin Place</Street></HomeAddress><MRN>H7768</MRN></Patient>
透明的持久化
通过继承父类%Persistent,任何的类都可以自动获得透明的持久化 (存取到数据库) 的能力:
能够使用方法来新建、打开、修改、保存和删除对象。
当打开一个对象实例并引用对象类型的属性时,系统也会自动打开该对象。这个过程被称为swizzling(也被称为懒惰加载)。然后就可以对该对象进行操作。在下面的例子中,当User.Person对象被打开时,相应的User.Address对象被刷新了。
Set person=##class(User.Person).%OpenId(3)
Set person.Name="张小明"
Set person.HomeAddress.City="北京"
Do person.%Save()
同样,当保存一个对象时,系统也会自动保存其所有的对象类型属性 - 这被称为深度保存。InterSystems IRIS可以通过选项设置执行浅保存。
ACID
InterSystems IRIS的面向对象编程提供事务管理和锁机制,完全支持ACID事务。
在打开一个持久化对象时,可以指定并发锁定的程度,因为持久化对象有可能被多个用户或多个进程使用。锁定程度选项包括:无锁、原子读、共享锁、共享/保留锁、排他/保留锁。
在操作多个持久化对象时,可以将这些操作纳入一个事务进行管理,从而确保事务完整提交或全部回滚。
SQL访问
对于事务性操作来说,面向对象开发非常合适;但对于批量数据操作和数据的查询检索来说,SQL是目前大家最熟悉和便捷的操作语言。多数面向对象数据库使用专用的API来操作数据,而不支持SQL,这影响了开发的便捷性、提高了开发门槛。
InterSystems IRIS在支持面向对象建模和开发的同时,也支持关系型的数据操作,这是它多模型特性的一部分。
父类%Persistent提供了InterSystems IRIS中对象 - SQL投射关系的框架。它提供如下核心能力:
自动建立并维护对象-SQL的投射关系。这种投射是双向的:使用对象建模,会自动投射出SQL表模型;如果使用SQL DDL建模,同样会生成对应的对象模型。这种投射会选择合适的投射逻辑,例如将对象型属性投射为SQL子表、将关系型属性投射为SQL外键。
开发者可以干预对象-SQL的投射关系,从而得到更适合自己的模型。例如对于对象模型中的列表集合类型,默认会投射为表的一个字段,而开发者可以通过设置将它投射为一张子表。
对象-SQL投射并不会拷贝一份不同模型的数据,而是通过投射,将一份数据投射为不同的模型,供开发者在最适合的场景下使用最高效的模型。
投射出的SQL和对象模型同时支持ACID的读写操作。也就是说使用对象方式建模,依然可以使用SQL插入、更新、删除数据。
在类方法中,可以直接使用SQL;同样可以直接将类的Query发布为SQL视图、将类的方法发布为SQL存储过程。在持久化类中,可以定义SQL触发器。
对SQL的对象模式扩展:为了在面向对象应用程序中更容易地使用SQL,InterSystems IRIS提供SQL的一系列对象扩展。其中最有趣的是使用隐式连接运算符("->")提供对象引用的能力,通常被称为 "箭头语法",它可以很大程度上简化SQL的编写。例如,假设你有一个Vendor类,它引用了另外两个类Contact和Region作为属性。在SQL投射上,会看到3张表:Vendor表、Contact表和Region表。要获得Vendor的完整信息,标准SQL需要类似于这样的实现:
SELECT Vendor.ID,Vendor.Name,Contact.Name
FROM Vendor
LEFT OUTER JOIN Contact ON Contact.ID = Vendor.ContactInfo
LEFT OUTER JOIN Region ON Region.ID = Vendor.Region AND Region.Name = '南极洲'
而使用隐式连接运算符,可以在SQL中把引用类型的字段当作对象,使用相关类的属性:
SELECT ID,Name,ContactInfo->Name
FROM Vendor
WHERE Vendor->Region->Name = '南极洲'
另外,InterSystems SQL层面也能体现出很多面向对象的特性。例如,上面的User.Person和User.Patient这两个类投射出Person表和Patient表,如果创建了5条Person的记录,又创建了5条Patient记录,在Patient表中将看到5条记录,而在Person表中将看到10条记录,因为这5个Patient也是Person。这种实现极大方便数据的查询和利用,而关系型数据库很难实现。
从Patient表中获取到5条Patient记录:
从Person表中,获取到10条记录,包括ID为6-10的Patient记录,因为它们也是Person记录:
数据分片
InterSystems IRIS提供数据分片技术(Sharding),将超大数据集分片到不同实例上,形成可弹性横向扩展的集群。
可以在类定义中将持久化类声明为需要数据分片保存的类。同时,可以在数据分片集群上的任何节点上执行对象方法,获得全数据分片集群上其它节点保存的对象数据,并更改它们。
列存储
InterSystems IRIS同时支持基于行存储和列存储的储存模型。列存储对于超大数据上的分析类查询能显著降低I/O、利用现代CPU/GPU的SIMD(Single Instruction Multiple Data)芯片级优化极大提升性能。
对象模型可以直接声明成列存储模型:
Class Sample.TransactionHistory Extends %Persistent [ DdlAllowed, Final ]
{
Parameter STORAGEDEFAULT = "columnar";
Parameter USEEXTENTSET = 1;
Property AccountNumber As %Integer;
Property TransactionDate As %Date;
Property Description As %String(MAXLEN = 10);
Property Amount As %Numeric(SCALE = 2);
Property Type As %String(VALUELIST = "-Deposit-Withdrawal-Transfer");
Index BitmapExtent [ Extent, Type = bitmap ];
}
或仅对对象模型中的特定字段使用列存储的混合模型:
Class Sample.BankTransaction Extends %Persistent [ DdlAllowed ]
{
Parameter STORAGEDEFAULT = "row";
Parameter USEEXTENTSET = 1;
Property AccountNumber As %Integer;
Property TransactionDate As %Date;
Property Description As %String(MAXLEN = 100);
Property Amount As %Numeric(SCALE = 2, STORAGEDEFAULT = "columnar");
Property Type As %String(VALUELIST = "-Deposit-Withdrawal-Transfer");
Index BitmapExtent [ Extent, Type = bitmap ];
}
无论使用行存储、列存储、混合存储, OOP代码和SQL代码都无需任何修改。
多开发语言支持
InterSystems IRIS作为一个多模型数据库,可以向外提供关系型的访问方式;外部开发语言像连接关系型数据库一样,使用XDBC、ADO.NET连接InterSystems IRIS,并使用SQL操作数据。或者使用Entity Framework将.NET对象映射到IRIS的SQL表。
对于面向对象开发而言,InterSystems提供更多的开发语言选择。
内部语言
在使用OOP开发InterSystems IRIS上的类时,使用ObjectScript建立对象模型和方法,也可以使用嵌入式Python开发类方法、或调用外部的Python库。
例如,我们可以直接用嵌入式Python,编写python方法,调用外部的Python库:
/// 使用Python的xmltodict库,将XML转换为JSON
ClassMethod XML2JSON(pXML As %String) [ Language = python ]
{
import xmltodict, json
obj = xmltodict.parse(pXML)
return(json.dumps(obj,ensure_ascii=False))
}
外部语言
Java、.NET和 Python都是流行的OOP语言。InterSystems IRIS可以直接将Java和.NET对象保存到数据库而无需做对象/关系映射,同时InterSystems IRIS的外部服务器(InterSystems External Servers)特性使InterSystems IRIS和这些OOP语言可以双向使用对方定义的对象。它包括以下特性:
即时访问
该特性使Java、.NET 和 Python 对象成为 InterSystems IRIS可以直接操作的对象。当你发出命令时,外部服务器会自动启动,提供对外部语言平台的即时访问,而不需要任何预先设置。
共享的会话
共享会话让 ObjectScript 和外部应用程序在相同的环境和事务中工作,共享相同的双向连接。
远程对象控制
通过代理对象,允许共享会话的任何一方实时控制另一方的目标对象。InterSystems IRIS可以创建和控制 Java、.NET 和 Python 对象,这些语言也可以创建和控制 InterSystems IRIS的对象。
完全可重入的双向连接
传统的单向客户端/服务器关系不再是一个障碍。通过双向重入,任何一方的新对象或方法调用都可以随时进入现有的共享会话。这使得共享会话中任何一方的应用程序都可以同时充当服务器和客户端,发起客户端的查询并为另一方的请求提供服务。
可重入的Native SDK方法
Native SDK方法也是完全可重入的,可以包含在共享会话中,使外部应用程序可以直接访问大量的InterSystems IRIS资源。
例如,在InterSystems IRIS中创建Java类的 java.util.Date的代理类实例,并执行其方法显示当前日期:
write $system.external.getJavaGateway().new("java.util.Date").toString()
除了对象型、关系型,InterSystems IRIS还支持多维(或键值对)和文档建模和数据操作方式。它的多模型特性可以帮助开发者用最合适的模型处理数据、获得最佳的开发效率和运行效率。
文章
Qiao Peng · 三月 28, 2021
如果您正打算学习FHIR、或者正在基于FHIR开发,最佳的学习和开发环境需要一个完备的FHIR 服务器,帮助您理解FHIR标准和调试FHIR应用。使用InterSystems IRIS医疗行业版可以快速配置出FHIR服务器和FHIR资源仓库。这篇文章介绍如何在5分钟内在InterSystems IRIS医疗行业版上配置FHIR服务器和FHIR资源仓库;同时对初学者介绍FHIR测试数据生成与加载的方法,和基本的FHIR REST API操作。
软件准备
1. InterSystems IRIS医疗行业版
您可以使用已有的2020.1及以上的InterSystems IRIS医疗行业版。如果您还没有,那么就在社区里下载一个最新的、免费的社区版吧。
2. 测试用的FHIR数据
如果您正在做FHIR开发,应该有很多FHIR测试数据。如果您正在学习FHIR,那么Synthea是一个不错的FHIR测试数据生成器选项。
3. REST测试工具
您或许已经有趁手的REST测试工具了。如果还没有,POSTMAN是个不错的选择。我的例子里用到的就是POSTMAN。
FHIR服务器配置
1. 安装InterSystems IRIS医疗行业版或社区版
如果您还没有安装过InterSystems IRIS医疗行业版或社区版,社区里有很多很好的介绍文章。
2. 配置FHIR服务器
2.1 创建一个FHIR 服务器命名空间
在InterSystems IRIS医疗行业版或社区版上,需要创建一个FHIR服务器命名空间。HS.HC.Util.Installer类的方法InstallFoundation可以创建这样的命名空间,例如,我们创建一个名为FHIRSERVER的命名空间:
HSLIB>D ##class(HS.HC.Util.Installer).InstallFoundation("FHIRSERVER")
2.2 为这个命名空间配置FHIR访问端点 (FHIR endpoint)
进入管理门户,切换到FHIRSERVER命名空间,然后Health > FHIR Configuration, 然后点击“Server Configuration”。这里会列出已有的FHIR服务器的访问端点,并可以配置新的端点。
这里点击+号,在弹出的配置页面中进行设置,其配置项是:
选中支持的FHIR版本 (Select a metadata set): 如果要支持最新的FHIR版本4,选中HL7V40,就是FHIR R4;
选中交换策略 (Select an interaction strategy): 默认情况下只会有一个选项 - HS.FHIRServer.Storage.Json.InteractionsStrategy,它会将InterSystems IRIS同时配置为FHIR资源仓库。
设置FHIR服务器REST服务端点 (Enter a name(URL)): 例如/csp/healthshare/fhirserver/fhir/r4
然后点击Finish,让它完成后台的配置,这可能会花费1分钟。
2.3 修改这个FHIR服务端点
因为我们是想利用它来学习和测试FHIR,所以我们先跳过访问认证部分。在端点列表中选中刚才创建的/csp/healthshare/fhirserver/fhir/r4,滚动到最下方,找到Edit按钮,并选中“Debugging”下的“Allow Unauthenticated Access”,让FHIR服务器接受匿名访问。然后点击Update进行更新。
如果您按上述步骤执行完成,并且没有错误,那么FHIR服务器和FHIR资源仓库已经就绪了。看看表,您用了多久完成FHIR服务器的创建。
下面测试一下FHIR服务器是否工作正常。
测试FHIR服务器
即便您还没有任何FHIR测试数据,也可以先看看这个FHIR服务器的能力声明。
通过POSTMAN,使用GET方法,进行REST调用:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/metadata。这里localhost:52776是我的测试InterSystems IRIS的服务器地址和Web服务端口号,您换成自己的就行。如果您不知道,那么用您访问InterSystems IRIS管理门户的地址和端口号。
因为我们在上一步配置时,允许匿名访问REST API,所以POSTMAN无需设置任何登陆账户,非常方便测试。正常情况下,您应该看到和我一样的结果:
您的FHIR服务器已经正常工作了,如果还没有测试数据,是时候加载一些FHIR数据进来了。
产生FHIR数据
如果您有自己的FHIR测试数据,请跳过此步,查看“加载FHIR数据”。
如果您还没有自己的FHIR数据,试试Synthea,它能方便的产生大量FHIR测试数据。Synthea有清晰的文档,告诉我们如何产生测试数据。(注:如果您是FHIR初学者,建议先少量创建FHIR测试数据文件,例如先创建5个)
通常它会产生3类JSON文件:
医院信息:hospitalInformation******.json, 每批次只会产生一个医院信息文件。
医生信息:practitionerInformation******.json, 每批次只会产生一个医生信息文件。
患者信息:<患者姓名>******.json, 每批次会根据设置产生一个或多个患者信息文件。
这些FHIR文件都是Bundle资源,Bundle里面会有很多FHIR资源数据。其中医院信息文件和医生信息文件的Bundle类型为batch,而患者信息的Bundle是transaction。
而Synthea产生的患者信息Bundle中的资源使用literal reference来引用医院/地点和医生信息,但它产生的literal reference信息不完整,例如:
"serviceProvider": {
"reference": "Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
需要将reference改为完整的地址,例如:
"serviceProvider": {
"reference": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
也就是增加FHIR服务器的端点。
需要替换/补齐的引用分别是:Location、Organization和Practitioner。
您可以通过文本编辑器进行全局替换,将FHIR服务器的端点信息补充到reference里。如果您产生了很多FHIR数据文件,当然可以用您熟悉的语言写几行代码做这个补充替换。
这里我也附上使用IRIS的Object Script做补充替换的代码示例,它会对指定目录下的所有json文件进行扫描和补充替换,供您参考:
Class Demo.FHIRTools Extends %RegisteredObject
{
/// 修正FHIR文件的引用
/// pFilePath为FHIR json文件目录
/// pFHIREndpoint为FHIR REST的服务端点
ClassMethod CorrectSyntheaFiles(
pFilePath As %String = "C:\Temp\Synthea\output\fhir",
pFHIREndpoint As %String = "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4") As %Status
{
Set tSC = $$$OK
// 遍历目录下的json文件
Set tSM = ##class(%SQL.Statement).%New()
Set tSC = tSM.%PrepareClassQuery("%File", "FileSet")
If $$$ISERR(tSC)
{
Do $system.OBJ.DisplayError(tSC)
Return tSC
}
Set tRS = tSM.%Execute(pFilePath, "*.json", "Name")
While tRS.%Next()
{
// 创建临时文件
Set tFileName = tRS.%Get("Name"),tTempFileName=$Replace(tFileName,".json","temp.json")
Set tFile=##class(%Stream.FileCharacter).%New()
Set tTempFile = ##class(%Stream.FileCharacter).%New()
Set tSC=tTempFile.LinkToFile(tTempFileName)
Set tSC=tFile.LinkToFile(tFileName)
// 从源文件逐行读取,替换后写入临时文件
While 'tFile.AtEnd
{
Set tLine=tFile.ReadLine()
// 执行替换
For tKeyword="Location?identifier=","Organization?identifier=","Practitioner?identifier="
{
Set tLine = $Replace(tLine,tKeyword,pFHIREndpoint_"/"_tKeyword)
}
Set tSC = tTempFile.WriteLine(tLine)
}
Do tTempFile.%Save()
Do tFile.%Close(), tTempFile.%Close()
Kill tFile,tTempFile
// 删除源文件,并将临时文件改名为源文件名
Set tSC = ##class(%File).Delete(tFileName,.tRtn)
Set tSC = ##class(%File).Rename(tTempFileName, tFileName, .tRtn)
}
Return tSC
}
}
加载FHIR数据
当然可以通过FHIR REST API来加载数据,不过,InterSystems IRIS提供了后台的API,可以快速加载特定目录下的大量的FHIR数据文件。
这里我们用后台API:HS.FHIRServer.Tools.DataLoader的SubmitResourceFiles方法进行大量FHIR文件加载:
FHIRSERVER>Set sc=##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("C:\Temp\Synthea\upload","FHIRSERVER","/csp/healthshare/fhirserver/fhir/r4")
其中第一个入参是需要加载的文件目录;第二个参数是加载的FHIR服务器类型,这里用FHIRSERVER;第三个参数是FHIR REST服务端点。
这个方法同样适用于加载NDJSON格式的FHIR数据文件。
如果您是通过Synthea产生的测试FHIR JSON文件,那么应该先加载 医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json),以确保患者数据加载时,Location、Organization和Practitioner的引用能正确关联到FHIR资源仓库中已保存的对应资源上。
注意:2020.* 版本中有一个bug,需要将医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)里的"type": "batch"改为"type": "transaction"。这个bug在2021.1版本中已经得到修复,我已经验证过,但如果您在使用2020的版本,请记得提前修改。
加载完医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)后,再执行相同的方法加载所有患者数据json文件。
使用FHIR 服务器
有了测试数据,现在您可以使用FHIR服务器进行学习或开发测试了。使用POSTMAN,您可以调用FHIR服务器的REST API,查询、更改、提交FHIR资源数据。
如果您是初学者,对FHIR的REST API不熟悉,建议您从FHIR Cheat Sheet开始,它是一个FHIR标准的汇总单页,里面告诉大家如何使用REST API进行操作。
例如:
1. 查询已经加载到FHIR资源仓库中的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient
2. 使用查询参数,查询名为Pedro316的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient?given=Pedro316
或使用POST 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient/_search?given=Pedro316
3. 更复杂的查询参数用例,查询拥有观察项目编码为8302-2(体重)的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient?_has:Observation:patient:code=8302-2
4. 使用operation: $everything 来获取特定患者的所有相关FHIR资源(示例是id为95的患者):使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient/95/$everything
5. 加载FHIR Bundle资源:
使用POST 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/
,并在Body中直接贴入FHIR资源数据到raw,或选择FHIR资源数据文件到binary。
注意:如果您是想让FHIR服务器解析Bundle中的FHIR资源,应该用http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/,而不是http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Bundle。后者把POST的FHIR数据按Bundle进行处理,并不会解析其中包含的FHIR资源内容并逐一保存!
注意:记得根据FHIR数据的格式设置Content-Type为application/json+fhir 或 application/xml+fhir,然后将数据贴在Body里:
好了,开启您的FHIR之旅吧 :)
后续我还会更新InterSystems IRIS医疗版作为FHIR服务器和FHIR资源仓库的更多内容,欢迎关注。
公告
Michael Lei · 五月 15
新版文档门户支持:
同一页面中集中展示以往版本的文档信息.
暗黑模式
左侧菜单展开与收缩
快来体验吧!