搜索​​​​

清除过滤器
文章
Kelly Huang · 七月 12, 2023

如何利用 InterSystems 开放交换工具进行快速 API 开发

在本文中,我将分享我们在 2023 年全球峰会技术交流室中提出的主题。我和@Rochael.Ribeiro 借此机会,我们就以下话题进行探讨: 用于快速 API 的开放交换工具 开放API规范 传统与快速 Api 开发 复合 API(互操作性) 规范优先或 API 优先方法 API 治理和监控 演示(视频) 用于快速 API 的开放交换工具 当我们谈论快速现代 API 开发(Rest / json)时,我们将使用两个 Intersystems Open Exchange 工具: 第一个是用于快速开发 API 的框架,我们将在本文中详细介绍。 https://openexchange.intersystems.com/package/IRIS-apiPub 第二种是使用 Swagger 作为用户界面,用于 IRIS 平台上开发的 Rest API 的规范和文档,以及它们的使用/执行。其运行的基础是开放 API 规范 (OAS) 标准,如下所述: https://openexchange.intersystems.com/package/iris-web-swagger-ui 什么是开放 API 规范 (OAS)? 它是全球范围内用于定义、记录和使用 API 的标准。在大多数情况下,API 甚至在实现之前就已经设计好了。我将在下一个主题中详细讨论它。 它很重要,因为它定义并记录了 Rest API 供其在提供者和消费者方面使用。但这种模式也有助于加快市场上工具(Rest API 客户端)的测试和 API 调用,例如 Swagger、Postman、Insomnia 等…… 使用 IRIS 发布 API 的传统方式 想象一下,我们必须从现有的 IRIS 方法构建并发布 Rest API(如下图)。 以传统方式: 1:我们必须考虑消费者会如何称呼它。例如:将使用哪个路径和动词以及如何响应。无论是 JSON 对象还是纯文本。 2:在 %CSP.REST 类中构建一个新方法,该方法将处理调用它的 http 请求。 3:处理方法对最终用户预期的 http 响应的响应。 4:考虑一下我们将如何提供成功代码以及我们将如何处理异常。 5:为我们的新方法绘制路线。 6:向最终用户提供API文档。我们可能会手动构建 OAS 内容。 7:例如,如果我们有一个请求或响应有效负载(对象),则实施时间将会增加,因为它也必须记录在 OAS 中。 我们怎样才能更快? 只需使用 [WebMethod] 属性标记 IRIS 方法即可。无论是什么,该框架都会使用 OAS 3.x 标准来处理其发布。 为什么 OAS 3.x 标准如此重要? 因为它还详细记录了输入和输出有效负载的所有属性。 这样,市场上的任何 Rest Client 工具都可以立即耦合到 API,例如 Insomnia、Postman、Swagger 等,并提供示例内容以便轻松调用它们。 使用 Swagger,我们已经可以可视化我们的 API(上图)并调用它。这对于测试也非常有用。 API定制 但是如果我需要自定义 API 该怎么办? 例如:我希望路径是其他东西,而不是方法的名称。我希望输入参数位于路径中,而不是像查询参数那样。 我们在方法之上定义了一个特定的符号,我们可以在其中补充方法本身不提供的元信息。 在此示例中,我们为 API 定义了另一条路径,并补充了信息,以便最终用户获得更友好的体验。 Rest API 的投影图 该框架支持多种类型的参数。 在此图中,我们可以突出显示复杂类型(对象)。它们将自动公开为 JSON 有效负载,并且每个属性都将为最终用户正确记录 (OAS)。 互操作性(复合 API) 通过支持复杂类型,您还可以公开互操作性服务。 这是构建复合 API 的有利场景,复合 API 使用多个外部组件(出站)的编排。 这意味着用作请求或响应的对象或消息将自动发布并由 swagger 等工具读取。 这是测试互操作性组件的绝佳方法,因为通常已经加载了有效负载模板,以便用户知道 API 使用哪些属性。 首先,开发人员可以专注于测试,然后通过定制来塑造 Api。 规范优先或 API 优先方法 当今广泛使用的另一个概念是在实现之前就定义 API。 有了这个框架,就可以导入 Open Api 规范。它自动创建方法结构(规范),只缺少它们的实现。 API 治理和监控 对于Api的治理,也建议一起使用IAM。 除了拥有多个插件之外,IAM 还可以通过 OAS 标准快速耦合到 API。 apiPub 为 API 提供额外的跟踪(参见演示视频) 演示 下载和文档 Intersystems 开放交换: https://openexchange.intersystems.com/?search=apiPub 完整文档:https: //github.com/devecchijr/apiPub @Claudio Devecchi 致敬原创作者
公告
jieliang liu · 二月 22

[视频] 加州大学戴维斯分校健康中心如何使用 InterSystems API Manager

嘿开发者, 观看此视频,了解 UC Davis Health 如何使用 InterSystems API Manager 来满足业务合作伙伴对访问自定义 API 和 FHIR API 的需求: ⏯加州大学戴维斯分校健康中心如何使用 InterSystems API Manager @ 2023 年全球峰会 🗣 演讲者:@Carl.Campbell4240,加州大学戴维斯分校健康中心高级集成工程师 订阅我们的 bilibili 频道InterSystems 中国以保持关注!
公告
Claire Zheng · 六月 3

欢迎报名 | InterSystems 2024 SUTA培训现已启动:聚焦Mirror

SUTA培训作为专业的InterSystems技术学习平台之一,汇聚了权威技术专家与值得探讨的技术主题,内容涵盖了InterSystems数据平台基础管理运维的技能和知识。通过SUTA培训,新客户能够系统学习管理运维工作的整体架构和基础概念,老客户可以更深入、全面地加强对管理运维工作的理解和提升。 InterSystems 2024 SUTA培训现已启动,欢迎参加! 如果您是首次参加SUTA培训,请点击此处 或 扫描下图左侧的二维码注册报名。报名信息需经过审核,请您耐心等待。审核通过的用户,点击此处 或 扫描下图右侧的二维码,使用报名时填写的手机号码登录查看课程。 如果您曾报名参加过2022年、2023年的SUTA培训,无需重复注册报名。点击此处 或 扫描下图右侧的二维码,使用报名时填写的手机号码登录查看课程。 建议通过电脑端参加培训,点击进入直播间。
文章
Michael Lei · 七月 18

InterSystems 常见问题系列--如何在global ^ERRORS 里面加入应用日志

InterSystems 常见问题系列 可以通过 TRY-CATCH 来完成: #dim ex As %Exception.AbstractException TRY { //Code that causes an error } CATCH ex { do ex.Log() } 如果用了 ^%ETN, 从BACK 接入点 (BACK^%ETN)处调用. 请参考另外一篇文章: 如何使用命令获得应用错误 (^ERRORS)
公告
Claire Zheng · 九月 11, 2023

InterSystems Supply Chain Orchestrator 和 InterSystems IRIS for Supply Chain 现已正式发布(GA)

InterSystems 很高兴地宣布InterSystems Supply Chain Orchestrator™的核心组件,即 InterSystems IRIS for Supply Chain 2023.1 版,现已正式发布 (GA)。 InterSystems Supply Chain Orchestrator (InterSystems 供应链协调器)基于 InterSystems IRIS® 构建,InterSystems IRIS® 是我们完整的云优先数据平台,支持智能数据编织(smart data fabric)架构,使构建和部署连接数据和应用程序孤岛的高性能、支持机器学习的应用程序变得更加容易。它将 InterSystems IRIS 的强大功能与供应链特定的加速器和框架结合在一起,为供应链编排、需求感知和预测、履行以及快速消费品重新包装提供优化的解决方案。 InterSystems Supply Chain Orchestrator 的一个关键组件是 InterSystems IRIS for Supply Chain,它使 InterSystems IRIS 提供的智能数据编织(smart data fabric)架构更接近供应链用例,并有助于加速实现价值。 *:需要 InterSystems IRIS 高级服务器 **:可通过 InterSystems Package Manager (IPM) 获取 功能亮点 InterSystems IRIS for Supply Chain 2023.1 在 InterSystems IRIS 的基础上提供以下功能: 可定制的供应链数据模型 内置分析cube KPI配置框架 问题生命周期管理 问题分析和可行见解 完整的 REST API 支持 文档和参考资料 产品文档: InterSystems IRIS for Supply Chain 2023.1 InterSystems 在线学习: supply chain learning path (供应链学习路径) InterSystems 概述: 供应链
公告
Michael Lei · 六月 2, 2022

InterSystems 正式发布 InterSystems IRIS, IRIS for Health, & HealthShare Health Connect 2022.1

InterSystems 正式发布 InterSystems IRIS, IRIS for Health, & HealthShare Health Connect 2022.1 InterSystems很高兴地宣布,InterSystems IRIS数据平台、InterSystems IRIS for Health和HealthShare Health Connect的2022.1版本现在已经发布(GA)。 发布亮点 平台更新 InterSystems IRIS 数据平台 2022.1 扩大了包括以下新的和更新的操作系统的生产环境支持:: Windows Server 2022 Windows 11 AIX 7.3 Oracle Linux 8 我们也很高兴地宣布我们同时支持用于开发环境的MacOS 12 (Monterey)的苹果 M1 和 Intel 芯片集。 更好开发 嵌入式Python – 在IRIS内部使用 Python 和 ObjectScript 互操作适配器- Kafka, AWS S3, AWS SNS 和 CloudWatch 重新设计了Production Extensions(PEX)的用户体验 速度、扩展与安全 在线数据分片再平衡Online Shard Rebalancing 自适应SQL Journal & Stream 压缩 针对邮件支持TLS 1.3 和 OAuth 2 分析能力与AI SQL Loader加载器 InterSystems Reports 部署优化 关于所有这些功能的更多细节可以在产品文档中找到: InterSystems IRIS 2022.1 documentation 和 release notes InterSystems IRIS for Health 2022.1 documentation 和 release notes HealthShare Health Connect 2022.1 documentation 和 release note 如何获得软件 软件可以通过传统安装包和容器镜像两种形式获得。 关于可用的安装包和容器镜像的完整列表,请参考 Supported Platforms document. 每个产品的完整安装包可以通过WRC网站Software Distribution page 获取. 使用自定义安装选项,你可以选择你需要的选项,如InterSystems Studio和IntegratedML,以合理化安装范围。 InterSystems IRIS 、 IRIS for Health医疗版和所有相应部件的企业版 容器镜像可以通过以下命令从 InterSystems Container Registry 获得: docker pull containers.intersystems.com/intersystems/iris:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/irishealth:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-arm64:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/irishealth-arm64:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-ml:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-ml-arm64:2022.1.0.209.0 可用镜像的完整列表,请参考 the ICR documentation. 社区版 容器镜像也可以通过以下命令从 InterSystems Container Registry 获得: docker pull containers.intersystems.com/intersystems/iris-community:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/irishealth-community:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-community-arm64:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/irishealth-community-arm64:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-ml-community:2022.1.0.209.0 docker pull containers.intersystems.com/intersystems/iris-ml-community-arm64:2022.1.0.209.0 InterSystems IRIS Studio 2022.1是一个独立的IDE,用于Microsoft Windows,可以通过WRC的组件下载页面下载。它与InterSystems IRIS和IRIS for Health 2022.1及以下版本一起使用。InterSystems还支持VSCode-ObjectScript插件,用于用Visual Studio Code为InterSystems IRIS开发应用程序,该插件可用于Microsoft Windows、Linux和MacOS。 我们在主要云市场上的相应列表将在未来几天内更新。 这个版本的版本号是2022.1.0.209.0。 InterSystems IRIS Studio 2022.1 是一个独立的IDE,用于Microsoft Windows,可以通过WRC的组件下载页面 下载。它支持InterSystems IRIS和IRIS for Health 2022.1及以下版本。InterSystems还支持VSCode-ObjectScript 插件,用于使用Visual Studio Code开发InterSystems IRIS应用程序,该插件可用于Microsoft Windows、Linux和MacOS。 我们在主要云市场上的相应列表将在未来几天内更新。 这个版本的版本号是2022.1.0.209.0。
公告
Michael Lei · 五月 11, 2022

InterSystems Kubernetes Operator 3.3 发布!

InterSystems Kubernetes Operation(IKO)3.3版现已通过WRC下载页面和InterSystems容器注册中心提供。IKO通过提供一个易于使用的irisCluster资源定义,简化了在Kubernetes中使用InterSystems IRIS或InterSystems IRIS for Health的工作。完整的功能清单见IKO文档,包括轻松的分片、镜像和ECP的配置。 IKO 3.3 亮点: 支持InterSystems IRIS和InterSystems IRIS for Health 2021.2 以及 2022.1版本 支持 Kuberentes 1.21 将常见的系统警报和监控(SAM)配置作为irisCluster的一部分进行部署 InterSystems API Manager(IAM)现在也可以作为 irisCluster的一部分进行部署和管理 自动标记Mirror对的活跃端,因此服务可以始终指向激活的镜像成员
公告
Claire Zheng · 十一月 11, 2021

InterSystems开发者竞赛:安全

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems开发者竞赛:安全 🏆 竞赛时间: 2021年11月15日-12月5日 奖金总额: $9,450! 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 🌟 第四名-第十名 - $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 11月15日 - 28日: 应用开发、提交阶段 ✅ 11月29日 - 12月05日: 投票阶段 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用 主题 在这次安全竞赛中,我们鼓励开发人员分享展示如何执行与InterSystems IRIS和InterSystems医疗版相关的安全任务的解决方案。我们邀请您贡献一些应用程序,这些应用程序将揭示与InterSystems安全模型(Security Model)的认证和授权部分相关的任务。 这些任务可以是: OAuth与OpenID SAML / LDAP身份验证实现。​ PKI 的实现 REST API某些部分的访问管理:应用程序级安全、角色/用户级安全。 对数据的访问管理:对数据库、表、列或行级别的访问。 对互操作性组件的访问 访问IRIS BI组件:cubes,枢轴,仪表板等。 授权(用户、角色、资源)和认证(OAuth)设置的DevOps问题。 与身份验证和授权相关的开发人员和支持工具。 你的奇思妙想! 要求: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上运行。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 资源助力 1. InterSystems IRIS初学者: Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 2. ObjectScript Package Manager (ZPM)的初学者: How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM 3. 如何将您的APP提交给大赛 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 4. 文档、课程和视频: Security Documentation Course: InterSystems Security Basics Video: Active Directory Integration with LDAP Video: Configuring a Web Server for IIS for Better Performance and Security Video: Webinar: Securing the Management Portal Video: Advances in Security Article: Building an FHIR Repository + OAuth2 Authorization Server/Resource Server Configuration on IRIS for Health Part 1 Article: InterSystems IRIS Open Authorization Framework (OAuth 2.0) implementation - part 1 Article: Protect your REST API applying OWASP Top Ten 参赛评比 投票规则即将发布,敬请期待! So! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖。 ❗️ 点击此处,查看 官方竞赛条款解读.❗️
问题
Michael Lei · 七月 8, 2022

Intersystems IRIS 上使用JAVA

我现在在使用object script。如果把代码从 objectscript转成 Java 我需要做些什么? 可以参考官方文档:https://gettingstarted.intersystems.com/language-quickstarts/java-quickstart/
公告
Claire Zheng · 三月 14, 2022

InterSystems开发者竞赛:Globals

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems开发者竞赛:Globals 🏆 竞赛时间: 2022年3月21日-4月10日 奖金总额: $10,000 主题 Globals或者直接数据访问(direct data access)——这是InterSystems IRIS 持久性引擎的核心。所有可以通过SQL、REST-API、ObjectScript、DocDB或Native API访问的IRIS数据都存储在globals中。 Globals引擎 负责InterSystems IRIS的性能、可靠性和可扩展性。 在这次竞赛中,我们邀请每个人贡献开源应用程序,该程序可使用InterSystems IRIS Globals来读取、存储和更改数据。我们邀请您使用Globals的强大功能,来实现对数据摄取和读取性能的利用,同时兼备存储模式的灵活性(存储模式允许引入任意数据模型实现)。 一般要求: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 奖品: 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 🌟 第四名-第十五名 - $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $750 🥉 第三名 - $500 ✨ 所有获奖者都将获得Global Masters徽章! 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。 关键参赛节点 🛠 应用开发、提交阶段 3月21日, 2022 (00:00 EDT): 竞赛启动 4月3日, 2022 (23:59 EDT): 提交截止 ✅ 投票阶段: 4月4日, 2022 (00:00 EDT): 投票启动 4月10日, 2022 (23:59 EDT): 投票截止 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 资源助力 1. 文档 Globals 2. IRIS初学者 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 3. ObjectScript Package Manager (ZPM) 初学者: How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM 4. 如何将您的APP提交给大赛: 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 需要帮助? 加入InterSystems' Discord server频道,或跟帖评论提出您的问题! 期待您的精彩提交!祝好运 👍 参与此次竞赛,您同意 遵守相关条款,请认真阅读。 参赛三部曲: 1. 注册社区用户; 2. 在InterSystems Open Exchange上发布应用程序; 3. 把参赛APP提交给大赛;
公告
Michael Lei · 一月 23, 2023

InterSystems 发布 InterSystems IRIS, IRIS for Health 和 HealthShare Health Connect 2022.1.2

InterSystems 很高兴地宣布,InterSystems IRIS、InterSystems IRIS for Health 和 HealthShare Health Connect 2022.1.2 的扩展维护版本现已推出。这些版本为 2022.1.0 和 2022.1.1 版本提供了一些选定的功能和错误修复。 您可以在这些页面上找到有关更改内容的更多信息: InterSystems IRIS InterSystems IRIS 医疗版 HealthShare HealthConnect 请通过开发者社区分享您的反馈,以便我们共同打造更好的产品。 如何获得软件 该软件以经典安装包和容器镜像的形式提供。有关可用安装程序和容器映像的完整列表,请参阅支持的平台网页。 每个产品的完整安装包都可以从 WRC 的软件分发页面获得。 安装包和预览密钥可从 WRC 的预览下载站点或通过评估服务网站获得。 InterSystems IRIS 和 IRIS for Health 的企业版和社区版的容器镜像以及所有相应的组件都可以从InterSystems Container Registry获得。 此版本中所有套件和容器的数量为2022.1.2.574.0 。
公告
Claire Zheng · 五月 15

InterSystems宣布InterSystems IRIS 2024.1.0.267.2,包括对Ubuntu 24.04的支持

InterSystems 很高兴地宣布现已推出: InterSystems IRIS Data Platform 2024.1.0.267.2 InterSystems IRIS for Health 2024.1.0.267.2 HealthShare Health Connect 2024.1.0.267.2 该版本新增了对 Ubuntu 24.04 操作系统的支持。Ubuntu 24.04 包括 Linux 内核 6.8、安全性改进以及安装程序和用户界面改进。 InterSystems IRIS IntegratedML 在 Ubuntu 24.04 上尚不可用。 此外,该版本还解决了所有平台的两个缺陷: 修复了某些使用 "NOT %INLIST "的 SQL 查询返回错误结果的问题。我们以前曾就此错误发出过警告。 修正了某些特定情况下堆栈跟踪不完整的问题。 如何获取软件 与往常一样,Extended Maintenance (EM) 版本附带适用于所有支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅 "受支持的平台 "页面。 经典安装包 安装包可从 WRC 的 "Extended Maintenance Releases"页面获取。此外,还可在Evaluation Services上找到安装包。 容器 InterSystems IRIS 和 IRIS for Health 的企业版和社区版的容器镜像以及所有相应组件均可从 InterSystems Container Registry 获取。 容器同时被标记为 "2024.1 "或 "latest-em"。
公告
Michael Lei · 三月 19

重磅发布!!!InterSystems 宣布 InterSystems IRIS, InterSystems IRIS for Health 和 HealthShare Health Connect 2024.1 全面上市

InterSystems IRIS ®,InterSystems IRIS ® for Health TM和HealthShare ® Health Connect 2024.1版现已全面上市 (GA)。 发布亮点 在此版本中,您可以期待许多令人兴奋的更新,包括: 在ObjectScript中使用向量Vector: 一种强大优化数据操控的能力. 向量搜索Vector Search (试验性): 行业领先的高效数据检索. 多卷数据库: 增强可扩展性和存储管理. 快速在线备份FastOnline Backup (试验性): 优化备份流程. 多种端口支持Multiple Super Server Ports: 提供网络配置的灵活性. FHIR 2.0.0 支持 Smart FHIR R4 对象模型生成 改进了 FHIR 查询的性能 删除专用 Web 服务器 (PWS) 。 请通过开发者社区分享您的反馈,以便我们共同构建更好的产品。 文档 有关所有突出显示功能的详细信息可通过以下链接获得: InterSystems IRIS 2024.1 文档、 发行说明以及已弃用和停产的技术和功能。 InterSystems IRIS for Health 2024.1 文档、 发行说明和升级清单。 HealthShare Health Connect 2024.1 文档、 发行说明和升级清单。 此外,请查看此链接以获取与此版本相关的升级信息。 抢先体验计划 (EAP) 现在有很多 EAP 可用。查看此页面并注册您感兴趣的人。 如何获取软件? 与往常一样,扩展维护 (EM) 版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。 经典安装包 安装包可从 WRC 的 InterSystems IRIS for Health 的扩展维护版本页面和 HealthShare Health Connect 的HealthShare 完整套件页面获取。此外,还可以在评估服务网站上找到套件。 InterSystems IRIS Studio 在该版本中仍然可用,您可以从 WRC 的组件分发页面获取它。 供货情况和套餐信息 此版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。有关完整列表,请参阅支持的平台文档。 安装包和预览密钥可从 WRC 的预览下载站点或通过评估服务网站获取(使用标记“显示预览软件”来访问 2024.1)。 此开发者预览版的内部版本号是: 2024.1.0.263.0 。 容器镜像可从InterSystems 容器注册表获取。容器被标记为“ 2024.1 ”或“latest-em” 。
文章
Hao Ma · 一月 10, 2021

InterSystems 最佳实践系列---APM – 监控 SQL 查询性能

自 Caché 2017 以后,SQL 引擎包含了一些新的统计信息。 这些统计信息记录了执行查询的次数以及运行查询所花费的时间。 对于想要对包含许多 SQL 语句的应用程序的性能进行监控和尝试优化的人来说,这是一座宝库,但访问数据并不像一些人希望的那么容易。 本文和相关的示例代码说明了如何使用这些信息,以及如何例行提取每日统计信息的摘要,并保存应用程序的 SQL 性能的历史记录。 记录了什么? 每次执行 SQL 语句时,都记录花费的时间。 这是非常轻量的操作,无法关闭。 为了最大程度地降低开销,统计信息保留在内存中并定期写入磁盘。 数据包括一天中执行查询的次数以及所花费的平均时间和总时间。 数据不会立即写入磁盘,并且在写入之后,统计信息将由“更新 SQL 查询统计信息”任务更新,该任务通常计划为每小时运行一次。 该任务可以手动触发,但是如果你希望在测试查询时实时查看统计信息,则整个过程需要一点耐心。 警告:在 InterSystems IRIS 2019 及更早版本中,不会针对已使用 %Studio.Project:Deploy 机制部署的类或例程中的嵌入式 SQL 收集这些统计信息。 示例代码不会有任何中断,但这可能会使你产生误导(我被误导过),让你以为一切正常,因为没有查询显示为高开销。 如何查看信息? 你可以在管理门户中查看查询列表。 转到 SQL 页面,点击“SQL 语句”选项卡。 对于你正在运行并查看的新查询,这种方式很好;但是如果有数千条查询正在运行,则可能变得难以管理。 另一种方法是使用 SQL 搜索查询。 信息存储在 INFORMATION_SCHEMA 模式的表中。 该模式含有大量表,我在本文的最后附上了一些 SQL 查询示例。 何时删除统计信息? 每次重新编辑查询时会删除其数据。 因此对于动态查询,这可能意味着清除缓存的查询时。 对于嵌入式 SQL,则意味着重新编译在其中嵌入 SQL 的类或例程时。 在活跃的站点上,可以合理预期统计信息将保存超过一天,但是存放统计信息的表不能用作运行报告或长期分析的长期参考源。 如何汇总信息? 我建议每天晚上将数据提取到永久表中,这些表在生成性能报告时更易于使用。 如果在白天编译类,可能会丢失一些信息,但这不太可能对慢速查询的分析产生任何实际影响。 下面的代码示例说明了如何将每个查询的统计信息提取到每日汇总中。 它包括三个简短的类: * 一个应在每晚运行的任务。 * DRL.MonitorSQL 是主类,用于从 INFORMATION_SCHEMA 表提取数据并存储。 第三个类 DRL.MonitorSQLText 是一个优化类,它存储一次(可能很长的)查询文本,并且只将查询的哈希存储在每天的统计信息中。 示例说明 该任务提取前一天的信息,因此应安排在午夜后不久执行。 你可以导出更多历史数据,只要其存在。 要提取过去 120 天的数据 Do ##class(DRL.MonitorSQL).Capture($h-120,$h-1) 该示例代码直接读取全局 ^rIndex,因为最早版本的统计信息未将日期公开给 SQL。 我所包括的变体将循环实例中的所有命名空间,但这并不总是合适的。 如何查询已提取的数据 提取数据后,您可以通过运行以下语句查找最繁重的查询 SELECT top 20 S.RunDate,S.RoutineName,S.TotalHits,S.SumpTIme,S.Hash,t.QueryText from DRL.MonitorSQL S left join DRL.MonitorSQLText T on S.Hash=T.Hash where RunDate='08/25/2019' order by SumpTime desc   此外,如果选择了开销大的查询的哈希,可以通过以下语句查看该查询的历史记录   SELECT S.RunDate,S.RoutineName,S.TotalHits,S.SumpTIme,S.Hash,t.QueryText from DRL.MonitorSQL S left join DRL.MonitorSQLText T on S.Hash=T.Hash where S.Hash='CgOlfRw7pGL4tYbiijYznQ84kmQ=' order by RunDate   今年早些时候,我获取了一个活跃站点的数据,然后查看了开销最大的查询。 有一个查询的平均时间不到 6 秒,但每天被调用 14000 次,加起来每天消耗的时间将近 24 小时。 实际上,一个核心完全被这个查询占用。 更糟糕的是,第二个查询要花一个小时,它是第一个查询的变体。   运行日期 例程名称 总命中次数 总时间 哈希 查询文本(有节略) 03/16/2019   14,576 85,094 5xDSguu4PvK04se2pPiOexeh6aE= DECLARE C CURSOR FOR SELECT * INTO :%col(1) , :%col(2) , :%col(3) , :%col(4)  … 03/16/2019   15,552 3,326 rCQX+CKPwFR9zOplmtMhxVnQxyw= DECLARE C CURSOR FOR SELECT * INTO :%col(1) , :%col(2) , :%col(3) , :%col(4) , … 03/16/2019   16,892 597 yW3catzQzC0KE9euvIJ+o4mDwKc= DECLARE C CURSOR FOR SELECT * INTO :%col(1) , :%col(2) , :%col(3) , :%col(4) , :%col(5) , :%col(6) , :%col(7) , 03/16/2019   16,664 436 giShyiqNR3K6pZEt7RWAcen55rs= DECLARE C CURSOR FOR SELECT * , TKGROUP INTO :%col(1) , :%col(2) , :%col(3) , .. 03/16/2019   74,550 342 4ZClMPqMfyje4m9Wed0NJzxz9qw= DECLARE C CURSOR FOR SELECT … 表 1:客户站点的实际结果   INFORMATION_SCHEMA 模式中的表 除了统计信息外,此模式中的表还会跟踪查询、列、索引等的使用位置。 通常,SQL 语句是起始表,它的连接方式类似于“Statements.Hash=OtherTable.Statement”。 直接访问这些表以查找一天中开销最大的查询,这一操作的等效查询是...   SELECT DS.Day,Loc.Location,DS.StatCount,DS.StatTotal,S.Statement,S.Hash FROM INFORMATION_SCHEMA.STATEMENT_DAILY_STATS DS left join INFORMATION_SCHEMA.STATEMENTS S on S.Hash=DS.Statement left join INFORMATION_SCHEMA.STATEMENT_LOCATIONS Loc on S.Hash=Loc.Statement where Day='08/26/2019' order by DS.stattotal desc   无论你是否考虑建立一个更系统的过程,我都建议每个使用 SQL 处理大型应用程序的人今天都运行这个查询。 如果某个特定查询显示为高开销,则可以通过运行以下语句获取历史记录 SELECT DS.Day,Loc.Location,DS.StatCount,DS.StatTotal,S.Statement,S.Hash FROM INFORMATION_SCHEMA.STATEMENT_DAILY_STATS DS left join INFORMATION_SCHEMA.STATEMENTS S on S.Hash=DS.Statement left join INFORMATION_SCHEMA.STATEMENT_LOCATIONS Loc on S.Hash=Loc.Statement where S.Hash='jDqCKaksff/4up7Ob0UXlkT2xKY=' order by DS.Day     每日提取统计信息的代码示例 标准免责声明 - 此示例仅用于说明。 不对其提供支持,也不保证其有效。 Class DRL.MonitorSQLTask Extends %SYS.Task.Definition{Parameter TaskName = "SQL Statistics Summary";Method OnTask() As %Status{              set tSC=$$$OK              TRY {                             do ##class(DRL.MonitorSQL).Run()              }              CATCH exp {                            set tSC=$SYSTEM.Status.Error("Error in SQL Monitor Summary Task")              }              quit tSC }}   Class DRL.MonitorSQLText Extends %Persistent{/// Hash of query textProperty Hash As %String;  /// query text for hashProperty QueryText As %String(MAXLEN = 9999);Index IndHash On Hash [ IdKey, Unique ];} /// Summary of very low cost SQL query statistics collected in Cache 2017.1 and later. /// Refer to documentation on "SQL Statement Details" for information on the source data. /// Data is stored by date and time to support queries over time. /// Typically run to summarise the SQL query data from the previous day.Class DRL.MonitorSQL Extends %Persistent{/// RunDate and RunTime uniquely identify a runProperty RunDate As %Date;/// Time the capture was started/// RunDate and RunTime uniquely identify a runProperty RunTime As %Time;/// Count of total hits for the time period for Property TotalHits As %Integer;/// Sum of pTimeProperty SumPTime As %Numeric(SCALE = 4);/// Routine where SQL is foundProperty RoutineName As %String(MAXLEN = 1024);/// Hash of query textProperty Hash As %String;Property Variance As %Numeric(SCALE = 4);/// Namespace where queries are runProperty Namespace As %String;/// Default run will process the previous days data for a single day./// Other date range combinations can be achieved using the Capture method.ClassMethod Run(){              //Each run is identified by the start date / time to keep related items together                           set h=$h-1              do ..Capture(+h,+h)}/// Captures historic statistics for a range of datesClassMethod Capture(dfrom, dto){              set oldstatsvalue=$system.SQL.SetSQLStatsJob(-1)                             set currNS=$znspace                set tSC=##class(%SYS.Namespace).ListAll(.nsArray)                set ns=""      set time=$piece($h,",",2)      kill ^||TMP.MonitorSQL                do {                               set ns=$o(nsArray(ns))                               quit:ns=""                               use 0 write !,"processing namespace ",ns                               zn ns                                           for dateh=dfrom:1:dto {                                                          set hash=""                                                          set purgedun=0                                                          do {                                                                        set hash=$order(^rINDEXSQL("sqlidx",1,hash))                                                                        continue:hash=""                                                                        set stats=$get(^rINDEXSQL("sqlidx",1,hash,"stat",dateh))                                                                        continue:stats=""                                                                        set ^||TMP.MonitorSQL(dateh,ns,hash)=stats                                                                                                                                 &SQL(SELECT  Location into :tLocation FROM INFORMATION_SCHEMA.STATEMENT_LOCATIONS WHERE Statement=:hash)                                                                        if SQLCODE'=0 set Location=""                                                                        set ^||TMP.MonitorSQL(dateh,ns,hash,"Location")=tLocation                                                                                                                                 &SQL(SELECT  Statement INTO :Statement FROM INFORMATION_SCHEMA.STATEMENTS WHERE Hash=:hash)                                                                        if SQLCODE'=0 set Statement=""                                                                        set ^||TMP.MonitorSQL(dateh,ns,hash,"QueryText")=Statement                                                          } while hash'=""                                                                                                    }                } while ns'=""                zn currNS                set dateh=""                do {                               set dateh=$o(^||TMP.MonitorSQL(dateh))                               quit:dateh=""                               set ns=""                               do {                                             set ns=$o(^||TMP.MonitorSQL(dateh,ns))                                             quit:ns=""                                             set hash=""                                             do {                                                         set hash=$o(^||TMP.MonitorSQL(dateh,ns,hash))                                                          quit:hash=""                                                         set stats=$g(^||TMP.MonitorSQL(dateh,ns,hash))                                                          continue:stats=""                                                          // The first time through the loop delete all statistics for the day so it is re-runnable                                                          // But if we run for a day after the raw data has been purged, it will wreck eveything                                                          // so do it here, where we already know there are results to insert in their place.                                                          if purgedun=0 {                                                                        &SQL(DELETE FROM websys.MonitorSQL WHERE RunDate=:dateh )                                                                        set purgedun=1                                                          }                                                                                                                   set tObj=##class(DRL.MonitorSQL).%New()                                                          set tObj.Namespace=ns                                                          set tObj.RunDate=dateh                                                          set tObj.RunTime=time                                                          set tObj.Hash=hash                                                          set tObj.TotalHits=$listget(stats,1)                                                          set tObj.SumPTime=$listget(stats,2)                                                          set tObj.Variance=$listget(stats,3)                                                          set tObj.Variance=$listget(stats,3)                                                                                                                  set queryText=^||TMP.MonitorSQL(dateh,ns,hash,"QueryText")                                                         set tObj.RoutineName=^||TMP.MonitorSQL(dateh,ns,hash,"Location")                                                                                                             &SQL(Select ID into :TextID from DRL.MonitorSQLText where Hash=:hash)                                                          if SQLCODE'=0 {                                                                        set textref=##class(DRL.MonitorSQLText).%New()                                                                        set textref.Hash=tObj.Hash                                                                        set textref.QueryText=queryText                                                                        set sc=textref.%Save()                                                          }                                                                                                                  set tSc=tObj.%Save()                                                                                                                   //avoid dupicating the query text in each record because it can be very long. Use a lookup                                                          //table keyed on the hash. If it doesn't exist add it.                                                          if $$$ISERR(tSc) do $system.OBJ.DisplayError(tSc)                                                                                                                   if $$$ISERR(tSc) do $system.OBJ.DisplayError(tSc)                                             } while hash'=""                               } while ns'=""                                                                         } while dateh'=""                                                           do $system.SQL.SetSQLStatsJob(0)}Query Export(RunDateH1 As %Date, RunDateH2 As %Date) As %SQLQuery{SELECT S.Hash,RoutineName,RunDate,RunTime,SumPTime,TotalHits,Variance,RoutineName,T.QueryText              FROM DRL.MonitorSQL S LEFT JOIN DRL.MonitorSQLText T on S.Hash=T.Hash              WHERE RunDate>=:RunDateH1 AND RunDate
文章
jieliang liu · 三月 1, 2021

大数据的 5 个V 与 InterSystems IRIS

大数据的 5 个 V 与 InterSystems IRIS 参见下表: Velocity(速度):水平和垂直节点扩展传递出的弹性速度 实现者:分布式内存缓存、分布式处理、分片和多模型架构 https://www.intersystems.com/isc-resources/wp-content/uploads/sites/24/ESG_Technical_Review-InterSystems-IRIS.pdf 和 https://learning.intersystems.com/course/view.php?id=1254&ssoPass=1 Value(价值):Analytics 和 AI产生的指数数据价值实现:BI、NLP、ML、AutoML 和多模型架构 https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=SETAnalytics 和 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_AUTOML Veracity(真实性):在公司层面统一的单一真实数据源--实现者:连接器、数据总线、数据集成的 BPL 以及 API 管理 https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_interoperability 和 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_iam Volume(容量):多个性能出色的 TB/PB 级数据存储库 实现者:分布式内存缓存、分布式处理、分片和多模型架构 https://www.intersystems.com/isc-resources/wp-content/uploads/sites/24/ESG_Technical_Review-InterSystems-IRIS.pdf 和 https://learning.intersystems.com/course/view.php?id=1254&ssoPass=1 Variety(多样性):同一位置多种数据格式(XML、JSON、SQL、对象)实现者:Repositório e Arquitetura Multimodelohttps://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_multimodel